跳到主要内容

容器日志与事件

本文主要是 Prometheus 监控内容, 这里只简单介绍下 K8S 中的日志、事件处理方案,以及和 Prometheus 的搭配。

日志处理:

日志采集与推送:一般是Fluentd/Fluent-Bit/Filebeat等采集推送到 ES、对象存储、kafaka,日志 就该交给专业的 EFK 来做,分为容器标准输出、容器内日志。 日志解析转 metric:可以提取一些日志转为 Prometheus 格式的指标,如解析特定字符串出现次 数,解析 Nginx 日志得到 QPS 、请求延迟等。常用方案是 mtail 或者 grok

日志采集方案: sidecar 方式:和业务容器共享日志目录,由 sidecar 完成日志推送,一般用于多租户场景。

daemonset 方式:机器上运行采集进程,统一推送出去。

需要注意的点:对于容器标准输出,默认日志路径是 /var/lib/docker/containers/xxx , kubelet 会将改日志软链到/var/log/pods,同时还有一份/var/log/containers 是对/var/log/pods的软 链。不过不同的 K8S 版本,日志的目录格式有所变化,采集时根据版本做区分:

1.15 及以下:/var/log/pods/{pod_uid}/
1.15 以上:var/log/pods/{pod_name+namespace+rs+uuid}/

事件:在这里特指 K8S Events,Events 在排查集群问题时也很关键,不过默认情况下只保留 1h,因此 需要对 Events 做持久化。一般 Events 处理方式有两种:

使用 kube-eventer 之类的组件采集 Events 并推送到 ES 使用 event_exporter 之类的组件将Events 转化为 Prometheus Metric,同类型的还有谷歌云的 stackdriver 下的 event-exporter