一、前言¶
本文主要以下几方面介绍k8s日志收集:
- 日志收集内容
- 日志收集工具
- 日志收集架构分析
二、日志收集内容¶
在日常使用控制过程中,一般需要收集的日志为以下几类:
- 服务器系统日志
- /var/log/messages
- /var/log/kube-xxx.log
- Kubernetes组件日志
- kube-apiserver日志
- kube-controller-manager日志
- kube-scheduler日志
- kubelet日志
- kube-proxy日志
- 应用程序日志
- 云原生:控制台日志
- 非云原生:容器内日志文件
- 网关日志(如ingress-nginx)
- 服务之间调用链日志
三、日志收集工具¶
日志收集技术栈一般分为ELK,EFK,Filebeat,Loki。下面简单介绍这四种日志收集工具:
ELK是由Elasticsearch、Logstash、Kibana三者组成:
- Elasticsearch: Elasticsearch 是一个开源的分布式搜索和分析引擎。它可以用于存储和检索大量的结构化和非结构化数据,包括日志数据。Elasticsearch 提供了高性能、可伸缩性和全文搜索功能。
- Logstash: Logstash 是一个开源的数据收集、处理和传输工具。它可以从多种来源(如日志文件、消息队列等)收集数据,并对数据进行过滤、解析和转换,最终将数据发送到目标存储(如 Elasticsearch)。
- Kibana: Kibana 是一个开源的数据可视化工具,用于分析和展示通过 Elasticsearch 存储的数据。Kibana 提供了强大的查询、图表、图形和仪表板功能,使用户可以实时监视和分析日志数据。
EFK是由Elasticsearch、Fluentd、Kibana三者组成:
- Elasticsearch: Elasticsearch 是一个开源的分布式搜索和分析引擎。它可以用于存储和检索大量的结构化和非结构化数据,包括日志数据。Elasticsearch 提供了高性能、可伸缩性和全文搜索功能。
- Fluentd: Fluentd 是一个开源的日志收集器,用于统一收集、处理和传输日志数据。它可以从各种来源收集数据,并将其发送到目标存储(如 Elasticsearch)。Fluentd 支持灵活的插件系统,使用户可以根据自己的需求进行定制。
- Kibana: 是一个开源的数据可视化工具,用于分析和展示通过 Elasticsearch 存储的数据。Kibana 提供了强大的查询、图表、图形和仪表板功能,使用户可以实时监视和分析日志数据。
Filebeat 是一个轻量级的日志传输工具,由 Elastic 公司开发。它专门用于收集和发送日志数据到中央存储或分析系统,如 Elasticsearch 或 Logstash。Filebeat 可以监视指定的文件和位置,读取日志事件,并将其传输到指定的目的地。它支持多种日志格式和协议,并具有低资源消耗的特点。
Loki 是一个开源的日志聚合系统,由 Grafana 实验室开发。它专注于存储、索引和查询日志数据。Loki 使用了流式处理和标签索引的方法,以实现高效的日志查询和分析。它与 Prometheus 集成紧密,并支持使用 Prometheus 的标签查询语言(PromQL)来查询和过滤日志数据。Loki 还提供了一组工具和库,用于日志收集和客户端端点的管理。
- Loki:主服务器,负责日志的存储和查询,参考了Prometheus的服务发现机制,将标签添加到日志流,而不是像其他平台一样进行全文索引。
- Promtail:负责收集日志并将其发送给Loki,主要用于发现采集目标以及添加对应Label,最终发送给Loki。
- Grafana:用来展示或查询相关日志,可以在页面查询指定标签Pod的日志。