fluentd根据K8S名称空间自动生成索引

fluentd示例配置:

apiVersion: v1
data:
  containers.input.conf: |-
    <source>
      @type tail
      path /var/log/containers/*.log
      pos_file /var/log/fluentd-containers.log.pos
      tag kubernetes.*
      <parse>
        @type json
        time_format %Y-%m-%dT%H:%M:%S.%NZ
      </parse>
    </source>

    <filter kubernetes.**>
      @type kubernetes_metadata     #是一个 Fluentd 插件,用于从 Kubernetes API 服务器中获取有关容器和 Pod 的详细信息,并将其添加到日志事件的元数据中。例如,它可以添加容器名称、容器 ID、Pod 名称、命名空间等信息
    </filter>

    <match kubernetes.**>
      @type elasticsearch_dynamic    #根据日志事件的内容创建动态的 Elasticsearch 索引,并将日志事件发送到相应的索引中
      host elasticsearch-client
      port 9200
      scheme http
      user elastic
      password ws123456
      logstash_format true
      logstash_prefix  ${record['kubernetes']['namespace_name']}-index  #自定义动态索引名称,根据K8S的名称空间自动生成
      <buffer>
        @type file
        path /var/log/fluentd-buffer/kubernetes.system.buffer
        flush_mode interval
        flush_interval 5s
      </buffer>
    </match>

 

record 是 Fluentd 中表示日志事件的内置变量。

${record['kubernetes']['namespace_name']} 表示从 Kubernetes 获取的命名空间名,这是日志事件中的一个重要元数据之一。

${record['kubernetes']['namespace_name']}-index 将命名空间名作为前缀拼接到 Elasticsearch 索引名称的末尾,从而将日志事件发送到以命名空间分类的特定索引中。

例如,如果命名空间为 my-namespace,则日志事件可以发送到 my-namespace-index 索引中。

logstash_prefix 可以是 Fluentd 配置中的任意字段名称,它定义了要发送给 Elasticsearch 的日志事件的标签名。

标签名通常用于在 Elasticsearch 中进行日志检索和聚合,并且应该根据所处理的日志事件类型进行定义。

通过使用 ${record['kubernetes']['namespace_name']}-index 作为动态标签名,可以轻松地根据 Kubernetes 命名空间对日志事件进行分类和检索,使日志数据更灵活、可管理和有意义。

posted @ 2023-12-26 17:35  ZANAN  阅读(104)  评论(0编辑  收藏  举报