Свободно в kubernetes: разделение журналов контейнеров на основе имени контейнера и изменение их тегов для отправки в ElasticSearch - PullRequest
0 голосов
/ 05 августа 2020

Я развернул fluentd в кластере Openshift и настроил ES и Kibana On-Premise. Мне нужно собирать журналы с узлов и передавать их в ES, работающий локально. В частности, мне нужно разделить /var/log/containers/*.log на два раздела на основе имени контейнера (kong), чтобы все журналы kong были помечены как kong , а остальные были помечены как приложение . Кроме того, мне также потребуется информация о метаданных kubernetes для журналов модуля (пространство имен, имя контейнера и т. Д. c)

Есть ли способ добиться этого?

Fluentd docker версия образа: fluent / fluentd-kubernetes-daemonset: v1.11.1-debian-elasticsearch7-1.3 ElasticSearch, Kibana - 7.8.0

Ниже приведены мои файлы конфигурации. fluentd.conf

    # AUTOMATICALLY GENERATED
    # DO NOT EDIT THIS FILE DIRECTLY, USE /templates/conf/fluent.conf.erb

    @include kubernetes.conf

    <match **>
        @type elasticsearch
        @log_level info
        include_tag_key true
        host "#{ENV['FLUENT_ELASTICSEARCH_HOST']}"
        port "#{ENV['FLUENT_ELASTICSEARCH_PORT']}"
        scheme "#{ENV['FLUENT_ELASTICSEARCH_SCHEME'] || 'http'}"
        logstash_format true
        logstash_prefix openshift-${tag}
        user "#{ENV['FLUENT_ELASTICSEARCH_USER'] || use_default}"
        password "#{ENV['FLUENT_ELASTICSEARCH_PASSWORD'] || use_default}"
        <buffer>
         @type file
         path /var/log/fluentd-buffers/kubernetes.system.buffer
         retry_max_interval 30
         flush_interval 1s
         flush_thread_count 8
         chunk_limit_size 2M
         queue_limit_length 32
         overflow_action block
         retry_forever true
        </buffer>
    </match> 

kubernetes.conf

    <label @FLUENT_LOG>
      <match fluent.**>
        @type null
      </match>
    </label>

    <source>
      @type tail
      path /var/log/containers/*kong*.log
      pos_file /var/log/fluentd-containers.log.pos
      tag "#{ENV['FLUENT_CONTAINER_TAIL_TAG'] || 'kubernetes.*'}"
      exclude_path ["/var/log/containers/fluentd*"]
      read_from_head true
      <parse>
      @type multi_format
        <pattern>
          format json
          time_format '%Y-%m-%dT%H:%M:%S.%N%Z'
          keep_time_key true
        </pattern>
        <pattern>
          format regexp
          expression /^(?<time>.+) (?<stream>stdout|stderr)( (?<logtag>.))? (?<log>.*)$/
          time_format '%Y-%m-%dT%H:%M:%S.%N%:z'
          keep_time_key true
        </pattern>
      </parse>
    </source>

    <filter kubernetes.**>
      @type kubernetes_metadata
      kubernetes_url "#{ENV['FLUENT_FILTER_KUBERNETES_URL'] || 'https://' + ENV.fetch('KUBERNETES_SERVICE_HOST') + ':' + ENV.fetch('KUBERNETES_SERVICE_PORT') + '/api'}"
      verify_ssl "#{ENV['KUBERNETES_VERIFY_SSL'] || true}"
      ca_file "#{ENV['KUBERNETES_CA_FILE']}"
      skip_labels "#{ENV['FLUENT_KUBERNETES_METADATA_SKIP_LABELS'] || 'false'}"
      skip_container_metadata "#{ENV['FLUENT_KUBERNETES_METADATA_SKIP_CONTAINER_METADATA'] || 'false'}"
      skip_master_url "#{ENV['FLUENT_KUBERNETES_METADATA_SKIP_MASTER_URL'] || 'false'}"
      skip_namespace_metadata "#{ENV['FLUENT_KUBERNETES_METADATA_SKIP_NAMESPACE_METADATA'] || 'false'}"
    </filter>  

Я попытался изменить имя тега kubernetes. * на конг . Мне удалось получить журнал в ES, но метаданные kubernetes отсутствовали.

Пожалуйста, помогите в этом отношении.

1 Ответ

0 голосов
/ 05 сентября 2020

Моим решением было установить ярлык. Смотрите, я гарантирую, что это вам поможет.

{ ссылка }

\ o / Хорошо, что автор boyBR

...