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/