Come posso risolvere l'incremento del parametro TargetResponseTime per un Application Load Balancer?

Ultimo aggiornamento: 06/05/2022

Ho notato un incremento nel parametro TargetResponseTime di Application Load Balancer. Come posso risolvere questo problema?

Breve descrizione

TargetResponseTime è il tempo trascorso, in secondi, tra il momento in cui la richiesta lascia il bilanciatore del carico e la ricezione di una risposta dalla destinazione. È equivalente al campo target_processing_time nei registri di accesso di Application Load Balancer.

Le possibili cause di un aumento di TargetResponseTime includono:

  • Gli host non sono integri.
  • Le istanze di back-end sono sopraffatte dal numero eccessivo di richieste.
  • L'utilizzo della CPU nelle istanze di back-end è elevato.
  • Una o più destinazioni sono difettose.
  • Le dipendenze delle applicazioni Web in esecuzione sulle istanze di back-end hanno dei problemi.

Risoluzione

Gli host non sono integri

Verifica che tutte le destinazioni di Application Load Balancer siano integre. Consulta In che modo è possibile risolvere i problemi relativi ai controlli dell'integrità non riusciti per Application Load Balancer?

Le istanze di back-end sono sopraffatte dal numero eccessivo di richieste

Controlla la statistica Sum dei parametri RequestCount e ActiveConnectionCount di Amazon CloudWatch per il l'Application Load Balancer. Un aumento del valore Sum che coincide con l'incremento di TargetResponseTime può indicare che le istanze di back-end sono sopraffatte dalla mole di richieste.

Per risolvere questo problema, configura un gruppo Auto Scaling per le istanze di back-end. Consulta il Tutorial: configurazione di un'applicazione dimensionabile e con bilanciamento del carico.

L'utilizzo della CPU nelle istanze di back-end è elevato

Controlla il parametro CPUUtilization di CloudWatch delle istanze di back-end. Se l'utilizzo della CPU è elevato o si verifica un picco di utilizzo, aggiorna le istanze a un tipo di istanza più grande.

Una o più destinazioni sono difettose

Se riscontri destinazioni difettose, segui questi passaggi per risolvere il problema:

1.    Abilita la registrazione degli accessi per il bilanciatore del carico.

2.    Scarica i registri di accesso per l'intervallo di tempo in cui il valore TargetResponseTime è elevato. Ad esempio, per scaricare i registri di accesso tra 2022-02-01T03:00 e 2022-02-01T03:35 utilizzando AWS Command Line Interface (AWS CLI):

aws s3 cp s3://bucket-name[/prefix]/AWSLogs/aws-account-id/elasticloadbalancing/region/2022/02/01/ ./alblogs --recursive --exclude "*" --include "*20220201T03[0123]*”

Nota: sostituisci bucket-name con il nome del tuo bucket, aws-account-id con l'ID del tuo account AWS e region con la regione AWS in cui si trova il tuo account.

3.    Usa gli strumenti a riga di comando per analizzare i registri di accesso:

I registri di accesso di Elastic Load Balancing (ELB) sono compressi in formato .gzip.

Passaggio opzionale: per estrarre i registri, utilizza il seguente comando:

$   gzip -dr ./alblogs

Scenari di esempio

Per ottenere la latenza massima per target_processing_time, esegui il seguente comando.

File di log compresso:

$zcat *.log.gz | awk '$7 != -1' | awk 'BEGIN{a=0}{if ($7>0+a) a=$7} END{print a}'

File di log non compresso:

$cat *.log.gz | awk '$7 != -1' | awk 'BEGIN{a=0}{if ($7>0+a) a=$7} END{print a}'

-oppure-

Per contare il numero di richieste che hanno un target_processing_time ">=N" secondi per destinazione, modifica N con il numero di secondi in base ai tuoi requisiti.

Comando di esempio per file di log compresso:

$zcat *.log.gz | awk '{if($7 >= N){print $5}}' | sort | uniq -c

Comando di esempio per file di log non compresso:

$cat *.log.gz | awk '{if($7 >= N){print $5}}' | sort | uniq -c

Output di esempio:

12 10.10.20.111:80 
12 10.10.60.163:80
254 10.10.70.7:80
6 10.10.80.109:80
20656 10.3.19.141:80

Nell'esempio precedente, la destinazione con indirizzo IP 10.3.19.141 è la principale responsabile dell'incremento di TargetResponseTime. In questo caso, controlla il sistema operativo (OS) e l'applicazione Web per la destinazione.

Le dipendenze delle applicazioni Web in esecuzione sulle istanze di back-end hanno dei problemi

Acquisisci i pacchetti sulla destinazione per identificare il ritardo nella risposta della destinazione. Per il sistema operativo Linux, usa tcpdump.

Per acquisire una trasmissione HTTP POST completa in entrata e in uscita, incluse le richieste e le risposte HTTP sulla porta TCP/80:

tcpdump -i any -ns 0 -A 'tcp dst port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504F5354 or tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x48545450 or tcp[((tcp[12:1]& 0xf0) >> 2):4] = 0x3C21444F'

Per acquisire una trasmissione HTTP GET completa in entrata e in uscita, incluse le richieste e le risposte HTTP sulla porta TCP/80:

tcpdump -i any -ns 0 -A 'tcp dst port 80 and tcp[((tcp[12:1]& 0xf0) >> 2):4] = 0x47455420 or tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x48545450 or tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x3C21444F'

Output di esempio:

14:04:12.186593 IP 10.10.30.219.13000 > 10.10.60.10.http: Flags [P.], seq 641705534:641705793, ack 1587610435, win 106, options [nop,nop,TS val 1165674323 ecr 263805247],
    length 259: HTTP: GET / HTTP/1.1 E..7."@...I. .. < 2..P&?.>^..C...j9...... Ez.S..Y?GET / HTTP/1.1 X-Forwarded-For: 54.66.76.204 X-Forwarded-Proto: http X-Forwarded-Port: 80 Host: labalbinternet-1236602672.ap-southeast-2.elb.amazonaws.com
    X-Amzn-Trace-Id: Root=1-6254355c-15db4904726649b66a1e47d7 User-Agent: curl/7.79.1 Accept: */* ................
14:04:21.187892 IP 10.10.60.10.http > 10.10.30.219.13000: Flags [P.], seq 1:592, ack 259, win 488, options [nop,nop,TS val 263814250
    ecr 1165674323], length 591: HTTP: HTTP/1.1 200 OK E...\.@.@.l. < ...P2.^..C&?.A....qn..... ..|jEz.SHTTP/1.1 200 OK Date: Mon, 11 Apr 2022 14:04:12 GMT Server: Apache/2.4.52 () OpenSSL/1.0.2k-fips X-Powered-By: PHP/7.2.34 Upgrade: h2,h2c
    Connection: Upgrade Transfer-Encoding: chunked Content-Type: text/html; charset=UTF-8 159 PHP file name: /index.php<br> ................

Nota: negli output di esempio precedenti, HTTP GET risponde alle 14:04:12 e la destinazione risponde alle 14:04:21. Il TargetResponseTime è di circa 9 secondi. Puoi utilizzare X-Amzn-Trace-Id: Root per tracciare questo record nei registri di accesso.

Comando di esempio per file di log compresso:

$zcat *.log.gz | awk '{if($20 ~ "1-6254355c-15db4904726649b66a1e47d7"){print $6,$7,$8 }}'

Comando di esempio per file di log non compresso:

$cat *.log.gz | awk '{if($20 ~ "1-6254355c-15db4904726649b66a1e47d7"){print $6,$7,$8 }}'

Output di esempio:

0.008 9.002 0.000

Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?