In che modo è possibile risolvere i problemi di Amazon Kinesis Agent su un computer Linux?

Ultimo aggiornamento: 05/05/2022

Sto provando a utilizzare Amazon Kinesis Agent su una macchina Linux. Tuttavia, sto riscontrando un problema. Come posso risolverlo?

Breve descrizione

In questo articolo sono descritti i seguenti problemi:

  • Kinesis Agent sta inviando eventi duplicati.
  • Kinesis Agent causa throttle di scrittura e record non riusciti sul mio flusso Amazon Kinesis.
  • Kinesis Agent non è in grado di leggere o trasmettere file di log.
  • Il mio server Amazon Elastic Computing (Amazon EC2) continua a non funzionare a causa di dimensioni dell'heap Java non sufficienti.
  • L'utilizzo della CPU Amazon EC2 è molto elevato.

Risoluzione

Kinesis Agent sta inviando eventi duplicati

Se si ricevono duplicati ogni volta che si inviano i log da Kinesis Agent, è probabile che si verifichi una rotazione dei file in cui il modello di corrispondenza non è qualificato correttamente. Ogni volta che si invia un log, Kinesis Agent controlla il valore LatestUpdateTimestamp di ogni file che corrisponde al modello di file. Per impostazione predefinita, Kinesis Agent sceglie il file aggiornato più recente, identificando un file attivo che corrisponde al modello di rotazione. Se vengono aggiornati più file contemporaneamente, Kinesis Agent non è in grado di determinare il file attivo di cui tenere traccia. Pertanto, Kinesis Agent inizia a eseguire il tailing dei file aggiornati dall'inizio, causando diversi duplicati.

Per evitare questo problema, crea flussi di file diversi per ogni singolo file, assicurandoti che il tuo modello di file tenga traccia delle rotazioni.

Nota: se stai tenendo traccia di una rotazione, una best practice consiste nell'utilizzare le impostazioni di rotazione dei log create o rename, anziché copytruncate.

Ad esempio, puoi usare un flusso di file simile a questo:

"flows": [
        {
            "filePattern": "/tmp/app1.log*",
            "kinesisStream": "yourkinesisstream1"
        },
        {
            "filePattern": "/tmp/app2.log*",
            "kinesisStream": "yourkinesisstream2"
        }
    ]

Kinesis Agent riprova inoltre tutti i record che non riesce a inviare in caso di problemi di rete intermittenti. Se Kinesis Agent non riesce a ricevere la conferma lato server, prova di nuovo e crea così dei duplicati. In questo esempio, l'applicazione a valle deve essere deduplicata.

I duplicati possono verificarsi anche quando il file del checkpoint viene manomesso o rimosso. Se un file di checkpoint è memorizzato in /var/run/aws-kinesis-agent, allora il file potrebbe essere ripulito durante una reinstallazione o il riavvio di un'istanza. Quando si esegue nuovamente Kinesis Agent, l'applicazione riporta un errore non appena il file viene letto, causando i duplicati. Pertanto, sarà necessario mantenere il checkpoint nella directory principale dell'agente e aggiornare la configurazione di Kinesis Agent con una nuova posizione.

Ad esempio:

"checkpointFile": "/aws-kinesis-agent-checkpoints/checkpoints"

Kinesis Agent causa throttle di scrittura e record non riusciti nel flusso dei dati Amazon Kinesis

Per impostazione predefinita, Kinesis Agent tenta di inviare i file di log il più rapidamente possibile, superando le soglie di throughput di Kinesis. Tuttavia, i record non riusciti vengono nuovamente accodati e vengono riprovati in continuazione per evitare qualsiasi perdita di dati. Quando la coda è piena, Kinesis Agent smette di eseguire il tailing del file, causando un ritardo dell'applicazione.

Ad esempio, se la coda è piena, il log avrà un aspetto simile al seguente:

com.amazon.kinesis.streaming.agent.Agent [WARN] Agent: Tailing is 745.005859 MB (781195567 bytes) behind.

