ZBLOG

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

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

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

<source>
  @type tail
  path /var/log/containers/*.log
  pos_file /var/log/fluentd-containers.log.pos
  tag kubernetes.*
  read_from_head true
  <parse>
    @type json
    time_format %Y-%m-%dT%H:%M:%S.%NZ
    keep_time_key true
    time_key timestamp
  </parse>
</source>

<match kubernetes.**>
   @type copy

   <store>
     @type file
     path /var/log/kubernetes.log.${tag_parts[1]}
     flush_interval 5s
   </store>

   <store>
     @type elasticsearch_dynamic_index
     host elasticsearch.domain.com # Elasticsearch的地址和端口号 
     port 9200 # Elasticsearch的端口号,默认为9200 
     scheme https # 如果Elasticsearch启用了https,则需要设置此项 
     user elastic # Elasticsearch用户名 
     password changeme # Elasticsearch密码 
     logstash_prefix ${tag_parts[1]}-kubernetes-
     logstash_dateformat %Y.%m.%d # 索引格式为logstash-{index}-YYYY.MM.DD 
     include_tag_key true # 是否包含标签键 
   </store>

</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文件:
apiVersion: v1
kind: ConfigMap
metadata:
  name: fluentd-config
data:
  fluent.conf: |
    <source>
      @type tail
      path /var/log/containers/*.log
      pos_file /var/log/fluentd-containers.log.pos
      tag kubernetes.*
      read_from_head true
      <parse>
        @type json
        time_format %Y-%m-%dT%H:%M:%S.%NZ
        keep_time_key true
        time_key timestamp
      </parse>
    </source>

    <match kubernetes.**>
       @type copy

       <store>
         @type file
         path /var/log/kubernetes.log.${tag_parts[1]}
         flush_interval 5s
       </store>

       <store>
         @type elasticsearch_dynamic_index
         host elasticsearch.domain.com # Elasticsearch的地址和端口号 
         port 9200 # Elasticsearch的端口号,默认为9200 
         scheme https # 如果Elasticsearch启用了https,则需要设置此项 
         user elastic # Elasticsearch用户名 
         password changeme # Elasticsearch密码 
         logstash_prefix ${tag_parts[1]}-kubernetes-
         logstash_dateformat %Y.%m.%d # 索引格式为logstash-{index}-YYYY.MM.DD 
         include_tag_key true # 是否包含标签键 
       </store>

    </match>

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

$ kubectl apply -f fluentd-configmap.yaml

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

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd
spec:
  selector:
    matchLabels:
      app: fluentd
  template:
    metadata:
      labels:
        app: fluentd
    spec:
      containers:
        - name: fluentd-container
          image: quay.io/fluent/fluentd-kubernetes-daemonset:v1.10.2-debian-elasticsearch7-20211025-01
          env:
            - name: FLUENT_ELASTICSEARCH_HOST
              value: "elasticsearch.domain.com" # 替换成你的Elasticsearch地址  
            - name: FLUENT_ELASTICSEARCH_PORT
              value: "9200"
            - name: FLUENT_ELASTICSEARCH_SCHEME
              value: "https" # 如果Elasticsearch启用了https,则需要设置此项 
            - name: FLUENT_ELASTICSEARCH_USER
              valueFrom:
                secretKeyRef:
                  name: fluentd-es-secret
                  key: username
            - name: FLUENT_ELASTICSEARCH_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: fluentd-es-secret
                  key: password
          volumeMounts:
            - name: varlog
              mountPath: /var/log
      volumes:
        - name: varlog
          hostPath:
            path: /var/log

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

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

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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?