Kubernetes监控与日志全栈实践指南

一、Metrics Server与K8s监控体系

核心概念解析

Metrics Server是Kubernetes内置的轻量级监控组件,通过聚合API提供集群基础资源指标:

图1

关键指标类型

  • CPU/Memory使用率(容器/节点级别)
  • 网络I/O和磁盘I/O(需额外配置)
  • Pod资源请求与限制对比

部署与配置示例

# 安装Metrics Server
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

# 验证安装
kubectl top nodes
kubectl top pods -A

实践建议

  1. 生产环境建议添加--kubelet-insecure-tls参数(自签名证书场景)
  2. 搭配HorizontalPodAutoscaler实现自动扩缩容
  3. 监控数据默认保留15分钟,需配合长期存储方案

二、Prometheus + Grafana深度集成

监控架构设计

图2

关键组件部署

  1. Prometheus Operator(推荐方式):

    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
    helm install prometheus prometheus-community/kube-prometheus-stack
  2. 核心监控对象
  3. kube-state-metrics:集群对象状态
  4. node-exporter:节点级指标
  5. kubelet/cAdvisor:容器指标

Grafana仪表板配置

# 导入官方仪表板
kubectl apply -f https://raw.githubusercontent.com/kubernetes-monitoring/kubernetes-mixin/master/dashboards/*.json

典型监控场景

  • 集群资源饱和度(CPU/Memory/Storage)
  • Pod异常重启监控
  • 自定义业务指标暴露(通过Prometheus Client库)

三、日志收集方案对比与实践

主流方案对比

方案组件特点适用场景
EFKFluentd + Elasticsearch + Kibana功能全面,资源消耗大企业级复杂日志分析
Fluentd+LokiFluentd + Loki + Grafana轻量级,Grafana原生集成云原生环境快速部署
FilebeatFilebeat + Elasticsearch极简架构资源受限环境

Fluentd+Loki实战

图3

配置示例

# Fluentd DaemonSet配置片段
<match kubernetes.**>
  @type loki
  url "http://loki:3100"
  remove_keys kubernetes
  <label>
    stream
    namespace
    pod_name
    container_name
  </label>
</match>

日志查询技巧

# 查询特定命名空间的错误日志
{namespace="production"} |= "error"

# 统计API延迟分布
rate({app="api-server"} | json | latency > 500 [1m])

四、分布式追踪系统集成

技术选型对比

工具数据模型存储后端语言支持
JaegerOpenTracingCassandra/ES多语言
OpenTelemetryOTLP可插拔全语言
ZipkinB3格式MySQL/ESJava为主

OpenTelemetry全链路方案

图4

部署示例

# 安装OpenTelemetry Operator
kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml

# 创建自动注入配置
apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
metadata:
  name: my-instrumentation
spec:
  propagators:
    - tracecontext
    - baggage
  sampler:
    type: parentbased_traceidratio
    argument: "0.25"

实践建议

  1. 合理设置采样率(生产环境建议10%-20%)
  2. 统一TraceID跨日志和指标
  3. 使用W3C TraceContext标准实现跨服务传播

五、监控体系优化建议

  1. 指标采集优化

    • 使用Recording Rules减少PromQL计算开销
    • 设置合理的scrape_interval(通常30s-1m)
  2. 日志管理原则

    • 遵循12-Factor App的日志规范
    • 结构化日志(JSON格式)
    • 敏感信息过滤
  3. 告警策略设计

    • 分层告警(Warning/Critical)
    • 避免告警风暴(使用抑制规则)
    • 关键告警示例:

      - alert: HighPodRestart
        expr: rate(kube_pod_container_status_restarts_total[5m]) > 0
        for: 10m
        labels:
          severity: warning
        annotations:
          summary: Pod {{ $labels.pod }}频繁重启
  4. 成本控制

    • 日志索引生命周期管理(ES: ILM, Loki: 保留策略)
    • 使用Thanos/VictoriaMetrics替代原生Prometheus长期存储

六、演进路线建议

  1. 初级阶段

    • Metrics Server + kubectl top
    • 基础告警(节点/Pod状态)
  2. 中级阶段

    • Prometheus + Grafana全栈监控
    • EFK基础日志收集
  3. 高级阶段

    • 全链路追踪(OpenTelemetry)
    • 日志与Trace联动分析
    • 机器学习异常检测

通过以上技术栈的组合,可以构建从基础设施到应用层的完整可观测性体系,满足云原生环境下的各种监控需求。建议根据实际业务规模和技术能力分阶段实施。

添加新评论