Como soluciono problemas do agente do Amazon Kinesis em uma máquina Linux?

6 minuto de leitura
0

Estou tentando usar o Amazon Kinesis Agent em uma máquina Linux. No entanto, estou enfrentando um problema. Como resolvo isso?

Breve descrição

Este artigo aborda os seguintes problemas:

  • O Kinesis Agent está enviando eventos duplicados.
  • O Kinesis Agent está causando acelerações de gravação e registros com falha no meu stream do Amazon Kinesis.
  • O Kinesis Agent não consegue ler ou transmitir arquivos de log.
  • Meu servidor Amazon Elastic Computing (Amazon EC2) continua falhando devido a um tamanho insuficiente do heap Java.
  • Minha utilização de CPU do Amazon EC2 está muito alta.

Resolução

O Kinesis Agent está enviando eventos duplicados

Se você recebe duplicatas sempre que envia registros do Kinesis Agent, é provável que haja uma rotação de arquivos em que o padrão de correspondência não está qualificado corretamente. Sempre que você envia um log, o Kinesis Agent verifica o LatestUpdateTimestamp de cada arquivo que corresponde ao padrão de arquivo. Por padrão, o Kinesis Agent escolhe o arquivo mais recentemente atualizado, identificando um arquivo ativo que corresponda ao padrão de rotação. Se mais de um arquivo for atualizado ao mesmo tempo, o Kinesis Agent não poderá determinar o arquivo ativo a ser rastreado. Portanto, o Kinesis Agent começa a seguir os arquivos atualizados desde o início, causando várias duplicações.

Para evitar esse problema, crie fluxos de arquivo diferentes para cada arquivo individual, certificando-se de que seu padrão de arquivo rastreie as rotações.

Observação: se você estiver rastreando uma rotação, é uma prática recomendada usar as configurações create ou rename de rotação de logs, em vez de copytruncate.

Por exemplo, você pode usar um fluxo de arquivo semelhante a este:

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

O Kinesis Agent também tenta novamente todos os registros que ele não envia de volta quando há problemas de rede intermitentes. Se o Kinesis Agent não receber a confirmação no lado do servidor, ele tentará novamente, criando duplicatas. Neste exemplo, o aplicativo downstream deve remover a desduplicação.

Duplicatas também podem ocorrer quando o arquivo de ponto de verificação é adulterado ou removido. Se um arquivo de ponto de verificação for armazenado em /var/run/aws-kinesis-agent, ele poderá ser limpo durante uma reinstalação ou reinicialização da instância. Quando você executar o Kinesis Agent novamente, a aplicação falhará assim que o arquivo for lido, causando duplicatas. Portanto, mantenha o ponto de verificação no diretório principal do Agent e atualize a configuração do Kinesis Agent com um novo local.

Por exemplo:

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

O Kinesis Agent está causando acelerações de gravação e registros com falha no meu fluxo de dados do Amazon Kinesis

Por padrão, o Kinesis Agent tenta enviar os arquivos de log o mais rápido possível, violando os limites de throughput do Kinesis. No entanto, os registros com falha são novamente enfileirados e são repetidos continuamente para evitar perda de dados. Quando a fila está cheia, o Kinesis Agent para de seguir o arquivo, o que pode causar atraso na aplicação.

Por exemplo, se a fila estiver cheia, seu log será semelhante a este:

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

Observação: o tamanho da fila é determinado pelo parâmetro PublishQueueCapacity (com o valor padrão definido como “100").

Para investigar quaisquer registros com falha ou problemas de desempenho no fluxo de dados do Kinesis, tente o seguinte:

  • Monitore a métrica RecordSendErrors no Amazon CloudWatch.
  • Revise os registros do Kinesis Agent para verificar se houve algum atraso. A entrada ProvisionedThroughputExceededException é visível somente no nível de log DEBUG. Durante esse período, a velocidade de envio de registros do Kinesis Agent pode ser mais lenta se a maior parte da CPU for usada para analisar e transformar dados.
  • Se você perceber que o Kinesis Agent está ficando para trás, considere aumentar o seu fluxo de entrega do Amazon Kinesis.

O Kinesis Agent não consegue ler nem transmitir arquivos de log

Certifique-se de que a instância do Amazon EC2 em que seu agente do Kinesis está sendo executado tenha as permissões adequadas para acessar o fluxo de entrega do Kinesis de destino. Se o Kinesis Agent não conseguir ler o arquivo de log, verifique se o Kinesis Agent tem permissões de leitura para esse arquivo. Para todos os arquivos que correspondem a esse padrão, a permissão de leitura deve ser concedida para aws-kinesis-agent-user. Para o diretório que contém os arquivos, as permissões de leitura e execução também devem ser concedidas para aws-kinesis-agent-user. Caso contrário, você receberá um erro de Acesso negado ou uma exceção de tempo de execução Java.

Meu servidor Amazon EC2 continua falhando devido ao tamanho insuficiente do heap Java

Se o seu servidor do Amazon EC2 continuar falhando devido ao tamanho insuficiente do heap Java, aumente o tamanho do heap alocado ao Amazon Kinesis Agent. Para configurar a quantidade de memória disponível para o Kinesis Agent, atualize o arquivo “start-aws-kinesis-agent”. Aumente os valores definidos para os seguintes parâmetros:

  • JAVA_START_HEAP
  • JAVA_MAX_HEAP

Observação: no Linux, o caminho do arquivo para “start-aws-kinesis-agent” é “/usr/bin/start-aws-kinesis-agent”.

Minha utilização de CPU do Amazon EC2 está muito alta

A utilização da CPU pode aumentar quando o Kinesis Agent está executando a correspondência de padrão regex subotimizada e a transformação de log. Se você já configurou o Kinesis Agent, tente remover todas as correspondências e transformações do padrão de expressão regular (regex). Em seguida, verifique se você ainda está enfrentando problemas de CPU.

Se ainda tiver problemas de CPU, considere ajustar os threads e os registros armazenados em buffer na memória. Ou atualize alguns dos parâmetros padrão no arquivo de configurações /etc/aws-kinesis/agent.json. Você também pode diminuir vários parâmetros no arquivo de configuração do Kinesis Agent.

Estes são parâmetros gerais de configuração que você pode tentar diminuir:

  • sendingThreadsMaxQueueSize: O tamanho de workQueue do threadPool para enviar dados ao destino. O valor padrão é 100.
  • maxSendingThreads: o número de threads para enviar dados ao destino. O valor mínimo é 2. O valor padrão é 12 vezes o número de cores da sua máquina.
  • maxSendingThreadsPerCore: o número de threads por core para enviar dados ao destino. O valor padrão é 12.

Estes são os parâmetros de configuração de fluxo que você pode tentar diminuir:

  • publishQueueCapacity: o número máximo de buffers de registros que podem ser enfileirados antes de serem enviados ao destino. O valor padrão é 100.
  • minTimeBetweenFilePollsMillis: o intervalo de tempo em que o arquivo rastreado é pesquisado e os novos dados começam a ser analisados. O valor padrão é 100.

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos