Grafana可视化监控面板搭建实战:数据源配置与告警通知集成

Grafana是目前最流行的开源可视化监控平台,支持Prometheus、Loki、Elasticsearch等多种数据源,能够将服务器指标、应用日志、业务数据统一展示。本文从数据源接入、Dashboard设计、告警规则配置三个维度,给出Grafana生产环境搭建的完整方案。

Grafana安装与初始化配置

以Docker方式部署Grafana是最快捷的方案,适合快速验证和生产环境使用:

docker run -d \
  --name grafana \
  --restart=always \
  -p 3000:3000 \
  -v /data/grafana/data:/var/lib/grafana \
  -v /data/grafana/config/grafana.ini:/etc/grafana/grafana.ini \
  -e GF_SECURITY_ADMIN_PASSWORD=your_secure_password \
  grafana/grafana:11.1.0

关键配置项说明(grafana.ini):

[server]
http_port = 3000
domain = grafana.example.com

[security]
admin_user = admin
admin_password = your_secure_password
disable_gravatar = true

[auth.anonymous]
enabled = false

[smtp]
enabled = true
host = smtp.example.com:587
user = alert@example.com
password = smtp_password
from_address = alert@example.com
from_name = Grafana Alert

Prometheus数据源接入与配置

Prometheus是Grafana最常用的数据源,用于采集和存储时序指标数据。在Grafana中添加Prometheus数据源:

# 通过Grafana API添加数据源
curl -X POST http://admin:password@localhost:3000/api/datasources \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Prometheus",
    "type": "prometheus",
    "url": "http://prometheus:9090",
    "access": "proxy",
    "isDefault": true,
    "jsonData": {
      "timeInterval": "15s",
      "httpMethod": "POST"
    }
  }'

Prometheus侧需要配置Node Exporter采集服务器基础指标:

# prometheus.yml
scrape_configs:
  - job_name: "node_exporter"
    static_configs:
      - targets: ["192.168.1.10:9100", "192.168.1.11:9100"]
    scrape_interval: 15s

  - job_name: "app_metrics"
    static_configs:
      - targets: ["192.168.1.10:8080"]
    scrape_interval: 30s
    metrics_path: /metrics

Dashboard设计与面板配置

一个完整的服务器监控Dashboard通常包含CPU、内存、磁盘、网络四个维度的指标。以下是核心PromQL查询语句:

CPU使用率

100 - (avg by (instance) (rate(node_cpu_seconds_total{job="node_exporter",mode="idle"}[5m])) * 100)

内存使用率

(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100

磁盘使用率

(1 - (node_filesystem_avail_bytes{fstype!~"tmpfs|overlay"} / node_filesystem_size_bytes{fstype!~"tmpfs|overlay"})) * 100

网络流量

rate(node_network_receive_bytes_total{device!~"lo|docker.*"}[5m]) * 8

通过Grafana API创建Dashboard的JSON配置:

{
  "dashboard": {
    "title": "服务器监控面板",
    "panels": [
      {
        "title": "CPU使用率",
        "type": "timeseries",
        "datasource": "Prometheus",
        "targets": [{
          "expr": "100 - (avg by (instance) (rate(node_cpu_seconds_total{mode=\"idle\"}[5m])) * 100)",
          "legendFormat": "{{instance}}"
        }],
        "gridPos": {"h": 8, "w": 12, "x": 0, "y": 0},
        "fieldConfig": {
          "defaults": {
            "unit": "percent",
            "thresholds": {
              "steps": [
                {"color": "green", "value": null},
                {"color": "yellow", "value": 70},
                {"color": "red", "value": 90}
              ]
            }
          }
        }
      }
    ]
  }
}

Grafana Alerting告警规则配置

Grafana 11+内置了统一的告警引擎,支持多数据源告警。告警配置分为Rule(规则)和Contact Point(通知渠道)两部分。

创建告警规则(通过API):

curl -X POST http://admin:password@localhost:3000/api/v1/provisioning/alert-rules \
  -H "Content-Type: application/json" \
  -d '{
    "uid": "cpu-high-alert",
    "title": "CPU使用率超过90%",
    "condition": "A",
    "data": [{
      "refId": "A",
      "queryType": "",
      "relativeTimeRange": {"from": 300, "to": 0},
      "datasourceUid": "prometheus-uid",
      "model": {
        "expr": "100 - (avg by (instance) (rate(node_cpu_seconds_total{mode=\"idle\"}[5m])) * 100) > 90",
        "intervalMs": 1000,
        "maxDataPoints": 43200
      }
    }],
    "for": "5m",
    "annotations": {
      "summary": "CPU使用率告警",
      "description": "{{ $labels.instance }} CPU使用率持续超过90%已超过5分钟"
    },
    "labels": {"severity": "critical"},
    "isPaused": false
  }'

告警通知渠道配置

Grafana支持邮件、Slack、钉钉、Webhook等多种通知渠道。以钉钉机器人Webhook为例:

curl -X POST http://admin:password@localhost:3000/api/v1/provisioning/contact-points \
  -H "Content-Type: application/json" \
  -d '{
    "uid": "dingtalk-alert",
    "name": "钉钉告警通知",
    "type": "dingding",
    "settings": {
      "url": "https://oapi.dingtalk.com/robot/send?access_token=your_token",
      "messageType": "markdown",
      "title": "Grafana告警"
    }
  }'

配置通知策略(Notification Policy),将不同严重级别的告警路由到不同渠道:

{
  "routes": [
    {
      "receiver": "钉钉告警通知",
      "object_matchers": [["severity", "=", "critical"]],
      "continue": false,
      "group_wait": "30s",
      "group_interval": "5m",
      "repeat_interval": "4h"
    },
    {
      "receiver": "邮件通知",
      "object_matchers": [["severity", "=", "warning"]],
      "continue": false,
      "group_wait": "1m",
      "group_interval": "10m",
      "repeat_interval": "8h"
    }
  ]
}

Loki日志数据源接入

除了指标监控,Grafana还支持通过Loki接入日志数据,实现指标与日志的联动查询:

docker run -d \
  --name loki \
  -p 3100:3100 \
  -v /data/loki/config/loki-config.yaml:/etc/loki/local-config.yaml \
  grafana/loki:2.9.0 \
  -config.file=/etc/loki/local-config.yaml

在Grafana中添加Loki数据源后,可以使用LogQL查询日志:

# 查询特定服务的错误日志
{job="app"} |= "ERROR" | json | level="error"

# 统计每分钟错误日志数量
sum(count_over_time({job="app"} |= "ERROR" [1m]))

Dashboard版本管理与Provisioning

生产环境建议使用Grafana Provisioning机制,通过YAML文件管理Dashboard和数据源配置,实现版本控制:

# /etc/grafana/provisioning/datasources/datasources.yaml
apiVersion: 1
datasources:
  - name: Prometheus
    type: prometheus
    url: http://prometheus:9090
    isDefault: true
  - name: Loki
    type: loki
    url: http://loki:3100
# /etc/grafana/provisioning/dashboards/dashboards.yaml
apiVersion: 1
providers:
  - name: "服务器监控"
    orgId: 1
    folder: "Infrastructure"
    type: file
    options:
      path: /var/lib/grafana/dashboards

将Dashboard JSON文件放入指定目录后,Grafana会自动加载,无需手动导入。配合Git仓库管理Dashboard JSON文件,即可实现Dashboard的版本控制和CI/CD部署。

常见配置问题与优化建议

面板无数据:检查Prometheus数据源连接是否正常,在Grafana Explore中直接执行PromQL查询验证。确认Prometheus scrape target状态为UP。

告警不触发:确认告警规则中的datasourceUid与实际数据源UID一致。检查For字段设置的时间窗口是否过长。在Alerting页面查看告警规则状态和评估结果。

Dashboard加载慢:优化PromQL查询,避免全量扫描。对高频查询的指标设置recording rules,在Prometheus侧预计算并存储结果。调整Grafana面板的时间范围和数据点密度。

权限管理:通过Organization和Folder权限控制Dashboard可见性。生产环境建议为不同团队创建独立的Folder,设置Viewer/Editor权限。敏感Dashboard可以设置为只读。

原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/grafana-ke-shi-hua-jian-kong-mian-ban-da-jian-shi-zhan-shu/

(0)
小编小编
上一篇 21小时前
下一篇 21小时前

相关推荐