Я надеюсь, что вы можете мне помочь, потому что я действительно борюсь.
Наша установка состоит в том, что мы используем fluentd для пересылки журналов из Openshift во внешний агрегатор, а затем в ElasticSearch - мы используем решение для ведения журналов, предоставленное RedHat, но без внутреннего ElasticSearch / Kibana. Этот бит в основном работает нормально, за исключением того, что все журналы приложений выходят с тегом kubernetes.journal.container - это значение по умолчанию.
Я пытаюсь повторно пометить их, чтобы они соответствовали журналам, собранным из нашего существующего состояния, отличного от OpenShift, и для этого я добавил метку в файл deployconfig в образце приложения. Я вижу эту метку в журналах, которые выходят, но я не могу заставить работать тэгирование (используя плагин вывода rewrite_tag_filter) ни в конце Openshift, ни в агрегаторах.
По сути, мы используем конфигурационную карту по умолчанию (как поставляется с Openshift 3.7), но с пересылкой во внешнюю службу для маршрутизации маршрута, по которому трафик к нашим агрегаторам привязывается к концу:
<match **>
@type forward
heartbeat_type tcp
flush_interval "5s"
<server>
host external-es-host-service
port 24224
</server>
</match>
Я попытался добавить это совпадение (чуть выше этого раздела), чтобы переписать теги - он просто останавливает пересылку журналов:
<match kubernetes.journal.container>
@type rewrite_tag_filter
# Retag the logs from application containers based on the kubernetes labels
rewriterule1 ${result['kubernetes']['labels']['logdetails']} ^(.+)$ $1
</match>
Я также пробовал это с гораздо менее строгим регулярным выражением (^ (. *) $).
Редактировать: более подробно:
Кажется, что ограничение на изменение имени тега в конце Openshift было связано с плагинами ViaQ - среди прочего, они меняют поле времени на '@timestamp'; не определенное определенное средство форматирования вызывало ошибки.
Однако я сейчас пытаюсь выполнить повторную маркировку на стороне агрегатора (работает версия 3.1.1 td-agent), и у меня все еще возникают проблемы. Я запускаю эту команду матча:
# Match for Openshift application logs
<match kubernetes.journal.container>
@type rewrite_tag_filter
<rule>
key $['kubernetes']['labels']['logdetails']
pattern ^([^\.]+)\.([^\.]+)\.([^\.]+)\.([^\.]+)\.([^\.]+)$
tag $1.$2.$3.ocp-$4.$5.${tag}
</rule>
</match>
Это работает, но если я попытаюсь удалить ${tag}
из раздела тегов, произойдет сбой (и я не получаю журналы в Kibana). Если я добавлю директиву remove_tag_prefix
, мне все равно нужно будет включить этот тег, который исчезает, но оставляет завершающий символ '.'. Если я удаляю это, совпадение не удается (и я не получаю журналы в кибане). На стороне агрегатора нет никаких правил, соответствующих новому тегу (с ${tag}
) или без него.
Может кто-нибудь помочь?