Nota: la dimensione della coda è determinata dal parametro publishQueueCapacity (con il valore predefinito impostato su "100").

Per esaminare eventuali record non riusciti o problemi di prestazioni nel flusso dei dati di Kinesis, prova quanto segue:

  • Monitora il parametro RecordSendErrors in Amazon CloudWatch.
  • Esamina i log di Kinesis Agent per verificare se si sono verificati ritardi. La voce ProvisionedThroughputExceededException è visibile solo a livello di log DEBUG. Durante questo periodo, la velocità di invio dei record di Kinesis Agent può essere più lenta se la maggior parte della CPU viene utilizzata per analizzare e trasformare i dati.
  • Se noti che Kinesis Agent è in ritardo, prendi in considerazione la possibilità di dimensionare verso l'alto il tuo flusso di consegna Amazon Kinesis.

Kinesis Agent non è in grado di leggere o trasmettere file di log

Assicurati che l'istanza Amazon EC2 su cui è in esecuzione il tuo Kinesis Agent disponga delle autorizzazioni appropriate per accedere al flusso di consegna Kinesis di destinazione. Se Kinesis Agent non riesce a leggere il file di log, verifica se dispone delle autorizzazioni di lettura per quel file. Per tutti i file che corrispondono a questo modello, l'autorizzazione di lettura deve essere concessa a aws-kinesis-agent-user. Per la directory contenente i file, le autorizzazioni di lettura ed esecuzione devono essere concesse anche a aws-kinesis-agent-user. In caso contrario, viene restituito un errore di accesso negato o un'eccezione di runtime Java.

Il mio server Amazon EC2 continua a riportare errori a causa di dimensioni non sufficienti dell'heap Java

Se il server Amazon EC2 continua a non funzionare a causa di dimensioni dell'heap Java non sufficienti, aumenta la dimensione dell'heap assegnata ad Amazon Kinesis Agent. Per configurare la quantità di memoria disponibile per Kinesis Agent, aggiorna il file "start-aws-kinesis-agent". Aumenta i valori impostati per i seguenti parametri:

  • JAVA_START_HEAP
  • JAVA_MAX_HEAP

Nota: su Linux, il percorso del file per "start-aws-kinesis-agent" è "/usr/bin/start-aws-kinesis-agent".

L'utilizzo della CPU di Amazon EC2 è molto elevato

L'utilizzo della CPU può aumentare se Kinesis Agent esegue la corrispondenza dei modelli regex sub-ottimizzati e la trasformazione dei log. Se hai già configurato Kinesis Agent, prova a rimuovere tutte le corrispondenze e le trasformazioni dei modelli di espressioni regolari (regex). Quindi, controlla se hai ancora problemi con la CPU.

Nel caso in cui i problemi di CPU persistano, è consigliabile ottimizzare i thread e i record memorizzati nel buffer in memoria. oppure aggiornare alcuni dei parametri di default nel file delle impostazioni di configurazione /etc/aws-kinesis/agent.json. È inoltre possibile ridurre diversi parametri nel file di configurazione di Kinesis Agent.

Ecco i parametri di configurazione generali che puoi provare ad abbassare:

  • sendingThreadsMaxQueueSize: la dimensione workQueue del threadPool per l'invio di dati alla destinazione. Il valore di default è 100.
  • maxSendingThreads: il numero di thread per l'invio di dati alla destinazione. Il valore minimo è 2. Il valore di default è 12 volte il numero di core della tua macchina.
  • maxSendingThreadsPerCore: il numero di thread per core per l'invio di dati alla destinazione. Il valore di default è 12.
Ecco i parametri di configurazione del flusso che puoi provare ad abbassare:
  • publishQueueCapacity: il numero massimo di buffer di record che possono essere messi in coda prima che vengano inviati alla destinazione. Il valore di default è 100.
  • minTimeBetweenFilePollsMillis: l'intervallo di tempo in cui il file tracciato viene interrogato e i nuovi dati iniziano ad essere analizzati. Il valore di default è 100.

Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?