写点什么

Kubernetes 集群日志搜集

作者:Rayzh
  • 2022 年 1 月 03 日
  • 本文字数:1555 字

    阅读完需:约 5 分钟

Kubernetes集群日志搜集

​ Kubernetes 日志搜集方案使用的是 ELK 方案,采集流程也很简单。方案介绍可以参考:基于ELK的日志平台介绍 - InfoQ 写作平台

一、Filebeat

​ 为每一个 Node 节点部署一个 Filebeat,由于 Node 节点弹出、删除是随机的,所以需要以守护进程集 DaemonSet 的形式运行。这样可以保证每新增、删除 Node 的时候,Filebeat 的客户端会随着变化。


DaemonSet yml 参考


kind: DaemonSetapiVersion: apps/v1metadata:  name: filebeat  namespace: elk  labels:    k8s-app: filebeatspec:  selector:    matchLabels:      k8s-app: filebeat    spec:      volumes:        - name: config          configMap:            name: filebeat-config            defaultMode: 384      containers:        - name: filebeat          image: 'docker.elastic.co/beats/filebeat:7.8.1'          args:            - '-c'            - /etc/filebeat.yml            - '-e'          env:            - name: NODE_NAME              valueFrom:                fieldRef:                  apiVersion: v1                  fieldPath: spec.nodeName          volumeMounts:            - name: config              readOnly: true              mountPath: /etc/filebeat.yml              subPath: filebeat.yml            - name: data              mountPath: /usr/share/filebeat/data            - name: varlibdockercontainers              readOnly: true              mountPath: /var/lib/docker/containers            - name: varlog              readOnly: true              mountPath: /var/log
复制代码


filebeat-config


filebeat.inputs:- type: container  paths:    - /var/log/containers/*.log  processors:    - add_kubernetes_metadata:        host: ${NODE_NAME}        matchers:        - logs_path:            logs_path: "/var/log/containers/"
output.kafka: hosts: ["kafka1:9092", "kafka2:9092", "kafka3:9092"] topic: k8slogs required_acks: 1 compression: gzip max_message_bytes: 1000000
复制代码

二、Logstash

​ Filebeat 采集的日志进入 Kafka 指定的 Topic 后,使用 Logstash 进行消费。具体日志的清洗规则在 logstash.conf 定义。


logstash.yaml


kind: DeploymentapiVersion: apps/v1metadata:  name: logstashnhk8s  namespace: elk  labels:    app: logstashnhk8s  annotations:    deployment.kubernetes.io/revision: '1'spec:  replicas: 2  selector:    matchLabels:      app: logstashnhk8s    spec:      volumes:        - name: logstashnhk8s          configMap:            name: logstashnhk8s            defaultMode: 420      containers:        - name: logstash          image: 'hubstore.com.cn/elastic/logstash:7.8.1'          resources: {}          volumeMounts:            - name: logstashnhk8s              mountPath: /usr/share/logstash/pipeline/logstash.conf              subPath: logstash.conf
复制代码

三、Kibana

​ Logstash 清洗的日志写入 ES 之后,通过 Kibana 展示,这个和之前介绍的 ELK 平台用法完全一样。

四、结论语

​ 云原生下的日志搜集方法还有 Loki 的方案,但是我这里为了和老的日志平台保持一致,就继续采用了 ELK。当然 ELK 的 helm chart 也是有的,如果觉得手动一个个组件部署比较麻烦,可以直接使用 helm。


​ ELK 日志搜集是从几年前使用到现在比较完善的日志方案,运行了这么长时间,也发现整个方案对 ElasticSearch 的要求特别高。实际上并发写的频率远大于读,所以也在看是否有新方案可以进行优化、替代。

发布于: 4 小时前
用户头像

Rayzh

关注

还未添加个人签名 2018.11.13 加入

仅仅是个做运维的...

评论

发布
暂无评论
Kubernetes集群日志搜集