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

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的强大功能,构建完善的监控告警体系。

相关文章:

  • 【论文阅读】多任务学习起源类论文《Multi-Task Feature Learning》
  • 线程与协程
  • 实现多路视频截图预览之后上传到后台系统
  • 配置Linux的网络为静态IP地址的一些方法
  • HTML 列表、表格、表单 综合案例
  • 如何查看电脑系统的初始安装时间?
  • HTML 列表、表格、表单
  • Linux上并行打包压缩工具
  • 小天互连IM:信创体系下的安全、高效即时通讯新选择
  • 【强化学习】TD-MPC论文解读
  • 方案解读:智慧银行反欺诈大数据管控平台建设方案【附全文阅读】
  • Alpine Linux基本介绍与新手使用指南
  • 雷卯针对易百纳海鸥派海思SD3403 SS928智能视觉AI视觉国产化4K视频开发板防雷防静电方案
  • Java 枚举(Enum)的使用说明
  • tomcat的websocket协议升级。如何从报文交换变成全双工通信?session对象的注册和绑定?
  • 【WebRTC-14】webrtc是如何创建视频的软/硬编码器?
  • Linux ELF文件详解:深入理解可执行文件格式
  • 【模板编程】
  • Java八股文——JVM「类加载篇」
  • websocket实践
  • 网站浏览记录怎么做/上海免费关键词排名优化
  • 邢台专业网站建设/微信5000人接推广费用
  • 网站建设项目延期验收申请/百度软件商店
  • flask网站开发源码/网站一级域名和二级域名
  • 网上做网站广告投放/郑州做网站推广资讯
  • 软件最全的应用商店/论坛seo设置