如何基于 Kubernetes 元数据创建索引

Posted

技术标签:

【中文标题】如何基于 Kubernetes 元数据创建索引【英文标题】:How to create indices based on kubernetes metadata 【发布时间】:2020-03-23 01:59:07 【问题描述】:

我在 Kubernetes 中使用 filebeat 将日志发送到弹性搜索。 我想基于命名空间创建索引。我正在尝试为 Kubernetes 集群中的不同应用程序创建自定义索引,但这不起作用。 我在下面使用了conf:-

输出.elasticsearch:

  index: "%[kubernetes.labels.app]:filebeat-%[beat.version]-%+yyyy.MM.dd"

Filebeat Kube-manifest 链接-https://github.com/anup1384/k8s-filebeat

【问题讨论】:

【参考方案1】:

在 filebeat configmap 中使用下面给出的 elasticsearch 输出

output.elasticsearch:
  index: "%[kubernetes.namespace]:filebeat-%[beat.version]-%+yyyy.MM.dd"

【讨论】:

这不起作用。我已经用过了。当我使用它时,我的 filebeat ds 显示错误。 2019-11-27T12:52:49.108Z INFO instance/beat.go:614 Beat ID: c164e219-3977-4b3a-b149-e793b2786aac 2019-11-27T12:52:49.108Z INFO instance/beat.go:366 filebeat 停止. 2019-11-27T12:52:49.108Z 错误 instance/beat.go:877 退出:setup.template.name 和 setup.template.pattern 如果索引名称被修改,则必须设置退出:setup.template.name 和 setup。如果修改了索引名称,则必须设置 template.pattern 您有任何配置文件来设置 Kubernetes 上的日志记录吗?请在这里分享。 这里是参考discuss.elastic.co/t/… 验证 kubernetes.namespace 值是否被收集。在您的情况下,它可能是 data.kubernetes.namespace 不走运,我使用相同的配置创建自定义索引,但仍然存在 filebeat 索引。您能否分享您的 Kube 清单以使用 filebeat 设置日志记录。【参考方案2】:

使用 Kubernetes 元数据创建自定义索引。所以在这里我创建了一个基于 pod 名称元数据的索引。

logstash_prefix $record['kubernetes']['pod_name']

更多详情:

https://medium.com/faun/how-to-create-custom-indices-based-on-kubernetes-metadata-using-fluentd-beed062faa5d

【讨论】:

【参考方案3】:
<source>
      @type tail
      @id in_tail_docker_logs
      read_from_head true
      tag yourTag.*
      path /var/log/containers/**yournamespace**.log
      pos_file /var/log/file.log.pos
      <parse>
        @type multi_format
        <pattern>
          format json
          time_format '%Y-%m-%dT%H:%M:%S.%N%Z'
        </pattern>
        <pattern>
          format regexp
          expression /^(?<time>.+) (?<stream>stdout|stderr)( (?<logtag>.))? (?<log>.*)$/
          time_format '%Y-%m-%dT%H:%M:%S.%N%:z'
        </pattern>
      </parse>
    </source>


<match yourTag_**>
      @type elasticsearch
      host "#ENV['FLUENT_ELASTICSEARCH_HOST']"
      port "#ENV['FLUENT_ELASTICSEARCH_PORT']"
      scheme "#ENV['FLUENT_ELASTICSEARCH_SCHEME'] || 'https'"
      user "#ENV['FLUENT_ELASTICSEARCH_MDSA_USER']"
      password "#ENV['FLUENT_ELASTICSEARCH_MDSA_PASSWORD']"
      ssl_verify "#ENV['FLUENT_ELASTICSEARCH_SSL_VERIFY'] || 'false'"
      suppress_type_name true
      index_name ocp_$tag[0]_$$.kubernetes.labels.app_%Y%m%d ### ==> **ocp_yourTag_appName_date**

      <buffer tag, time, $.kubernetes.labels.app>
        @type memory
        timekey 10s
        timekey_wait 0s
        flush_mode immediate
        flush_thread_count 4
      </buffer>

这将 100% 有效,只需使用您的标签和命名空间进行更改

【讨论】:

以上是关于如何基于 Kubernetes 元数据创建索引的主要内容,如果未能解决你的问题,请参考以下文章

基于 Kubernetes 部署 MySQL 数据库

Kubernetes笔记

Oracle 9i:如何使用元数据确定索引是不是是集群的?

es怎么用元数据_id做新索引的字段

Kubernetes日志系统新贵Loki-Stack

nutch索引元数据没有索引