ZBLOG

fluentd收集k8s集群日志写到到文件完整

  1. 安装fluentd:首先需要安装fluentd,可以参考官方文档进行安装。在k8s集群中,我们可以使用DaemonSet将fluentd部署到所有节点上。

  2. 配置fluentd:在安装完成后,需要配置fluentd来收集k8s集群的日志。下面是一个示例配置文件:

  1. <source>
  2. @type tail
  3. path /var/log/containers/*.log
  4. pos_file /var/log/fluentd-containers.log.pos
  5. tag kubernetes.*
  6. read_from_head true
  7. <parse>
  8. @type json
  9. time_format %Y-%m-%dT%H:%M:%S.%NZ
  10. keep_time_key true
  11. time_key timestamp
  12. </parse>
  13. </source>
  14. <match kubernetes.**>
  15. @type copy
  16. <store>
  17. @type file
  18. path /var/log/kubernetes.log.${tag_parts[1]}
  19. flush_interval 5s
  20. </store>
  21. <store>
  22. @type elasticsearch_dynamic_index
  23. host elasticsearch.domain.com # Elasticsearch的地址和端口号
  24. port 9200 # Elasticsearch的端口号,默认为9200
  25. scheme https # 如果Elasticsearch启用了https,则需要设置此项
  26. user elastic # Elasticsearch用户名
  27. password changeme # Elasticsearch密码
  28. logstash_prefix ${tag_parts[1]}-kubernetes-
  29. logstash_dateformat %Y.%m.%d # 索引格式为logstash-{index}-YYYY.MM.DD
  30. include_tag_key true # 是否包含标签键
  31. </store>
  32. </match>

以上配置文件中:

  • 使用tail插件从容器日志文件中读取日志;
  • 使用json插件解析日志数据,并设置时间格式;
  • 将标签为”kubernetes.*“的日志输出到两个地方:一个是本地文件,另一个是Elasticsearch。

在输出到本地文件时,使用了变量${tag_parts[1]}来组成文件名,这个变量表示匹配上的k8s对象名字(如pod、deployment等)。因此,不同的k8s对象的日志会被写入到不同的文件中。

同时,我们也可以使用elasticsearch_dynamic_index插件将k8s集群的日志直接输出到Elasticsearch中。在该插件中,需要指定Elasticsearch的地址和端口号、用户名和密码等信息,并且可以自定义索引名称和日期格式。最后一项include_tag_key用于指定是否包含标签键。

  1. 部署配置:将上述配置保存为一个fluentd-configmap.yaml文件:
  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4. name: fluentd-config
  5. data:
  6. fluent.conf: |
  7. <source>
  8. @type tail
  9. path /var/log/containers/*.log
  10. pos_file /var/log/fluentd-containers.log.pos
  11. tag kubernetes.*
  12. read_from_head true
  13. <parse>
  14. @type json
  15. time_format %Y-%m-%dT%H:%M:%S.%NZ
  16. keep_time_key true
  17. time_key timestamp
  18. </parse>
  19. </source>
  20. <match kubernetes.**>
  21. @type copy
  22. <store>
  23. @type file
  24. path /var/log/kubernetes.log.${tag_parts[1]}
  25. flush_interval 5s
  26. </store>
  27. <store>
  28. @type elasticsearch_dynamic_index
  29. host elasticsearch.domain.com # Elasticsearch的地址和端口号
  30. port 9200 # Elasticsearch的端口号,默认为9200
  31. scheme https # 如果Elasticsearch启用了https,则需要设置此项
  32. user elastic # Elasticsearch用户名
  33. password changeme # Elasticsearch密码
  34. logstash_prefix ${tag_parts[1]}-kubernetes-
  35. logstash_dateformat %Y.%m.%d # 索引格式为logstash-{index}-YYYY.MM.DD
  36. include_tag_key true # 是否包含标签键
  37. </store>
  38. </match>

然后使用kubectl apply命令部署该配置:

  1. $ kubectl apply -f fluentd-configmap.yaml

最后,我们还需要创建一个fluentd DaemonSet来将fluentd部署到所有节点上,并且挂载/var/log目录以便读取容器日志:

  1. apiVersion: apps/v1
  2. kind: DaemonSet
  3. metadata:
  4. name: fluentd
  5. spec:
  6. selector:
  7. matchLabels:
  8. app: fluentd
  9. template:
  10. metadata:
  11. labels:
  12. app: fluentd
  13. spec:
  14. containers:
  15. - name: fluentd-container
  16. image: quay.io/fluent/fluentd-kubernetes-daemonset:v1.10.2-debian-elasticsearch7-20211025-01
  17. env:
  18. - name: FLUENT_ELASTICSEARCH_HOST
  19. value: "elasticsearch.domain.com" # 替换成你的Elasticsearch地址
  20. - name: FLUENT_ELASTICSEARCH_PORT
  21. value: "9200"
  22. - name: FLUENT_ELASTICSEARCH_SCHEME
  23. value: "https" # 如果Elasticsearch启用了https,则需要设置此项
  24. - name: FLUENT_ELASTICSEARCH_USER
  25. valueFrom:
  26. secretKeyRef:
  27. name: fluentd-es-secret
  28. key: username
  29. - name: FLUENT_ELASTICSEARCH_PASSWORD
  30. valueFrom:
  31. secretKeyRef:
  32. name: fluentd-es-secret
  33. key: password
  34. volumeMounts:
  35. - name: varlog
  36. mountPath: /var/log
  37. volumes:
  38. - name: varlog
  39. hostPath:
  40. path: /var/log

其中,需要替换FLUENT_ELASTICSEARCH_HOST为你的Elasticsearch地址。

  1. 测试:当fluentd DaemonSet部署完成后,可以使用kubectl logs命令查看容器日志是否被收集到:
  1. $ kubectl logs <fluentd-pod-name>

如果一切正常,则应该看到k8s集群中所有容器的日志。同时,在Elasticsearch中也可以看到相应的索引和数据。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=3646

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?