在Ubuntu环境下管理Kubernetes日志,可采用以下主流方案,核心工具基于EFK/Loki栈,兼顾功能与资源效率:
一、EFK Stack(企业级方案)
适用场景:复杂查询、长期存储、企业级合规需求
组件作用:
- Fluentd:作为DaemonSet在每个节点收集容器/节点日志,支持过滤和转发。
- Elasticsearch:存储索引日志,支持全文检索和分析。
- Kibana:可视化日志,提供搜索、图表和告警功能。
部署步骤:
- 安装Fluentd:通过DaemonSet部署,自动采集节点日志。
kubectl apply -f https://github.com/fluent/fluentd-kubernetes-daemonset/releases/latest/fluentd-daemonset.yaml
- 部署Elasticsearch和Kibana:使用官方YAML文件创建集群。
- 配置日志存储策略:设置索引生命周期管理(ILM),自动归档旧日志到对象存储(如S3)。
二、Loki Stack(轻量级方案)
适用场景:中小集群、云原生环境、快速部署
组件作用:
- Loki:轻量级日志聚合引擎,仅索引元数据,节省存储。
- Promtail:轻量级收集器,替代Fluentd,与Prometheus生态集成。
- Grafana:直接查询Loki日志,复用监控大盘。
部署步骤:
- 安装Loki和Promtail:
kubectl apply -f https://github.com/grafana/loki/releases/latest/deploy.yaml
kubectl apply -f https://github.com/grafana/loki/releases/latest/deploy-promtail.yaml
- 在Grafana中添加Loki数据源,直接查询日志。
三、Filebeat(轻量级替代)
适用场景:资源受限环境、简单日志采集
组件作用:
- Filebeat:轻量级日志采集器,支持文件、容器日志采集。
- 搭配Logstash/Elasticsearch:处理复杂解析或存储需求。
部署步骤:
- 部署Filebeat作为DaemonSet,采集指定路径日志(如
/var/log/containers/*.log
)。
- 配置输出到Elasticsearch或Logstash。
四、通用优化实践
- 日志轮转:使用
logrotate
工具限制日志文件大小,避免磁盘占满。
- 权限控制:通过Kubernetes RBAC限制日志访问权限,敏感日志加密存储。
- 监控告警:集成Prometheus+Alertmanager,对异常日志触发告警。
五、工具对比
方案 |
资源占用 |
功能复杂度 |
适用规模 |
核心优势 |
EFK |
中高 |
高 |
中大型集群 |
强大查询、合规审计 |
Loki |
低 |
低 |
中小型集群 |
轻量、云原生友好 |
Filebeat |
极低 |
中 |
边缘/简单场景 |
灵活适配、低延迟 |
参考来源: