本文目录导读:

这是一个非常经典的运维/监控技术栈组合。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 数据源
- 登录 Grafana(默认
http://<grafana_ip>:3000,账号密码初始为admin/admin)。 - 进入 Configuration(配置) -> Data Sources(数据源)。
- 点击 Add data source,选择 Prometheus。
- 在 URL 中输入 Prometheus 的地址(
http://192.168.1.10:9090)。 - 点击 Save & Test,看到绿色提示“Data source is working”即可。
创建 Dashboard(仪表盘)
- 手动创建:点击左侧 号 -> Dashboard -> Add new panel。
- 使用导入模板(推荐):很多常见监控(如服务器、MySQL、Kubernetes)有现成的Dashboard。
- 访问 Grafana Dashboards 官网。
- 搜索关键词(如
Node Exporter Full,ID 通常为1860)。 - 在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 里的
job或instance标签是否写对了?
Q:node_exporter 默认端口是多少?
- 通常为
9100。
Q:Prometheus 数据存在哪里?
- 默认存在本地磁盘
data/目录(基于时间序列的TSDB格式),如果容器重启会丢失,建议持久化挂载。
Q:如何在已有 Java 应用里接入 Prometheus?
- 引入
micrometer-registry-prometheus依赖,配置一个/actuator/prometheus端点即可。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播