Как отфильтровать журналы по серьезности в fluentd и отправить их в 2 разные системы регистрации - PullRequest
0 голосов
/ 18 января 2019

Мне нужна помощь, чтобы настроить Fluentd для фильтрации журналов по степени серьезности.

у нас есть две разные системы мониторинга Elasticsearch и Splunk, когда мы включили уровень журнала DEBUG в нашем приложении, оно ежедневно генерирует тонны журналов, поэтому мы хотим отфильтровать журналы по серьезности и отправить его в 2 разные системы ведения журналов.

когда журналы имеют серьезность: INFO и ERROR, затем перенаправляют журналы контейнеров в Splunk, и кроме тех журналов DEBUG, TRACE, WARN и других журналов, которые должны отправляться в elastocsearch, пожалуйста, помогите мне, как мы можем отфильтровать их.

Вот формат сгенерированного журнала:

event.log: { "@ тяжести": "DEBUG", "@ метки времени": "2019-01-18T00: 15: 34.416Z", "@ traceId":

event.log: { "@ тяжести": "INFO", "@ метки времени": "2019-01-18T00: 15: 34.397Z", "@ traceId":

event.log: { "@ тяжести": "WARN", "@ метки времени": "2019-01-18T00: 15: 34.920Z", "@ traceId":

пожалуйста, найдите ниже конфигурацию fluentd.

Я добавил метод исключения в фильтре, а также установил плагин grep, добавил метод grep, он не работает.

добавлен фильтр для тестирования:

<exclude>
       @type grep
       key severity 
       pattern DEBUG
      </exclude>

также добавлено:

<filter kubernetes.**>
@type grep
exclude1 severity (DEBUG|NOTICE|WARN)
</filter>

kind: ConfigMap
apiVersion: v1
metadata:
  name: fluentd-config
  namespace: logging
  labels:
    k8s-app: fluentd
data:
  fluentd-standalone.conf: |
    <match fluent.**>
      @type null
    </match>
    # include other configs
    @include systemd.conf
    @include kubernetes.conf
  fluentd.conf: |
    @include systemd.conf
    @include kubernetes.conf
  fluentd.conf: |
    # Use the config specified by the FLUENTD_CONFIG environment variable, or
    # default to fluentd-standalone.conf
    @include "#{ENV['FLUENTD_CONFIG'] || 'fluentd-standalone.conf'}"
  kubernetes.conf: |
    <source>
      @type tail
      @log_level debug
      path /var/log/containers/*.log
      pos_file /var/log/kubernetes.log.pos
      time_format %Y-%m-%dT%H:%M:%S.%NZ
      tag kubernetes.*
      format json
    </source>
    <filter kubernetes.**>
      @type kubernetes_metadata
      verify_ssl false
      <exclude>
       @type grep
       key severity 
       pattern DEBUG
      </exclude>
    </filter>
    <filter kubernetes.**>
      @type record_transformer
      enable_ruby
      <record>
        event ${record}
      </record>
      renew_record
      auto_typecast
    </filter>
    <filter kubernetes.**>
    @type grep
    exclude1 severity (DEBUG|NOTICE|WARN)
    </filter>
  kubernetes.conf: |
    <source>
      @type tail
      @log_level debug
      path /var/log/containers/*.log
      pos_file /var/log/kubernetes.log.pos
      time_format %Y-%m-%dT%H:%M:%S.%NZ
      tag kubernetes.*
      format json
    </source>
    <filter kubernetes.**>
      @type kubernetes_metadata
      verify_ssl false
    </filter>
    <filter kubernetes.**>
      @type record_transformer
      enable_ruby
      <record>
        event ${record}
      </record>
      renew_record
      auto_typecast
    </filter>
    # The `all_items` paramater isn't documented, but it is necessary in order for
    # us to be able to send k8s events to splunk in a useful manner
    <match kubernetes.**>
      @type copy
      <store>
        @type splunk-http-eventcollector
        all_items true
        server localhost:8088
        protocol https
        verify false
      </store>
      <store>
        @type elasticsearch
        host localhost
        port 9200
        scheme http
        ssl_version TLSv1_2
        ssl_verify false
        </buffer>
      </store>
    </match>

1 Ответ

0 голосов
/ 18 января 2019

Как насчет следующего? (не проверено)

<source>
  @type tail
  @log_level debug
  path /var/log/containers/*.log
  pos_file /var/log/kubernetes.log.pos
  time_format %Y-%m-%dT%H:%M:%S.%NZ
  tag kubernetes.*
  format json
  @label @INPUT
</source>

<label @INPUT>
  <filter kubernetes.**>
    @type kubernetes_metadata
    verify_ssl false
  </filter>
  <filter kubernetes.**>
    @type record_transformer
    enable_ruby
    <record>
      event ${record}
    </record>
    renew_record
    auto_typecast
  </filter>
  <match>
    @type relabel
    @label @RETAG
  </match>
</label>

<label @RETAG>
  <match>
    @type rewrite_tag_filter
    <rule>
      key @severity
      pattern /(INFO|ERROR)/
      tag splunk.${tag}
    </rule>
    <rule>
      key @severity
      pattern /(DEBUG|TRACE|WARN)/
      tag elasticsearch.${tag}
    </rule>
    @label @OUTPUT
  </match>
</label>

<label @OUTPUT>
  <match splunk.**>
    @type splunk-http-eventcollector
    # ... snip
  </match>
  <match elasticsearch.**>
    @type elasticsearch
    # ... snip
  </match>
</label>
...