温馨提示×

Debian K8s部署后如何进行日志分析

小樊
45
2025-12-05 05:41:00
栏目: 智能运维

Debian 上 Kubernetes 日志分析实操指南

一 日志来源与采集路径

  • 容器标准输出/错误输出:Kubernetes 将容器的 stdout/stderr 写入节点的 /var/log/containers/,通常由节点级采集器统一收集。
  • 节点系统日志:如 kubelet、kube-proxy 等组件运行在 systemd 下,日志位于 journald,可用 journalctl 查看。
  • 应用文件日志:业务将日志写到容器内的文件(如 /var/log/app.log),可通过 Sidecar节点采集器挂载 /var/log 目录采集。
  • 采集器部署形态:节点级采集器以 DaemonSet 运行在每个节点;文件型日志常用 Sidecar 模式与业务同 Pod 共享卷。
  • 常用方案:企业级用 EFK(Elasticsearch + Fluentd/Fluent Bit + Kibana);轻量低成本用 Loki + Promtail + Grafana

二 快速上手 EFK 或 Loki 的部署与验证

  • EFK(Elasticsearch + Fluentd + Kibana)
    • 部署 Fluentd DaemonSet(示例):
      kubectl apply -f https://github.com/fluent/fluentd-kubernetes-daemonset/releases/latest/fluentd-daemonset.yaml
    • 部署 Elasticsearch(示例):
      kubectl apply -f https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.0.yaml
    • 部署 Kibana(示例):
      kubectl apply -f https://artifacts.elastic.co/downloads/kibana/kibana-7.10.0.yaml
    • 验证:
      • 查看索引:curl -X GET “http://elasticsearch:9200/_cat/indices?v”
      • 搜索 ERROR:curl -X GET “http://elasticsearch:9200/kubernetes-logs-*/_search?q=message:%22ERROR%22”
      • Kibana 创建 Index Pattern(如 kubernetes-logs-*)后开始检索与可视化。
  • 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
    • 验证:
      • 查看 Loki 组件日志:kubectl logs -n loki -l app=loki --container=query-frontend
      • Grafana 添加 Loki 数据源(地址如 http://grafana:3000),使用 LogQL 查询。
  • 组件作用速览:
    • Fluentd/Fluent Bit:节点级日志收集与转发;
    • Elasticsearch:日志存储与检索;
    • Kibana:日志可视化与仪表盘;
    • Loki:轻量日志聚合(仅索引元数据);
    • Promtail:为 Loki 采集节点与容器日志。

三 在 Kibana 或 Grafana 中进行分析

  • Kibana
    • 创建 Index Pattern(如 kubernetes-logs-*),设置时间字段 @timestamp
    • Discover 中按 namespace、pod、container、level 等字段过滤与检索;
    • Dashboard 构建图表:错误率趋势、Top N Pod 错误、响应时延分布等。
  • Grafana + Loki
    • 添加 Loki 数据源后,使用 LogQL 检索与聚合:
      • 按命名空间与 Pod 查询:{namespace=“default”, pod=“myapp-.*”}
      • 统计错误率:sum by (pod)(rate({namespace=“default”} |= “ERROR” [5m])) / sum by (pod)(rate({namespace=“default”} [5m]))
      • 按时间范围、标签与行内容过滤,快速定位异常。

四 节点与系统组件日志排查

  • 查看 kubelet 日志(Debian 使用 systemd):
    sudo journalctl -u kubelet -f
  • 查看 kube-proxy 日志:
    sudo journalctl -u kube-proxy -f
  • 检查服务状态:
    sudo systemctl status kubelet
    sudo systemctl status kube-proxy
  • 节点上直接查看容器日志文件:
    tail -f /var/log/containers/*.log
    这些方式适合排查节点级问题(如调度、镜像拉取、网络插件异常)以及采集链路是否正常。

五 生产环境优化与安全建议

  • 日志分级存储:近 7 天 热数据放 Elasticsearch,超过 7 天 归档至 S3/Blob 降低成本。
  • 性能与缓冲:为 Fluentd/Fluent Bit 配置合适的 buffer_chunk_limit、flush_interval,避免洪峰丢日志。
  • 资源与副本:为采集器设置 requests/limits,Elasticsearch 合理规划 分片/副本 数。
  • 安全加固:启用 RBAC 最小权限;为 Elasticsearch/Kibana 与采集链路开启 TLS 加密与认证。
  • 高可用:Elasticsearch 建议多副本与多节点部署;Loki 可按需扩展 读写路径 与存储。
  • 告警联动:结合 Prometheus + Alertmanager 对错误率、延迟等关键指标做实时告警。

0