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 最常用的数据源,用于拉取指标数据。配置步骤如下:

  1. 名称: 输入数据源名称,如 Prometheus-Prod。
  2. URL: 输入 Prometheus 服务器地址,如 http://192.168.1.100:9090。
  3. 访问模式: 选择 Server(代理) 或 Browser(直连)。推荐 Server 模式。
  4. 认证: 根据 Prometheus 配置选择 Basic Auth 或 Bearer 。
  5. Scrape 间隔: 设置默认查询步长,如 15s。
  6. 测试: 点击 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 中上传证书内容。
Prometheus 数据源连接架构 Prometheus 数据源连接架构 Grafana 服务器 Prometheus 服务器 Node Exporter 应用 Metrics 说明: Grafana 通过 HTTP API 向 Prometheus 发送 PromQL 查询请求。 推荐使用 Server(代理)模式,由 Grafana 后端转发请求,避免 CORS 和网络暴露。

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 用于日志和全文搜索数据的可视化。配置步骤:

  1. URL: ES 集群地址,如 http://elasticsearch:9200。
  2. 索引模式: 支持按时间戳过滤的索引模式,如 [logstash-]YYYY.MM.DD。
  3. 时间字段: 指定用于时间过滤的字段,通常为 @timestamp。
  4. ES 版本: 选择对应的 Elasticsearch 主版本(如 7.x、8.x)。
  5. 认证: 支持 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 到数据源的网络访问。
数据源代理与访问控制架构 数据源代理与访问控制架构 浏览器 Grafana 代理 认证 / 鉴权 / 转发 Prometheus InfluxDB Elasticsearch MySQL / PG 访问控制层级: 1. 组织隔离:数据源仅对所属组织可见。 2. 角色控制:Admin 可管理,Editor/Viewer 仅可查询。 3. 网络策略:通过防火墙/安全组限制 Grafana 到数据源的入站规则。 4. 数据源权限(Enterprise):按用户/团队细粒度控制查询范围。

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 代理模式,并遵循最小权限原则配置数据源访问。