0

我尝试从我的应用程序容器中获取日志,并将 fluentd 日志代理作为边车容器附加到我的项目中。我想在我的 Kibana 仪表板中获取哪个日志来自哪个应用程序。这就是为什么我在 fluentd 中这样配置的原因。

<source>
  @id fluentd-containers.log
  @type tail
  path /var/log/containers/mylog*.log
  pos_file /var/log/es-containers.log.pos
  time_format %Y-%m-%dT%H:%M:%S.%NZ
  tag kubernetes.myapp.container
  read_from_head true
  <parse>
    @type none
  </parse>
</source>

<filter kubernetes**>
  @type record_transformer
  enable_ruby true
  <record>
    service_name ${tag_parts[1]}
    instance_name ${record["kubernetes"]["container_name"]}
    log_type ${tag_parts[2]}
    host_name ${hostname}
    send_to "ES"
  </record>
</filter>

<match kubernetes.**>
  @type stdout
</match>

但是当我部署它时,${[record[""]["container_name"]}显示为 null unknown placeholder ${record["kubernetes"]["container_name"]}。请帮助我如何解决它,谢谢。

收到该错误消息

0 转储一个错误事件:error_class=RuntimeError error="无法展开record[\"kubernetes\"][\"container_name\"]:错误 = undefined method []' for nil:NilClass" location="/fluentd/vendor/bundle/ruby/2.6.0/gems/fluentd-1.11.2/lib/fluent/plugin/filter_record_transformer.rb:310:in rescue in expand'" tag="kubernetes.myapp.container" time=2020-09-23 11:29:05.705209241 +0000 记录= {"message"=>"{"log":"I0923 11:28:59.157177 1 main.go:71] 健康检查成功\n","stream":"stderr","time":"2020-09- 23T11:28:59.157256887Z"}"}

`

4

1 回答 1

1

record不包含您要访问的必填字段,即record["kubernetes"]["container_name"]

您需要确保它具有这些字段。

请通过Container Deploymentkubernetes_metadata_filter插件了解这方面的详细信息。

于 2020-09-24T03:16:29.200 回答