CentOS上Kubernetes日志管理全链路指南
Kubernetes日志管理的核心目标是实现日志的集中收集、安全存储、高效分析与持续监控,覆盖“收集→存储→查看/分析→轮转/清理→监控告警”五大环节,确保系统可追溯性与稳定性。
EFK由**Elasticsearch(存储/索引)、Fluentd(收集/转发)、Kibana(可视化)**组成,是Kubernetes生态中最成熟的日志解决方案。
/var/log/containers(容器日志目录)、/var/log/kubelet.log(kubelet日志)等路径,收集节点上所有容器的JSON格式日志,并转发至Elasticsearch。示例配置需设置FLUENT_ELASTICSEARCH_HOST(Elasticsearch服务地址)、FLUENT_ELASTICSEARCH_PORT(默认9200)等参数。elasticsearch.kube-system.svc.cluster.local:9200),通过Kibana的“Discover”功能查看实时日志,“Dashboard”构建错误日志趋势、Pod日志量排名等可视化面板。namespace=prod、pod_name=payment-service),查询效率高。/var/log/containers/*.log文件,通过标签(如namespace、pod)分类后发送至Loki。{namespace="prod"})查看日志。volumeMounts共享日志目录,filebeat.inputs配置监控该目录。/var/log/containers(容器日志)、/var/log/kubelet.log(kubelet日志),适合临时存储或调试,需定期清理避免磁盘爆满。{namespace="prod", pod_name="payment-service"})查看日志,支持表格、日志流等多种视图。kubectl logs:查看Pod实时日志(kubectl logs -f payment-service-abcde -n prod),或查看容器重启前日志(kubectl logs --previous),或多容器Pod中指定容器日志(kubectl logs -c <container-name>)。journalctl:查看系统日志(如kubelet日志:journalctl -u kubelet -f),支持按时间(-since "2025-11-01")、优先级(-p err)过滤。/etc/logrotate.d/kubernetes-containers文件设置容器日志轮转规则,避免日志文件过大占用磁盘空间。示例配置:/var/log/containers/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
sharedscripts
postrotate
/usr/bin/killall -HUP fluentd # 重启Fluentd重新读取日志文件
endscript
}
该配置表示:每天轮转1次,保留最近7天的压缩日志(.gz格式),轮转时不中断正在写入的日志。elasticsearch_indices_indexing_slowlog_total,索引慢日志数)、Loki(如loki_dropped_chunks_total,丢弃的日志块数)的日志相关指标。groups:
- name: k8s-log-alerts
rules:
- alert: HighErrorLogs
expr: rate(elasticsearch_indices_indexing_slowlog_total[5m]) > 100
for: 5m
labels:
severity: critical
annotations:
summary: "K8s集群错误日志过多 (instance {{ $labels.instance }})"
description: "5分钟内错误日志数超过100条,需立即排查"
payment-service、order-service)分类存储日志,便于后续检索与分析。stdout和stderr(而非文件),符合Kubernetes集群级日志处理规范,方便Fluentd等工具收集。