Fluentd grep + 输出日志

Fluentd grep + output logs

我有一个服务,部署到 kubernetes 集群中,并将 fluentd 设置为守护进程集。我需要使其接收的日志多样化,以便它们最终进入不同的 s3 存储桶。 一个桶将用于所有日志,由 kubernetes 和我们的 debug/error 处理代码生成,另一个桶将是日志的一个子集,由服务生成,由结构化记录器解析并由 [=23] 中的特定字段标识=].想一想,一个桶用于机器状态和错误,另一个用于 "user_id created resource image_id at ts" 用户操作描述

服务本身不了解 fluentd,因此我无法根据我希望日志结束的 s3 存储桶手动设置日志标签。 现在,我使用的 fluentd.conf 设置了这样的 s3 内容:

<match **>
  # docs: https://docs.fluentd.org/v0.12/articles/out_s3
  # note: this configuration relies on the nodes have an IAM instance profile with access to your S3 bucket
  type copy
  <store>
    type s3
    log_level info
    s3_bucket "#{ENV['S3_BUCKET_NAME']}"
    s3_region "#{ENV['S3_BUCKET_REGION']}"
    aws_key_id "#{ENV['AWS_ACCESS_KEY_ID']}"
    aws_sec_key "#{ENV['AWS_SECRET_ACCESS_KEY']}"
    s3_object_key_format %{path}%{time_slice}/cluster-log-%{index}.%{file_extension}
    format json
    time_slice_format %Y/%m/%d
    time_slice_wait 1m
    flush_interval 10m
    utc
    include_time_key true
    include_tag_key true
    buffer_chunk_limit 128m
    buffer_path /var/log/fluentd-buffers/s3.buffer
  </store>
  <store>
  ...
  </store>
</match>

所以,我想做的是拥有类似 grep 插件的东西

<store>
  type grep
  <regexp>
    key type
    pattern client-action
  </regexp>
</store>

这会将日志发送到一个单独的 s3 存储桶到为所有日志定义的存储桶

我假设用户操作日志是由您的服务生成的,系统日志包括来自节点的 docker、kubernetes 和 systemd 日志。 我在 official fluent github repo 找到了您的示例 yaml 文件。 如果您查看 link 中的文件夹,您会看到另外两个名为 kubernetes.confsystemd.conf 的文件。这些文件有 source 个部分,其中 tag 它们的数据。

fluent.conf 中的 match 部分匹配 **,即所有日志并将它们发送到 s3。你想在这里拆分你的日志类型。 您的容器日志在 kubernetes.conf on this line.

中被标记为 kubernetes.*

所以你上面的配置变成了

<match kubernetes.* >
@type s3
# user log s3 bucket
...

对于系统日志 match 除 kubernetes 之外的所有其他标签。*