当前位置: 首页 > backend >正文

Prometheus基础使用指南

Prometheus基础使用指南

概述

本文介绍Prometheus监控系统的基础使用方法,包括Web界面操作、PromQL查询语言、目标管理、规则配置等核心功能。适合初学者系统性学习Prometheus的基本操作。

Prometheus Web界面导览

访问入口

http://prometheus-server:9090

主要功能模块

  1. Graph: 查询和图表展示
  2. Alerts: 告警规则和状态
  3. Status: 系统状态信息
  4. Help: 帮助文档

目标管理 (Targets)

查看监控目标状态

导航路径:Status → Targets

目标状态说明
State: UP    - 目标可访问,正常采集数据
State: DOWN  - 目标不可访问,无法采集数据
典型配置示例
# prometheus.yml配置示例
scrape_configs:- job_name: 'prometheus'static_configs:- targets: ['localhost:9090']- job_name: 'node-exporter'static_configs:- targets: ['node-exporter:9100']- job_name: 'spring-boot-app'static_configs:- targets: ['app-server:8080']metrics_path: '/actuator/prometheus'scrape_interval: 30s
目标状态排查

UP状态检查要点

  • Health: 健康检查通过
  • Last Scrape: 最近采集时间
  • Scrape Duration: 采集耗时
  • Samples: 采集到的指标数量

DOWN状态常见原因

# 网络连通性检查
curl http://target-host:port/metrics# 防火墙检查
telnet target-host port# DNS解析检查
nslookup target-host

API方式查询目标

# 获取所有目标状态
curl http://prometheus-server:9090/api/v1/targets# 过滤特定job的目标
curl 'http://prometheus-server:9090/api/v1/targets' | jq '.data.activeTargets[] | select(.job=="spring-boot-app")'

配置管理 (Configuration)

查看当前配置

导航路径:Status → Configuration

配置热重载
# 重新加载配置(无需重启)
curl -X POST http://prometheus-server:9090/-/reload# 验证配置语法
promtool check config prometheus.yml
配置文件结构
global:scrape_interval: 15s      # 全局采集间隔evaluation_interval: 15s  # 规则评估间隔rule_files:- "alert-rules.yml"       # 告警规则文件alerting:alertmanagers:            # AlertManager配置- static_configs:- targets: ["alertmanager:9093"]scrape_configs:             # 采集目标配置- job_name: 'example-app'# ... 具体配置

告警规则管理 (Rules)

查看规则状态

导航路径:Status → Rules

规则类型
  1. Recording Rules: 预计算规则,生成新的时间序列
  2. Alerting Rules: 告警规则,触发告警
告警规则示例
# alert-rules.yml
groups:- name: application-alertsrules:# 服务可用性告警- alert: ServiceDownexpr: up{job="spring-boot-app"} == 0for: 1mlabels:severity: criticalannotations:summary: "Service {{ $labels.job }} is down"description: "Service has been down for more than 1 minute"# 高错误率告警- alert: HighErrorRateexpr: rate(http_requests_total{status=~"5.."}[5m]) > 0.1for: 2mlabels:severity: warningannotations:summary: "High error rate detected"description: "Error rate is {{ $value }} requests/sec"
记录规则示例
groups:- name: application-recordingrules:# 计算QPS- record: app:http_requests:rate5mexpr: rate(http_requests_total[5m])# 计算错误率- record: app:http_errors:rate5mexpr: rate(http_requests_total{status=~"5.."}[5m])

规则状态说明

  • Active: 规则正常工作
  • Firing: 告警规则正在触发
  • Pending: 告警规则等待触发(for条件未满足)

PromQL查询语言

基础查询语法

1. 基本指标查询
# 查询单个指标
up# 查询特定job的指标
up{job="spring-boot-app"}# 查询多个条件
http_requests_total{job="spring-boot-app", method="GET"}
2. 时间范围查询
# 查询过去5分钟的数据
http_requests_total[5m]# 查询1小时前的数据
http_requests_total offset 1h
3. 聚合函数
# 求和
sum(http_requests_total)# 按label分组求和
sum(http_requests_total) by (job)# 平均值
avg(cpu_usage_percent)# 最大值和最小值
max(memory_usage_bytes)
min(memory_usage_bytes)# 计数
count(up == 1)
4. 速率计算
# 计算每秒速率
rate(http_requests_total[5m])# 计算增长量
increase(http_requests_total[1h])# 计算瞬时增长率
irate(http_requests_total[5m])

