Fluentd вытягивает логи из OpenShift, нужно пометить - PullRequest
0 голосов
/ 26 июня 2018

Я надеюсь, что вы можете мне помочь, потому что я действительно борюсь.

Наша установка состоит в том, что мы используем 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}) или без него.

Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 28 июня 2018

В OpenShift 3.6, который я запускал, версия fluentd была 0.12.39. Согласно этим требованиям , версия fluent-plugin-rewrite-tag-filter должна была быть <2.0.0. Оказалось, что так называемые «вложенные атрибуты», такие как <code>['kubernetes']['labels']['logdetails'] и описанные здесь , не поддерживаются в fluent-plugin-rewrite-tag-filter v1.6.0.

К счастью для меня, то, что я хотел заменить тегом, было доступно как поле верхнего уровня (viaq_index_name). Вот как выглядело мое правило:

<match output_**>
  @type rewrite_tag_filter
  <rule>
    key viaq_index_name
    pattern ^(.+)$
    tag $1
  </rule>
</match>

По какой-либо причине в OCP 3.6 имена проектов, которые в OCP 3.4 использовались в качестве тегов, были заменены на output_tag и output_ops_tag. Приведенное выше правило сделало имена проектов частью тегов в OCP 3.6, что позволило мне фильтровать данные журнала по проекту.

Возможно, стоит проверить версии fluentd и fluent-plugin-rewrite-tag-filter и посмотреть, сможете ли вы обновить fluent-plugin-rewrite-tag-filter до версии, которая поддерживает вложенные атрибуты.

...