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.conf
和 systemd.conf
的文件。这些文件有 source
个部分,其中 tag
它们的数据。
fluent.conf 中的 match
部分匹配 **
,即所有日志并将它们发送到 s3。你想在这里拆分你的日志类型。
您的容器日志在 kubernetes.conf on this line.
中被标记为 kubernetes.*
所以你上面的配置变成了
<match kubernetes.* >
@type s3
# user log s3 bucket
...
对于系统日志 match
除 kubernetes 之外的所有其他标签。*
我有一个服务,部署到 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.conf
和 systemd.conf
的文件。这些文件有 source
个部分,其中 tag
它们的数据。
fluent.conf 中的 match
部分匹配 **
,即所有日志并将它们发送到 s3。你想在这里拆分你的日志类型。
您的容器日志在 kubernetes.conf on this line.
kubernetes.*
所以你上面的配置变成了
<match kubernetes.* >
@type s3
# user log s3 bucket
...
对于系统日志 match
除 kubernetes 之外的所有其他标签。*