4. 数据源配置:添加 Prometheus、InfluxDB、Elasticsearch、MySQL/PostgreSQL 数据源及代理与访问控制
数据源是 Grafana 的“数据后端”连接器。Grafana 本身不存储监控数据,而是通过数据源插件从各类时序数据库、日志系统、关系型数据库中查询并可视化。本章将详细讲解五种核心数据源的添加流程、配置参数、代理模式与访问控制策略。
核心原则: 数据源配置遵循“连接字符串 + 认证方式 + 访问模式”三要素。生产环境中建议使用 代理(Proxy) 模式,避免浏览器直连后端数据库。
4.1 数据源配置总览
Grafana 支持超过 50 种数据源插件。以下表格对比了本课程涉及的 5 种核心数据源的关键属性:
| 数据源类型 | 默认端口 | 查询语言 | 典型用途 | 认证方式 |
|---|---|---|---|---|
| Prometheus | 9090 | PromQL | 基础设施/应用指标 | 无认证 / Basic Auth / Bearer |
| InfluxDB | 8086 | InfluxQL / Flux | IoT / 实时时序数据 | / 用户名密码 |
| Elasticsearch | 9200 | ES DSL / Lucene | 日志分析 / 全文搜索 | 无认证 / Basic Auth / |
| MySQL | 3306 | SQL | 业务数据 / 自定义报表 | 用户名密码 / TLS |
| PostgreSQL | 5432 | SQL | 业务数据 / 地理信息 | 用户名密码 / TLS / 证书 |
配置入口: 在 Grafana 左侧菜单栏点击 ⚙️ Configuration → Data Sources → Add data source。搜索或选择对应类型即可进入配置页面。
4.2 添加 Prometheus 数据源
Prometheus 是 Grafana 最常用的数据源,用于拉取指标数据。配置步骤如下:
- 名称: 输入数据源名称,如
Prometheus-Prod。 - URL: 输入 Prometheus 服务器地址,如
http://192.168.1.100:9090。 - 访问模式: 选择 Server(代理) 或 Browser(直连)。推荐 Server 模式。
- 认证: 根据 Prometheus 配置选择 Basic Auth 或 Bearer 。
- Scrape 间隔: 设置默认查询步长,如
15s。 - 测试: 点击 Save & Test,验证连接是否成功。
# Prometheus 数据源配置示例(Grafana 配置文件 provisioning/datasources/prometheus.yaml)
apiVersion: 1
datasources:
- name: Prometheus-Prod
type: prometheus
access: proxy
url: http://prometheus-server:9090
isDefault: true
editable: false
jsonData:
timeInterval: "15s"
httpMethod: "POST"
secureJsonData:
basicAuthPassword: "your_password"
注意: 如果 Prometheus 启用了 mTLS,需要在
jsonData 中配置 tlsAuth: true 并在 secureJsonData 中上传证书内容。
4.3 添加 InfluxDB 数据源
InfluxDB 是专为时序数据设计的数据库,Grafana 支持 InfluxQL 和 Flux 两种查询语言。配置要点:
- URL: InfluxDB HTTP API 地址,如
http://influxdb:8086。 - 数据库: 输入数据库名称(InfluxQL 模式)或 Bucket 名称(Flux 模式)。
- HTTP 方法: 推荐使用 POST 以支持复杂查询。
- 认证: 使用 认证时,在
secureJsonData中填写字段。
# InfluxDB 数据源配置(provisioning)
datasources:
- name: InfluxDB-Metrics
type: influxdb
access: proxy
url: http://influxdb:8086
database: telegraf
jsonData:
httpMode: POST
version: Flux
secureJsonData:
: "your-influxdb-"
版本选择: InfluxDB 1.x 使用 InfluxQL,2.x 使用 Flux。Grafana 数据源配置中需在
jsonData.version 字段明确指定。
4.4 添加 Elasticsearch 数据源
Elasticsearch 用于日志和全文搜索数据的可视化。配置步骤:
- URL: ES 集群地址,如
http://elasticsearch:9200。 - 索引模式: 支持按时间戳过滤的索引模式,如
[logstash-]YYYY.MM.DD。 - 时间字段: 指定用于时间过滤的字段,通常为
@timestamp。 - ES 版本: 选择对应的 Elasticsearch 主版本(如 7.x、8.x)。
- 认证: 支持 Basic Auth 或 。
# Elasticsearch 数据源配置
datasources:
- name: ES-Logs
type: elasticsearch
access: proxy
url: http://elasticsearch:9200
database: "[logstash-]YYYY.MM.DD"
jsonData:
esVersion: 7.10.0
timeField: "@timestamp"
interval: Daily
secureJsonData:
basicAuthPassword: "es_password"
注意: Elasticsearch 8.x 默认启用安全特性,需配置 TLS 证书或关闭安全认证(测试环境)。生产环境务必使用 HTTPS 连接。
4.5 添加 MySQL / PostgreSQL 数据源
关系型数据库数据源允许直接使用 SQL 查询业务数据并生成图表。配置参数对比:
| 参数 | MySQL | PostgreSQL |
|---|---|---|
| 主机 | mysql-server:3306 |
pg-server:5432 |
| 数据库 | mydb |
mydb |
| 用户 | grafana_reader |
grafana_reader |
| TLS/SSL | 支持 skip-verify 或 true |
支持 disable / require / verify-full |
| 最大查询行数 | 默认 1000 | 默认 1000 |
| 时区 | 需在连接字符串中指定 | 支持 TimeZone 参数 |
# PostgreSQL 数据源配置示例
datasources:
- name: PG-Business
type: postgres
access: proxy
url: postgresql://pg-server:5432/mydb
user: grafana_reader
jsonData:
sslmode: "require"
postgresVersion: 1500
timescaledb: false
secureJsonData:
password: "readonly_password"
安全最佳实践: 为 Grafana 创建专用的只读数据库用户,仅授予
SELECT 权限,避免数据写入风险。
4.6 数据源代理与访问控制
Grafana 提供两种数据源访问模式,以及细粒度的访问控制策略。
4.6.1 访问模式对比
| 模式 | 请求路径 | 优点 | 缺点 |
|---|---|---|---|
| Server(代理) | 浏览器 → Grafana 后端 → 数据源 | 隐藏数据源地址;支持后端认证;无 CORS 问题 | 增加 Grafana 服务器负载 |
| Browser(直连) | 浏览器 → 数据源 | 减少 Grafana 负载;适合低延迟场景 | 暴露数据源地址;需处理 CORS;认证信息可能泄露 |
推荐: 生产环境始终使用 Server(代理) 模式。仅在开发环境或 Grafana 与数据源同网络时使用 Browser 模式。
4.6.2 访问控制策略
Grafana 通过以下层级控制数据源访问:
- 组织级别: 数据源属于某个组织,其他组织不可见。
- 角色权限:
Admin角色可添加/编辑/删除数据源;Editor和Viewer仅可使用。 - 数据源权限(Enterprise): 可针对特定用户或团队设置查询权限。
- 网络策略: 通过防火墙或 Kubernetes NetworkPolicy 限制 Grafana 到数据源的网络访问。
4.6.3 代理配置注意事项
- 超时设置: 在 Grafana 配置文件
grafana.ini中调整dataproxy.timeout(默认 30s)。 - 日志记录: 启用
dataproxy.logging可记录代理请求详情,便于调试。 - IP 白名单: 在反向代理层(如 Nginx)限制 Grafana 可访问的数据源 IP 范围。
- TLS 证书: 如果数据源使用自签名证书,需在 Grafana 中配置
ca_cert或设置skipTlsVerify: true(不推荐生产)。
# grafana.ini 代理相关配置
[dataproxy]
timeout = 30
logging = true
send_user_header = true
# 如果数据源使用自签名证书
# [server]
# protocol = https
# cert_file = /etc/grafana/grafana.crt
# key_file = /etc/grafana/grafana.key
总结: 数据源配置是 Grafana 可视化的基础。掌握 Prometheus、InfluxDB、Elasticsearch、MySQL/PostgreSQL 的添加方法,理解代理模式与访问控制策略,能够确保监控系统安全、高效地运行。在生产环境中,始终优先使用 Server 代理模式,并遵循最小权限原则配置数据源访问。