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 命名空间对日志事件进行分类和检索,使日志数据更灵活、可管理和有意义。