流利的grep +输出日志

时间:2018-11-20 15:16:49

标签: amazon-s3 kubernetes devops fluent

我有一个服务,已部署到kubernetes集群中,并且将fluentd设置为守护程序集。而且我需要使收到的日志多样化,以便它们最终位于不同的s3存储桶中。 一个存储桶将用于由kubernetes和我们的调试/错误处理代码生成的所有日志,而另一个存储桶将是由服务生成,由结构化记录器解析并由json中的特定字段标识的日志的子集。想到其中一个存储桶是针对计算机状态和错误的,而另一个存储桶是针对“用户在ts处创建的user_id资源image_id”的描述

该服务本身对流利语言一无所知,因此我无法根据我希望它们结尾的s3存储桶手动设置日志标签。 现在,我使用fluentd.conf设置了s3这样的东西:

loadPano

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

<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>

哪个会将日志发送到单独的s3存储桶中,该存储桶是为所有日志定义的存储桶

1 个答案:

答案 0 :(得分:2)

我假设用户操作日志由您的服务生成,并且系统日志包括来自节点的docker,kubernetes和systemd日志。 我在official fluent github repo找到了您的示例yaml文件。 如果您在该链接中检出该文件夹,则会看到另外两个名为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以外的所有其他标签。*