实用查询示例

应用性能监控
# QPS (每秒请求数)
sum(rate(http_requests_total[5m])) by (job)# 平均响应时间
histogram_quantile(0.5, rate(http_request_duration_seconds_bucket[5m]))# 95分位响应时间
histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))# 错误率
sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m]))
系统资源监控
# CPU使用率
100 - (avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)# 内存使用率
(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100# 磁盘使用率
(1 - (node_filesystem_avail_bytes / node_filesystem_size_bytes)) * 100# 网络流量
rate(node_network_receive_bytes_total[5m])
业务指标监控
# 任务执行成功率
sum(rate(task_executions_total{status="success"}[5m])) / sum(rate(task_executions_total[5m]))# 任务执行时长分布
histogram_quantile(0.95, rate(task_duration_seconds_bucket[10m]))# 活跃用户数
count(user_last_activity_timestamp > (time() - 300))

PromQL操作符

算术操作符
# 基本运算
memory_usage_bytes / 1024 / 1024  # 转换为MB
cpu_usage_percent * 100           # 转换为百分比# 向量运算
node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes
比较操作符
# 过滤条件
cpu_usage_percent > 80
memory_usage_percent <= 90
http_response_time != 0
逻辑操作符
# AND操作
up{job="app"} and on(instance) cpu_usage_percent > 80# OR操作
up{job="app1"} or up{job="app2"}# UNLESS操作 (排除)
up unless on(instance) node_cpu_seconds_total

实用功能和技巧

查询历史数据

# 查询特定时间点的数据
up @ 1609459200  # Unix时间戳# 查询相对时间的数据
up offset 1h     # 1小时前
up offset 1d     # 1天前

标签操作

# 重命名标签
label_replace(up, "environment", "$1", "instance", "(.+)-.+")# 删除标签
up{job="app"} without (instance)# 选择标签
up{job="app"} by (job, status)

数学函数

# 四舍五入
round(cpu_usage_percent, 0.1)# 取整
floor(memory_usage_gb)
ceil(memory_usage_gb)# 绝对值
abs(temperature_celsius)# 对数和指数
ln(requests_per_second)
exp(log_level)

查询优化技巧

性能最佳实践

1. 时间范围选择
# 好的做法:适当的时间窗口
rate(http_requests_total[5m])# 避免:过短的时间窗口
rate(http_requests_total[30s])  # 可能导致数据不稳定# 避免:过长的时间窗口
rate(http_requests_total[1h])   # 可能掩盖短期变化
2. 标签过滤
# 好的做法:尽早过滤
sum(rate(http_requests_total{job="specific-app"}[5m]))# 避免:后期过滤
sum(rate(http_requests_total[5m])) by (job) and on() vector(job="specific-app")
3. 聚合优化
# 好的做法:先聚合再计算
sum(rate(http_requests_total[5m])) by (job)# 避免:重复聚合
sum(sum(rate(http_requests_total[5m])) by (instance)) by (job)

常见查询错误

错误1:类型不匹配
# 错误:向量与标量运算
up + 1# 正确:确保操作数类型匹配
up + on() group_left() vector(1)
错误2:标签选择问题
# 错误:标签不存在
http_requests_total{nonexistent_label="value"}# 正确:检查标签是否存在
label_names()  # 查看所有标签名
错误3:时间序列过多
# 可能有问题:高基数查询
sum(http_requests_total) by (user_id)# 更好:适当聚合
sum(http_requests_total) by (job, status)

监控仪表板最佳实践

图表类型选择

1. 时间序列图表

适用于:趋势监控、性能指标

# CPU使用率趋势
avg(cpu_usage_percent) by (instance)
2. 统计图表

适用于:当前状态、汇总信息

# 当前在线服务数量
count(up == 1)
3. 热力图

适用于:分布数据、响应时间分析

# 响应时间分布
histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))

告警规则设计原则

