Prometheus采集指标Grafana展示

wen java案例 1

本文目录导读:

Prometheus采集指标Grafana展示

  1. 核心架构速览
  2. 第一步:Prometheus 如何采集指标?
  3. 第二步:Grafana 如何展示?
  4. 第三步:生产环境落地建议
  5. FAQ:常见问题

这是一个非常经典的运维/监控技术栈组合。Prometheus(普罗米修斯)负责采集和存储指标数据Grafana(格拉法纳)负责从Prometheus拉取数据并进行可视化展示

下面我为你梳理从数据采集到图表展示的完整流程、核心概念和常见配置。


核心架构速览

[被监控对象]  --暴露指标-->  [Prometheus Server]  --数据源-->  [Grafana]
   (exporter/应用)              (拉取/存储)                (查询/展示)

第一步:Prometheus 如何采集指标?

数据来源:Exporters 或 应用本身

Prometheus 通过 HTTP 端点(通常是 /metrics 拉取数据,数据来源有两种:

  • Exporter(导出器):专门用于将第三方系统的指标转换为 Prometheus 格式。
    • node_exporter:采集 Linux/Windows 服务器指标(CPU、内存、磁盘、网络等)。
    • mysqld_exporter:采集 MySQL 数据库指标。
    • redis_exporter:采集 Redis 指标。
    • cadvisor:采集 Docker 容器指标。
  • 应用直接暴露:如果应用是自己开发的,可以用 Prometheus 客户端库(Go/Java/Python等)直接在代码里暴露 /metrics 端点。

核心配置文件:prometheus.yml

Prometheus 通过在配置文件中定义 scrape_configs 来知道去哪里拉数据。

# prometheus.yml 示例
global:
  scrape_interval: 15s      # 全局拉取间隔,默认1分钟
  evaluation_interval: 15s  # 告警规则评估间隔
scrape_configs:
  # 监控Prometheus自身(默认自带的job)
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
  # 监控一台Linux服务器(假设node_exporter在目标机器上运行)
  - job_name: 'linux_server'
    scrape_interval: 10s
    static_configs:
      - targets: ['192.168.1.100:9100'] # node_exporter默认端口
  # 监控多个MySQL实例(使用文件服务发现)
  - job_name: 'mysql'
    file_sd_configs:
      - files:
        - '/etc/prometheus/targets/mysql_*.json'

启动与验证

# 启动Prometheus(默认读取当前目录下的prometheus.yml)
./prometheus --config.file=prometheus.yml

启动后,访问 http://<prometheus_ip>:9090/targets,可以查看所有配置的拉取目标是否在线(State为UP)。


第二步:Grafana 如何展示?

添加 Prometheus 数据源

  1. 登录 Grafana(默认 http://<grafana_ip>:3000,账号密码初始为 admin/admin)。
  2. 进入 Configuration(配置) -> Data Sources(数据源)
  3. 点击 Add data source,选择 Prometheus
  4. URL 中输入 Prometheus 的地址(http://192.168.1.10:9090)。
  5. 点击 Save & Test,看到绿色提示“Data source is working”即可。

创建 Dashboard(仪表盘)

  • 手动创建:点击左侧 号 -> Dashboard -> Add new panel
  • 使用导入模板(推荐):很多常见监控(如服务器、MySQL、Kubernetes)有现成的Dashboard。
    1. 访问 Grafana Dashboards 官网
    2. 搜索关键词(如 Node Exporter Full,ID 通常为 1860)。
    3. 在Grafana中点击 + -> Import,输入ID,选择Prometheus数据源,即可加载完整的监控面板。

编写 PromQL 查询语句

Grafana 的图表背后是 PromQL(Prometheus Query Language),这是最核心的部分,决定了展示什么数据。

常用 PromQL 例子:

监控目标 PromQL 示例 说明
CPU使用率 100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) 计算每台机器的CPU空闲率,再取反
内存使用率 (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 可用内存/总内存,取反
磁盘使用率 (node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_free_bytes{mountpoint="/"}) / node_filesystem_size_bytes{mountpoint="/"} * 100 根路径的使用率
HTTP请求速率 rate(http_requests_total{job="api"}[5m]) 最近5分钟的每秒请求数
请求错误率 sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m])) * 100 5xx错误占总请求的比例

在 Grafana 面板中:

  • Metrics 输入框:填写上面的PromQL。
  • Legend:可以自定义图例(如 {{instance}} 显示机器IP)。
  • Visualization:选择展示形式(Time series折线图、Stat数字、Bar gauge柱状图、Table表格等)。

第三步:生产环境落地建议

架构扩展

单机 Prometheus 不适合大规模集群,通常会使用:

  • Pushgateway:处理短期任务(批处理、CronJob)的指标推送。
  • Alertmanager:与Prometheus集成,处理告警(邮件、钉钉、企业微信)。
  • Thanos / VictoriaMetrics:对Prometheus进行水平扩展和长期存储。
  • Relabeling(重标签):在配置中使用 relabel_configs 来过滤、修改或创建标签,实现更灵活的监控。

最佳实践

  • 打标签要谨慎:标签基数过大会导致 Prometheus 内存爆炸(如将用户ID、请求IP作为标签)。
  • 统一命名规范:指标名用小写+下划线(http_request_duration_seconds),单位放在后缀。
  • 定义Recording Rules:将复杂的PromQL预先计算好存入新指标,加速频繁查询。
  • 做好告警:不要只看图表,配置 Alerting Rules 让系统在指标异常时主动通知你。

FAQ:常见问题

Q:Grafana 图表显示 No data

  • 检查数据源:Grafana 的 Data Source 能 Save & Test 通过吗?
  • 检查时间范围:Grafana 右上角的时间范围是不是在未来或过于久远?
  • 检查指标名:PromQL 里的指标名是否在 Prometheus 的 /targets 能找到?去 Prometheus UI 的 Graph 页面执行一下同样的语句看看能否出数据。
  • 检查标签:PromQL 里的 jobinstance 标签是否写对了?

Q:node_exporter 默认端口是多少?

  • 通常为 9100

Q:Prometheus 数据存在哪里?

  • 默认存在本地磁盘 data/ 目录(基于时间序列的TSDB格式),如果容器重启会丢失,建议持久化挂载。

Q:如何在已有 Java 应用里接入 Prometheus?

  • 引入 micrometer-registry-prometheus 依赖,配置一个 /actuator/prometheus 端点即可。

抱歉,评论功能暂时关闭!