文章目录
1、安装必要的库
yum -y install python3
yum -y install epel-release
yum -y install python3-pip
pip3 install prometheus_client requests
2、编写脚本
vim prometheus_http.py
from prometheus_client import start_http_server, Summary, Counter, Gauge
import requests
import time
# Prometheus 指标
REQUEST_TIME = Summary('http_request_duration_seconds', 'HTTP请求处理时间')
REQUEST_COUNT = Counter('http_requests_total', '总的HTTP请求数', ['status_code'])
QPS = Gauge('http_requests_per_second', '每秒HTTP请求数')
# 需要监控的HTTP接口
URL = "http://www.test.com/"
def track_metrics():
"""监控HTTP接口请求的耗时、状态码和QPS"""
while True:
start_time = time.time()
try:
response = requests.get(URL)
duration = time.time() - start_time
# 记录请求耗时
REQUEST_TIME.observe(duration)
# 记录返回状态码
REQUEST_COUNT.labels(status_code=response.status_code).inc()
except requests.exceptions.RequestException:
# 如果请求失败,记录状态码为500
REQUEST_COUNT.labels(status_code=500).inc()
# 计算QPS
QPS.set(1 / duration if duration > 0 else 0)
# 休眠一秒钟,模拟持续监控
time.sleep(1)
if __name__ == '__main__':
# 启动一个HTTP服务器,监听8002端口,用于Prometheus抓取数据
start_http_server(8002)
# 开始监控HTTP请求的耗时、状态码和QPS
track_metrics()
3、脚本说明:
- REQUEST_TIME:记录HTTP请求的耗时。
- REQUEST_COUNT:记录每个状态码的请求总数。
- QPS:记录每秒请求数。
start_http_server(8002)
:启动HTTP服务器,在8002端口暴露Prometheus的/metrics
接口。track_metrics()
:在一个循环中持续发送HTTP请求,记录指标。
4、运行脚本
#前台运行
python3 prometheus_http.py
#后台运行
nohup python3 prometheus_http.py > /home/work/logs/applogs/prometheus_http.log 2>&1 &
#测试是否采集到数据
curl http://10.156.44.62:8002/metrics
5、grafana面板配置
在Grafana中,先设置创建一个dashboard,然后进入这个dashboard,再创建新的面板,在面板的左下方数据源中选择Prometheus为数据源,然后进行promQL语法进行数据查询过滤展示即可,语法如下:
5.1 QPS(每秒请求数)
Prometheus中的QPS
指标是通过 Gauge
类型记录的。你可以通过以下PromQL查询实时显示每秒的请求数:
rate(http_requests_total[1m])
rate
函数计算在过去1分钟内每秒的平均请求数(即QPS)。
5.2 请求耗时
REQUEST_TIME
指标是通过 Summary
类型记录的请求耗时。你可以使用以下PromQL查询来显示不同百分位数的请求耗时(例如P99、P95等):
histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket[1m])) by (le))
histogram_quantile
函数计算某个百分位的请求耗时,0.99
表示99%请求的耗时。
5.3 请求返回状态码
可以统计不同HTTP状态码的请求数量,以下是查询2xx、4xx、5xx请求数量的PromQL语句:
sum(rate(http_requests_total{status_code=~"2.."}[1m])) # 成功请求
sum(rate(http_requests_total{status_code=~"4.."}[1m])) # 客户端错误
sum(rate(http_requests_total{status_code=~"5.."}[1m])) # 服务端错误
5.4 面板设置建议:
- QPS:使用
Graph
面板展示QPS变化趋势;也可以用Stat
来显示当前的QPS值。 - 请求耗时:用
Graph
展示不同百分位的耗时(P99、P95等)。 - 返回状态码:使用
Bar gauge
或Stat
面板显示不同状态码的请求数量分布。
通过这些查询和面板模板,可以在Grafana中直观地看到HTTP接口的实时性能数据。