1. 明确的阈值
# 好的做法:基于业务需求的阈值
- alert: HighErrorRateexpr: error_rate > 0.05  # 5%错误率# 避免:过于敏感的阈值
- alert: AnyErrorexpr: error_rate > 0     # 任何错误都告警
2. 合适的持续时间
# 好的做法:避免短期波动
- alert: ServiceDownexpr: up == 0for: 1m                  # 持续1分钟才告警# 避免:立即告警
- alert: ServiceDownexpr: up == 0for: 0s                  # 立即告警,容易误报
3. 有意义的标签和注释
- alert: DatabaseConnectionFailureexpr: db_connections_active / db_connections_max > 0.9labels:severity: warningcomponent: databaseannotations:summary: "Database connection pool nearly exhausted"description: "Connection usage: {{ $value | humanizePercentage }}"

故障排查指南

常见问题诊断

1. 数据采集问题
# 检查目标状态
curl http://prometheus-server:9090/api/v1/targets# 检查指标端点
curl http://target-app:port/metrics# 验证指标格式
curl http://target-app:port/metrics | grep HELP
2. 查询性能问题
# 检查查询执行时间
prometheus_engine_query_duration_seconds# 检查活跃查询数
prometheus_engine_queries# 查看存储指标
prometheus_tsdb_head_samples_appended_total
3. 存储空间问题
# 检查数据目录大小
du -sh /prometheus/data# 查看数据保留策略
--storage.tsdb.retention.time=15d
--storage.tsdb.retention.size=10GB

总结

Prometheus作为现代监控系统的核心组件,提供了强大而灵活的查询能力。掌握其基础操作和PromQL语言,是构建有效监控体系的关键。

学习要点回顾

  1. 界面熟悉: 了解各个功能模块的作用
  2. PromQL语法: 掌握基本查询和聚合操作
  3. 规则配置: 理解告警和记录规则的设计
  4. 性能优化: 编写高效的查询语句
  5. 故障排查: 具备基本的问题诊断能力

进阶学习方向

  • 高级PromQL函数和操作符
  • 自定义指标设计
  • 大规模Prometheus集群管理
  • 与其他监控工具的集成

通过持续实践和学习,可以更好地利用Prometheus的强大功能,构建完善的监控告警体系。

http://www.xdnf.cn/news/13388.html

相关文章:

  • 鹰盾加密虚拟机保护技术的深度解析:从指令级虚拟化到动态对抗系统
  • (LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
  • Windows cmd中文乱码解决方法(Windows控制台中文乱码、CMD乱码、控制台乱码、Command Prompt命令提示符cmd.exe乱码)
  • JxBrowser 7.43.2 版本发布啦!
  • 预训练模型 CBAM注意力
  • 【docker n8n】windows环境如何挂载
  • 【计算机组成原理 第5版】白、戴编著 第四章 指令系统 课后题总结
  • 第二章 开发板与芯片介绍
  • 慢接口优化万能公式-适合所有系统
  • 【论文阅读笔记】HaDes幻觉检测benchmark
  • GISBox如何导入Revit格式的BIM数据?
  • 案例解读:交安与建安安全员 C 证在实践中的差异
  • 电路图识图基础知识-电机顺序启动控制电路解析(二十二)
  • 期末考试复习总结-《从简单的页面开始(下)》
  • NLP学习路线图(三十八): 文本摘要
  • 3分钟配置好nacos集群(docker compose)
  • 接口测试与接口测试面试题
  • 讲讲JVM的垃圾回收机制
  • 【八股消消乐】构建微服务架构体系—熔断恢复抖动优化
  • 认识 Python 【适合0基础】
  • 魔兽世界正式服插件与宏-敏锐盗贼实用宏探索(3)-起手奥义【袭】之突如其来
  • C++ Programming Language —— 第1章:核心语法
  • SpringBoot自动化部署实战
  • Python主动抛出异常详解:掌握raise关键字的艺术
  • 云原生核心技术 (6/12): K8s 从零到一:使用 Minikube/kind 在本地搭建你的第一个 K8s 集群
  • 基于STM32F103C8T6单片机双极性SPWM逆变(软件篇)
  • 软件定义汽车的转型之路已然开启
  • MH2213 32位Arm® Cortex®-M3 Core核心并内嵌闪存和SRAM
  • 模型上下文协议(MCP)实践指南
  • 医院系统源码核心功能开发探索:问诊、陪诊、预约挂号、电子处方