Grafana

Grafana 是业界主流的开源可观测性可视化平台,支持连接数十种数据源(Prometheus、Elasticsearch、Loki、ClickHouse 等),通过 Dashboard + Panel 提供实时图表、告警和探索能力。


核心概念

概念说明
Data Source数据源连接配置(Prometheus、Loki、MySQL 等)
Dashboard面板集合,一个页面展示多个关联指标
Panel单个图表/表格/状态块,绑定一个查询
Variable面板顶部的下拉变量,用于动态筛选(实例、环境、服务)
Alert Rule基于查询结果的告警规则,触发时通知 Contact Point
FolderDashboard 分组管理

快速启动(Docker)

services:
  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    environment:
      GF_SECURITY_ADMIN_PASSWORD: admin123
    volumes:
      - grafana_data:/var/lib/grafana
      - ./grafana/provisioning:/etc/grafana/provisioning
 
volumes:
  grafana_data:

数据源配置(Provisioning)

通过配置文件自动注入数据源,无需手动在 UI 添加:

# grafana/provisioning/datasources/prometheus.yml
apiVersion: 1
datasources:
  - name: Prometheus
    type: prometheus
    url: http://prometheus:9090
    isDefault: true
    jsonData:
      timeInterval: "15s"
# grafana/provisioning/datasources/loki.yml
apiVersion: 1
datasources:
  - name: Loki
    type: loki
    url: http://loki:3100

Dashboard 即代码(Dashboard as Code)

将 Dashboard JSON 放入 provisioning 目录,启动时自动导入:

# grafana/provisioning/dashboards/provider.yml
apiVersion: 1
providers:
  - name: default
    folder: "Auto-Provisioned"
    type: file
    options:
      path: /etc/grafana/provisioning/dashboards

推荐使用社区 Dashboard(grafana.com/dashboards):

  • 4701 — JVM Micrometer(Spring Boot)
  • 1860 — Node Exporter Full(主机监控)
  • 14282 — Kubernetes 集群概览

常用 Panel 类型

Panel适用场景
Time Series时序折线图,监控趋势
Stat单值大字体展示(当前 QPS、错误率)
Gauge仪表盘(CPU 使用率、堆内存占用率)
Bar Chart分类对比(各接口 P99)
Table多维度明细数据
Logs日志面板(配合 Loki)
Alert List当前触发的告警列表

变量(Variable)使用

在 Dashboard 设置 → Variables 中添加,查询 Prometheus label 值:

# 变量:instance,查询所有在线实例
label_values(up{job="spring-app"}, instance)

Panel 查询中引用变量:

rate(http_requests_total{instance="$instance"}[5m])

告警配置

告警规则 → 绑定数据源查询 → 设置条件(如 last() > 0.05) → 关联 Contact Point

# 通过 provisioning 配置告警通知渠道
apiVersion: 1
contactPoints:
  - orgId: 1
    name: DingTalk
    receivers:
      - uid: dingtalk-webhook
        type: webhook
        settings:
          url: "https://oapi.dingtalk.com/robot/send?access_token=xxx"
          httpMethod: POST

Grafana LGTM 栈

Grafana 官方提供完整的可观测性套件:

组件职责
Loki日志聚合(类似 Elasticsearch,但更轻量)
Grafana可视化
Tempo分布式链路追踪(兼容 Jaeger/Zipkin 格式)
Mimir长期 Prometheus 指标存储(多租户)

相关链接