Consumindo múltiplas linhas json em fluentd

3

Eu sou novo no fluentd.

Eu tenho aplicativos que são executados em contêineres do Docker. São aplicativos Java que efetuam login no formato JSON. As mensagens JSON geralmente são divididas em várias linhas.

Eu gostaria de usar o driver de log do Docker fluentd para enviar essas mensagens para um servidor central do fluentd.

O driver do Docker envia cada linha separadamente para o fluentd, portanto, preciso poder combinar essas mensagens de várias linhas.

Estou procurando algumas dicas sobre como conseguir isso.

Usando a configuração fluentd da caixa de entrada, meus logs ficam assim:

20170501T050820+0000    docker.fa5077070a33     {"log":"{\"timestamp\":\"2017-05-01T05:08:20.168Z\", \"applicationName\":\"my-event-publisher\", \"applicationVersion\":\"0.0.6-SNAPSHOT\",","container_id":"fa5077070a330f6a3a6f9400cc0ed04f2cf61c5eb2d66c5693385b67f3b09e2e","container_name":"/ecs-td-dev-my-event-publisher-12-my-event-publisher-dcb1b5f5a383d3852d00","source":"stdout"}
20170501T050820+0000    docker.fa5077070a33     {"container_name":"/ecs-td-dev-my-event-publisher-12-my-event-publisher-dcb1b5f5a383d3852d00","source":"stdout","log":"  \"logLevel\":\"INFO\", \"pid\":\"1\", \"threadId\":\"Thread-4\", \"host\":\"fa5077070a33\",","container_id":"fa5077070a330f6a3a6f9400cc0ed04f2cf61c5eb2d66c5693385b67f3b09e2e"}
20170501T050820+0000    docker.fa5077070a33     {"source":"stdout","log":"  \"logger\":\"org.springframework.context.support.DefaultLifecycleProcessor\",","container_id":"fa5077070a330f6a3a6f9400cc0ed04f2cf61c5eb2d66c5693385b67f3b09e2e","container_name":"/ecs-td-dev-my-event-publisher-12-my-event-publisher-dcb1b5f5a383d3852d00"}
20170501T050820+0000    docker.fa5077070a33     {"container_id":"fa5077070a330f6a3a6f9400cc0ed04f2cf61c5eb2d66c5693385b67f3b09e2e","container_name":"/ecs-td-dev-my-event-publisher-12-my-event-publisher-dcb1b5f5a383d3852d00","source":"stdout","log":"  \"message\":\"Stopping beans in phase 2147483647\""}
20170501T050820+0000    docker.fa5077070a33     {"source":"stdout","log":"}","container_id":"fa5077070a330f6a3a6f9400cc0ed04f2cf61c5eb2d66c5693385b67f3b09e2e","container_name":"/ecs-td-dev-my-event-publisher-12-my-event-publisher-dcb1b5f5a383d3852d00"}

Em que ordem devo abordar isso?

Eu preciso:

  1. Extraia a parte 'log' de cada linha
  2. Procure por regex / ^ {"timestamp / para determinar o início da mensagem
  3. Combine cada uma das instruções de log em uma
  4. Analise a sequência de log em JSON real

Para ser honesto, eu não me importo com o formato que o fluentd tem - adicionando o timestamp e o docker.

Eu preferiria apenas ter um arquivo com minhas mensagens JSON sem campos adicionais adicionados pelo fluentd.

Eu vi a documentação sobre o uso de um 'parser', mas como eu disse, eu não estou muito certo sobre a ordem como eu estou tentando casar juntos JSON multilinhas.

    
por wimnat 01.05.2017 / 08:21

0 respostas