欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > 如何收集 Kubernetes 集群的日志

如何收集 Kubernetes 集群的日志

2025/3/12 13:51:07 来源:https://blog.csdn.net/bltyu2000/article/details/146088574  浏览:    关键词:如何收集 Kubernetes 集群的日志

一、Kubernetes 日志收集核心方案

1. EFK Stack(Elasticsearch + Fluentd + Kibana)

适用场景:企业级日志分析、复杂查询需求、长期日志存储。

组件作用

Fluentd:日志收集器(部署为 DaemonSet,每个 Node 运行一个实例)。

Elasticsearch:日志存储与索引(支持分布式、高并发)。

Kibana:可视化仪表盘(日志搜索、图表展示)。

2. Loki(轻量级替代方案)

适用场景:中小型集群、低成本运维、简化日志存储。

组件作用

Loki:类似 Elasticsearch 的日志聚合引擎,但专注于日志存储(压缩率高)。

Promtail:轻量级日志收集器(替代 Fluentd)。

Grafana:集成 Loki 作为日志存储后端,复用现有监控仪表盘。

3. 其他方案

Stackdriver:GCP 官方云服务。

Datadog:SaaS 日志分析平台。

Filebeat + Elasticsearch:适用于简单场景。


二、EFK Stack 配置步骤

1. 部署 EFK 组件
# 1. 安装 Fluentd(DaemonSet)
kubectl apply -f https://github.com/fluent/fluentd-kubernetes-daemonset/releases/latest/fluentd-daemonset.yaml
​
# 2. 安装 Elasticsearch
kubectl apply -f https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.0.yaml
​
# 3. 安装 Kibana
kubectl apply -f https://artifacts.elastic.co/downloads/kibana/kibana-7.10.0.yaml
2. 配置 Fluentd 收集日志

默认配置:Fluentd 会自动收集 Node 日志和容器日志。

自定义收集规则(例如收集特定 Pod 日志):

  # 创建 ConfigMapapiVersion: v1kind: ConfigMapmetadata:name: fluentd-confignamespace: kube-systemdata:fluentd.conf: |<source>@type tailpath /var/log/containers/*.logpos_file /var/log/fluentd-containers.logtag kubernetes.*read_from_head true</source>
​# 自定义收集规则:收集 my-app 的日志<source>@type tailpath /var/log/pods/my-app_default_*.logpos_file /var/log/fluentd-myapp.logtag my-app.logread_from_head true</source>
  # 应用配置kubectl apply -f fluentd-config.yaml
​# 重启 Fluentd DaemonSetkubectl delete daemonset fluentd-daemonset -n kube-systemkubectl apply -f https://github.com/fluent/fluentd-kubernetes-daemonset/releases/latest/fluentd-daemonset.yaml

三、EFK 核心配置详解

1. Fluentd 日志过滤与转发
# 示例:通过过滤器仅收集 Error 级别日志
<filter kubernetes.**>@type grepmatch => "^ERROR"
</filter>
​
<match my-app.log>@type elasticsearchhostnames elasticsearchport 9200logstash_format trueflush_interval 10s
</match>
2. Elasticsearch 索引管理
# 创建索引模板(优化日志存储)
PUT /_template/kubernetes-logs
{"index_patterns": ["kubernetes-logs-*"],"settings": {"number_of_shards": 1,"replicas": 1},"mappings": {"properties": {"@timestamp": { "type": "date" }}}
}

四、日志收集验证

1. 检查日志是否进入 Elasticsearch
# 查看 Elasticsearch 索引
curl -X GET "http://elasticsearch:9200/_cat/indices?v"
​
# 搜索特定日志
curl -X GET "http://elasticsearch:9200/kubernetes-logs-*/_search?q=message:%22ERROR%22"
2. 在 Kibana 中配置可视化
  1. 访问 Kibana Web UI(通过 Service 暴露)。

  2. 创建 Index Pattern:选择 kubernetes-logs-*

  3. 构建仪表盘:

        • 日志统计:按 Pod 名称、容器名称分组。 
        • 实时监控:展示错误日志趋势图。


五、EFK vs Loki 对比

维度EFK StackLoki
存储成本高(Elasticsearch 需要大量磁盘)低(压缩率高达 10:1)
查询性能强(支持复杂 SQL-like 查询)较弱(专为日志设计)
部署复杂度高(需管理 3 个组件)低(仅需 Loki 和 Promtail)
社区生态成熟(支持丰富插件)快速增长(云原生友好)

六、生产环境优化建议

1. 日志分级存储

短期日志(最近 7 天):存储在 Elasticsearch。

长期日志(超过 7 天):归档至 AWS S3 或 Azure Blob Storage。

2. 性能调优

Elasticsearch 分片:根据集群规模设置合理分片数。

Fluentd 缓冲区:增加 buffer_chunk_limitflush_interval 避免日志丢失。

3. 安全加固

RBAC 权限:限制 Kibana 只能访问特定 Namespace。

TLS 加密:启用 Elasticsearch 和 Kibana 的 HTTPS 通信。


七、替代方案:Loki 部署

1. 安装 Loki
kubectl apply -f https://github.com/grafana/loki/releases/latest/deploy.yaml
2. 安装 Promtail
kubectl apply -f https://github.com/grafana/loki/releases/latest/deploy-promtail.yaml
3. 验证日志收集
# 查看 Loki 日志存储
kubectl logs -n loki -l app=loki --container=query-frontend
​
# 在 Grafana 中添加 Loki 数据源
grafana-url: http://grafana:3000
data-source: loki

总结

推荐 EFK:适合需要复杂查询、企业级分析的场景。

推荐 Loki:适合中小型集群、注重成本和易用性的场景。

其他选择:云厂商日志服务(如 AWS CloudWatch、Azure Monitor)适合混合云环境。

无论选择哪种方案,建议结合 Prometheus + Alertmanager 实现日志异常的实时告警。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词