Logstash со штурвалом в Kubernetes: не работает фильтр grok - PullRequest
0 голосов
/ 11 сентября 2018

Я установил filebeat -> logstash - >asticsearch -> стек kibana в Kubernetes с диаграммами рулевого управления:

helm repo add incubator http://storage.googleapis.com/kubernetes-charts-incubator
helm install --name elastic --namespace monitoring incubator/elasticsearch --set client.replicas=1,master.replicas=2,data.replicas=1

helm install --name logstash --namespace monitoring incubator/logstash -f logstash_values.yaml

helm install --name filebeat stable/filebeat -f filebeat_values.yaml

helm install stable/kibana --name kibana --namespace monitoring 

Журналы индексируются в ES, но «сообщение» содержит всю строку, а неопределенные поля.Мой фильтр grok, похоже, не работает в logstash conf.

На https://github.com/helm/charts/tree/master/incubator/logstash нет документации по настройке шаблонов.

Вот что я попробовал:

формат моего журнала:

10-09-2018 11:57:55.906 [Debug] [LOG] serviceName - Technical - my specific message - correlationId - userId - data - operation - error - stackTrace escaped on one line

logstash_values.yaml (из https://github.com/helm/charts/blob/master/incubator/logstash/values.yaml):

elasticsearch:
  host: elasticsearch-client.default.svc.cluster.local
  port: 9200

patterns:
   main: |-
     (?<time>(?:2[0123]|[01]?[0-9]):(?:[0-5][0-9]):(?:(?:[0-5]?[0-9]|60)(?:[:.,][0-9]+)?)\.(?:[0-9]){3})} [(?<logLevel>.*)] [(?<code>.*)] (?<caller>.*) - (?<logMessageType>.*) - (?<message>.*) - (?<correlationId>.*) - (?<userId>.*) - (?<data>.*) - (?<operation>.*) - (?<error>.*) - (?<stackTrace>.*)

inputs:
  main: |-
    input {
      beats {
        port => 5044
      }
    }

filters:

outputs:
  main: |-
    output {
      elasticsearch {
        hosts => ["${ELASTICSEARCH_HOST}:${ELASTICSEARCH_PORT}"]
        manage_template => false
        index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
        document_type => "%{[@metadata][type]}"
      }
    }

Это становится "logstash-pattern" в configMap Kubernetes:

apiVersion: v1
kind: ConfigMap
data:
  main: (?<time>(?:2[0123]|[01]?[0-9]):(?:[0-5][0-9]):(?:(?:[0-5]?[0-9]|60)(?:[:.,][0-9]+)?)\.(?:[0-9]){3}) [(?<code>.*)] [(?<logLevel>.*)] (?<service>.*) - (?<logMessageType>.*) - (?<message>.*) - (?<correlationId>.*) - (?<userId>.*) - (?<data>.*) - (?<operation>.*) - (?<error>.*) - (?<stackTrace>.*)

Я не вижу никаких журналов ошибок в модуле logstash.

У вас есть идеи, как настроить шаблоны в logstash в Kubernetes?

Спасибо.

1 Ответ

0 голосов
/ 12 сентября 2018

Я ошибался "узором" и "фильтром".

На диаграмме Шлема «шаблон» предназначен для указания наших пользовательских шаблонов Грока (https://grokdebug.herokuapp.com/patterns):

MY_CUSTOM_ALL_CHARS. *

Мой фильтр grok должен находиться в секции фильтра:

patterns:
  # nothing here for me 

filters:
  main: |-
    filter {
      grok {
        match => { "message" => "\{%{TIMESTAMP_ISO8601:time}\} \[%{DATA:logLevel}\] \[%{DATA:code}\] %{DATA:caller} &\$ %{DATA:logMessageType} &\$ %{DATA:message} &\$ %{DATA:correlationId} &\$ %{DATA:userId} &\$ %{DATA:data} &\$ %{DATA:operation} &\$ %{DATA:error} &\$ (?<stackTrace>.*)" }
        overwrite => [ "message" ]
      }
      date {
        match => ["time", "ISO8601"]
        target => "time"
      }
    }
...