Fluentd Соответствующие теги - PullRequest
0 голосов
/ 19 мая 2018

Я пытаюсь выяснить, как можно переименовать поле (или создать новое поле с тем же значением) с помощью Fluentd

Как:

agent: Chrome ....

Кому:

agent: Chrome
user-agent: Chrome

но для журналов определенного типа, например **nginx**.

Я пытаюсь использовать record_reformer, но это не относится ко второму фильтру:

<filter kubernetes.**.nginx-ingress-controller-**.log>
  @type parser
  format /^(?<host>[^ ]*) (?<domain>[^ ]*) \[(?<x_forwarded_for>[^\]]*)\] (?<server_port>[^ ]*) (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+[^\"])(?: +(?<path>[^\"]*?)(?: +\S*)?)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")? (?<request_length>[^ ]*) (?<request_time>[^ ]*) (?:\[(?<proxy_upstream_name>[^\]]*)\] )?(?<addr>[^ ]*) (?<response_length>[^ ]*) (?<response_time>[^ ]*) (?<status>[^ ]*)$/
  time_format %d/%b/%Y:%H:%M:%S %z
  key_name log
  types server_port:integer,code:integer,size:integer,request_length:integer,request_time:float,upstream_response_length:integer,upstream_response_time:float,upstream_status:integer
  reserve_data true
</filter>

<filter kubernetes.**>
    @type kubernetes_metadata
</filter>

<filter kubernetes.**>
 @type grep
 <regexp>
     key $.kubernetes.labels.fluentd
     pattern true
 </regexp>
</filter>

<filter kubernetes.**.deployment-name**>
  @type record_transformer
  <record>
    level ${record["Level"]}
  </record>
</filter>

<match kubernetes.**>
  @type elasticsearch
  include_tag_key true
  host "#{ENV['OUTPUT_HOST']}"
  port "#{ENV['OUTPUT_PORT']}"
  scheme "#{ENV['OUTPUT_SCHEME']}"
  reload_connections true
  logstash_format true
</match>

<match kubernetes.**>
  @type record_reformer
  remove_keys log,kubernetes
  tag mytag.generic
  <record>
    name ${record['kubernetes']['labels']['app']}
    namespace ${record['kubernetes']['namespace_name']}
  </record>
</match>

<match kubernetes.**api**>
  @type record_reformer
  remove_keys log,kubernetes
  tag mytag.api
  <record>
    user_agent ${record['req']['headers']['user-agent']}
  </record>
</match>

В таком случае он не отправляет журналы для mytag.generic

1 Ответ

0 голосов
/ 21 мая 2018

У меня очень похожий вариант использования, и, как сказал @embik, использование record_transformer кажется более подходящим выбором.В моем случае я пытаюсь найти ключ в json-записи, через которую проходит fluentd, вот конф -

<filter kubernetes.**.deployment-name**>
  @type record_transformer
  <record>
    level ${record["Level"]}
  </record>
</filter>

Надеюсь, что поможет.

...