Добавление метаданных Kubernetes в пользовательское событие FluentD Non DaemonSet @tail - PullRequest
0 голосов
/ 18 марта 2020

У меня есть модуль, который запускает Fluentd в качестве коляски, которая собирает журналы из другого контейнера (пример приложения), и общий том был смонтирован в обоих контейнерах (volumeMounts).

Пример кода приложения записывает UT C метки времени в файл

   containers:
    - name: sampleApplication
      image: ${DOCKER_IMAGE}:${DOCKER_TAG}
      args:
        - /bin/sh
        - -c
        - >
          i=0;
          while true;
          do
            echo "$i: $(date)" >> /var/log/1.log;
            i=$((i+1));
            sleep 1;
          done

Хвостовой вывод /var/log/1.log,

2849: Wed Mar 18 03:12:01 UTC 2020
2850: Wed Mar 18 03:12:02 UTC 2020
2851: Wed Mar 18 03:12:03 UTC 2020
2852: Wed Mar 18 03:12:04 UTC 2020
2853: Wed Mar 18 03:12:05 UTC 2020
2854: Wed Mar 18 03:12:06 UTC 2020

Конфигурация FluentD:

fluent.conf: |-
  <source>
    @type tail
    path /var/log/1.log
    pos_file /var/log/1.log.pos
    refresh_interval 5
    rotate_wait 5
    time_format %Y-%m-%dT%H:%M:%S.%N%Z
    format json
    keep_time_key true
    tag fluentd_event
  </source>

  <match **>
    @type secure_forward
    self_hostname "#{ENV['HOSTNAME']}"
    shared_key ****12345678****
    secure yes
    ca_cert_path /tmp/fluentd/keys/ca_cert.pem
    ca_private_key_path /tmp/fluentd/keys/external_ca_key.pem
    ca_private_key_passphrase ocpsecureforward

    <server>
       # This server accepts the fluentD events
      host 100.100.100.23
      port 24284
    </server>
  </match>

Приведенная выше конфигурация хорошо работает для меня, когда я могу визуализировать хвостовые события плагина fluentD @tail в Kibana, но я также хотел бы добиться добавления метаданных basi c kubernetes к хвостовым событиям, таким как namespace_name, pod_name и container_name. Я настроил плагин kubernetes_metadata как

<filter **>
 type kubernetes_metadata
 kubernetes_url "#{ENV['K8S_HOST_URL']}"
 cache_size "#{ENV['K8S_METADATA_CACHE_SIZE'] || '1000'}"
 watch "#{ENV['K8S_METADATA_WATCH'] || 'false'}"
 bearer_token_file /var/run/secrets/kubernetes.io/serviceaccount/token
 ca_file /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
 use_journal "#{ENV['USE_JOURNAL'] || 'nil'}"
 container_name_to_kubernetes_regexp '^(?<name_prefix>[^_]+)_(?<container_name>[^\._]+)(\.(? 
 <container_hash>[^_]+))?_(?<pod_name>[^_]+)_(?<namespace>[^_]+)_[^_]+_[^_]+$'

Я пробежался по некоторым блогам и узнал, что метаданные kubernetes можно фильтровать и добавлять из файла журнала контейнера, но я НЕ Запуск FluentD в качестве DaemonSet. Я собираюсь запустить его как коляску и просто собрать файл журнала приложения с помощью плагина @tail и добавить к событию метаданные basi c kubernetes.

Может ли фильтр kubernetes_metadata быть использован для достижения этой цели?

...