У меня есть модуль, который запускает 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
быть использован для достижения этой цели?