kubernetes日志收集方案
来源:原创
时间:2021-07-07
作者:脚本小站
分类:云原生
官方文档:
https://kubernetes.io/zh/docs/concepts/cluster-administration/logging/
收集日志方案:
一、节点级别日志代理收集
二、sidecar方式收集日志
1、sidecar程序将日志传送到自己的标准输出
2、sidecar中的日志代理程序来收集日志
示例:https://scriptjc.com/article/1204
三、从主应用程序中直接输出日志,通过端口暴露或主动推送日志。
示例:
例一:emptyDir挂载的日志目录:如果空间占满会导致Pod重启。
apiVersion: v1 kind: Pod metadata: name: counter spec: containers: - name: count image: busybox args: - /bin/sh - -c - > i=0; while true; do echo "$i: $(date)" >> /var/log/1.log; echo "$(date) INFO $i" >> /var/log/2.log; i=$((i+1)); sleep 1; done volumeMounts: - name: varlog mountPath: /var/log - name: count-log-1 image: busybox args: [/bin/sh, -c, 'tail -n+1 -f /var/log/1.log'] volumeMounts: - name: varlog mountPath: /var/log - name: count-log-2 image: busybox args: [/bin/sh, -c, 'tail -n+1 -f /var/log/2.log'] volumeMounts: - name: varlog mountPath: /var/log volumes: - name: varlog emptyDir: sizeLimit: 20M # 如果日志占满整个磁盘的话会导致pod奔溃而重启。
例二:使用hostPath方式挂载来收集日志,如果多个Pod跑在同一个节点会造成日志的重复收集。
注意:使用 tail -n+1 -f xxx.log 会读取日志的全部内容并继续读出,如果不想读取之前的日志内容使用 tail -n 0 -f xxx.log 从当前位置来读取日志内容。
apiVersion: v1 kind: Pod metadata: name: counter spec: containers: - name: count image: busybox args: - /bin/sh - -c - > i=0; while true; do echo "$i: $(date)" >> /var/log/1.log; echo "$(date) INFO $i" >> /var/log/2.log; i=$((i+1)); sleep 1; done volumeMounts: - name: varlog mountPath: /var/log - name: count-log-1 image: busybox args: [/bin/sh, -c, 'tail -n 0 -f /var/log/1.log'] # 从当前位置开始读取到标准输出 volumeMounts: - name: varlog mountPath: /var/log - name: count-log-2 image: busybox args: [/bin/sh, -c, 'tail -n+1 -f /var/log/2.log'] # 读取之前的全部内容到标准输出 volumeMounts: - name: varlog mountPath: /var/log volumes: - name: varlog hostPath: path: /var/log