【问题标题】:Fluentd Matching tagsFluentd 匹配标签
【发布时间】:2018-10-29 21:59:30
【问题描述】:

我试图弄清楚如何使用 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 的日志

【问题讨论】:

  • 您使用record_reformer而不是record_transformer的任何原因?

标签: logging kubernetes fluentd


【解决方案1】:

我有一个非常相似的用例,就像@embik 所说,使用 record_transformer 似乎是一个更合适的选择。在我的情况下,我试图在 fluentd 正在经历的 json 记录中小写一个键,这是 conf -

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

希望对您有所帮助。

【讨论】:

  • 其实我试过bt基本不行。我得到:unknown placeholder ${record["Level"]} found 并且该字段在那里。我用更多信息更新了我的问题。
  • 请添加您的source 配置。也许那里需要修复一些东西。
  • 另一个有用的提示 - 尝试使用 @type stdout 运行 fluentd 一次,该 @type stdout 与您的源代码之后的所有记录匹配,然后将其中一条记录添加到问题中。这将极大地帮助解决问题。
猜你喜欢
  • 2021-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
  • 1970-01-01
  • 2021-09-03
  • 1970-01-01
  • 2021-12-20
相关资源
最近更新 更多