【Prometheus】Prometheus如何监控Haproxy

ops/2025/1/24 17:57:22/

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生k8s,Prometheus监控,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏:Prometheus监控系统零基础到进阶
景天的主页:景天科技苑

在这里插入图片描述

文章目录

  • Prometheus如何监控Haproxy
    • 1、监控案例介绍
      • 1.1 监控场景描述
      • 1.2 监控环境规划
    • 2、Prometheus监控Haproxy

Haproxy_19">Prometheus如何监控Haproxy

1、监控案例介绍

1.1 监控场景描述

在前⾯的章节中,我们已经学习了如何使用 Prometheus 结合node_exporter 来监控系统资源的CPU、内存、磁盘、网络等,
同时我们还通过“监控的方法论”找出了不同资源的重要的指标,并编写PromQL查询表达式和告警规则。
但是,系统资源的监控只是监控的一部分。因此我们还需要关注运行在这些节点上的应用程序。
接下来,我们将深入探讨如何通过应用程序暴露的指标来直接监控它们,或者通过 Exporter 来间接收集不同应用的指标数据。
同时我们还会逐一介绍每个应用的关键性能指标,并讲解如何利用PromQL 对这些指标进行查询。
此外,我们对应的PromQL制作为告警规则,以便在系统出现异常时,能第一时间进行通知。
我们先看下监控案例的场景
在这里插入图片描述

有些应用程序自带metrics,像Haprox,RabitMQ,kubernetes等,
有些需要我们借助exporter进行暴露metrics,很多应用都有对应的exporter
有些需要服务发现,
有些需要push数据给网关,
还有些黑盒监控,如何通过http探测网站,通过tcp去探测相关服务
我们针对不同类型,都有详细讲解如何监控。
1、应用自带Metrics如何监控:
2、应用无法自带Metrics,借助Exporter如何监控;
3、黑盒监控BlackBox;
4、PushGateway如何使用;
掌握这些监控的资源的重要指标,以及PromQL的查询表达式编写,PromQL告警规则文件;

告警:
AlertManager

图形:
Grafana

1.2 监控环境规划

在这里插入图片描述

Haproxy_57">2、Prometheus监控Haproxy

从 HAProxy 2.0 版本开始,HAProxy 内置了对 Prometheus 的支持。
这意味着 HAProxy 能够直接提供兼容Prometheus的指标格式,无需依赖任何额外的 exporter 。(安装Haproxy、然后修改stats,配置对外输出metrics接口)

Haproxy_63">2.1 安装并配置Haproxy

1、使用yum安装Haproxy,centos7默认安装的是1.5版本,无法安装2.0以上的版本。我们使用功能rocketlinux9.5系统可以yum安装

yum install haproxy -y

在这里插入图片描述

看下systemd配置文件
在这里插入图片描述

2、配置Haproxy的stats功能
先将源文件备份

cat /etc/haproxy/haproxy.cfg
globalmaxconn 100000 # Haproxy支持最大的会话数,如果default没有配置则使用global# uid 99# gid 99user haproxygroup haproxydaemonlog 127.0.0.1 local2 infopidfile /var/lib/haproxy/haproxy.pidstats socket /var/lib/haproxy/haproxy.sock mode 600 level admin # 定义sock位置及权限
defaultsoption http-keep-aliveoption forwardformaxconn 5000 # Haproxy支持的最大会话数,默认是100000retries 3 # 连接后端服务器失败的次数如果超过这里设置的值,haproxy会将对应的后端服务器标记为不可用mode httptimeout connect 300stimeout client 300stimeout server 300s
# 打开负载均衡的状态页面
frontend statsbind *:9999stats enablestats uri /haproxy-statusstats auth jingtian:123456# Prometheus metrics 的路径http-request use-service prometheus-exporter if { path /metrics }# 允许每秒通过haproxy的新会话数限制为 100 个。如果超过这个数值,额外的新会话将被延迟或拒绝rate-limit sessions 100
# 定义负载均衡配置
frontend javabind *:80mode httprate-limit sessions 100default_backend javaserver
backend javaserverbalance roundrobinserver web1 127.0.0.1:8080 checkserver web2 127.0.0.1:8080 check
# 定义负载均衡配置
frontend webbind *:81mode httprate-limit sessions 200default_backend webservers
backend webserversbalance roundrobin# 后端支持最大的并发连接数(会话数)fullconn 1000server web3 10.10.0.30:9090 checkserver web4 127.0.0.1:8080 check

在这里插入图片描述

3、启动Haproxy

systemctl enable haproxy.service --now

查看运行状态
在这里插入图片描述

我们看到haproxy开启了两个负载均衡组,分别为80和81两个端口号
一个haproxy可以有很多个负载均衡组
在这里插入图片描述

4、检查Haproxy的状态页面
http://10.10.0.31:9999/haproxy-status
刚进去需要先登录
在这里插入图片描述

5、检查Haproxy的metrics接口是否能暴露指标
http://10.10.0.31:9999/metrics
在这里插入图片描述

能访问这个metrics获取数据,依托于这个配置
在这里插入图片描述

Haproxy_181">2.2 配置Prometheus,将Haproxy纳入监控

1、编辑Prometheus配置文件,将Haproxy服务纳入监控
vim prometheus.yml

  - job_name: "haproxy"static_configs:- targets: ["jingtian02:9999"]

在这里插入图片描述

2、重新加载Prometheus配置文件

curl -X POST http://localhost:9090/-/reload

3、检查Prometheus的Status->Targets页面,验证Haproxy是否已经成功纳入监控中
在这里插入图片描述

prometheus查询中,输入haproxy,可以查到相关指标
在这里插入图片描述

并且可以查询到结果
在这里插入图片描述

Haproxy_213">2.3 Haproxy常用指标

对于 HAProxy,通常会使用 RED 方法,监控:请求速率(Rate)、请求失败数(Errors)、请求延迟(Duration)
但是Haproxy作为负载均衡,他又分为了前端和后端:
Frontend 在 HAProxy 中指的是客户端连接到的部分,它负责接收来⾃客户端的请求并将它们转发到相应的 backend 集群。
通常监控 frontend 以下信息:

新建连接的速率
每秒的请求速率
当前活动连接数
响应时间
会话错误和拒绝

Backend 是由一个或多个服务器组成的集群,这些服务器用于处理frontend转发过来的请求。通常监控 backend 以下信息:
会话数、当前活动连接
后端服务器的响应时间
后端服务器错误和超时等
后端服务器的健康状态(比如是否在线、是否繁忙等)

1、haporxy fronted 连接与会话相关指标
在这里插入图片描述

haproxy_frontend_limit_session_rate 这个是需要在配置haproxy的配置文件中配置的
在这里插入图片描述
在这里插入图片描述

案例1:查询最近5分钟,Haproxy前端新建连接数的速率

rate(haproxy_frontend_connections_total[5m])

在这里插入图片描述

案例2:查询最近5分钟,Haproxy前端当前平均活跃的会话数,占总会话数上限的比率。 gauge类型的数据求一段时间的平均数可以用avg_over_time
计算公式:( 当前活跃的会话数 / 会话数的限制 * 100 )

avg_over_time(haproxy_frontend_current_sessions[5m]) / haproxy_frontend_limit_sessions * 100

在这里插入图片描述

案例3:查询最近5分钟,haproxy前端平均每秒的新建最大的会话速率,占比总限制的新建会话比率。
计算公式:( 每秒新建的最大会话速率 / 每秒新建会话速率限制 * 100)

avg_over_time(haproxy_frontend_max_session_rate[5m]) / haproxy_frontend_limit_session_rate * 100

在这里插入图片描述

2、haporxy fronted http请求与响应相关指标
在这里插入图片描述

案例1:查询 HAProxy 前端最近1分钟的 HTTP 每秒请求速率。

rate (haproxy_frontend_http_requests_total[1m])

在这里插入图片描述

案例2:查询 HAProxy 前端最近1分钟,最⼤的新建请求数量。

max_over_time(haproxy_frontend_http_requests_rate_max[1m])

在这里插入图片描述

案例3:查询 HAProxy 前端最近1分钟,HTTP每秒的错误请求速率

rate(haproxy_frontend_request_errors_total[1m])

在这里插入图片描述

案例4:查询 最近5分钟,HTTP 响应错误(4xx 和 5xx)占总请求比率,计算公式:(4xx|5xx的响应码增长率 / 总的请求数 )
我们先看下响应状态码都是什么样的
在这里插入图片描述

然后看下4xx 5xx响应速率和最近5分钟请求总数
在这里插入图片描述

可以看到上面是多的一方,并且多了code,所以要去除code,并且使用功能group_left,哪边是多的一方,group_哪边
ignoring或group_left都必须放在 加减乘除 操作符的右侧

rate(haproxy_frontend_http_responses_total{code=~"4xx|5xx"}[5m])
/ ignoring(code)group_left
rate(haproxy_frontend_http_requests_total[5m]) * 100

在这里插入图片描述

3、HaproxyBackend 相关指标
在这里插入图片描述

后端限制最大会话数
在这里插入图片描述

案例1:计算最近5分钟,当前后端平均每秒的活跃的会话数,占总会话数限制的比率。
计算公式:( 当前并发活跃的会话数 / 最大限制的会话数 * 100 )

avg_over_time(haproxy_backend_current_sessions[5m]) / haproxy_backend_limit_sessions * 100

在这里插入图片描述

案例2:计算最近5分钟,后端4xx响应的错误率:计算公式:( 后端4xx响应数 / 后端总请求数 * 100 )

rate(haproxy_backend_http_responses_total{code="4xx"}[5m]) / ignoring(code) rate(haproxy_backend_http_requests_total[5m]) * 100

在这里插入图片描述

案例3:计算最近5分钟,后端5xx响应的错误率:计算公式:( 后端5xx响应数 / 后端总请求数 * 100%)

rate(haproxy_backend_http_responses_total{code="5xx"}[5m]) / ignoring(code) rate(haproxy_backend_http_requests_total[5m]) * 100

在这里插入图片描述

4、Haproxy监控状态相关指标
在这里插入图片描述

后端活跃的服务器数量
在这里插入图片描述

只有一个后端服务不是失败的,其他的都检测失败
在这里插入图片描述

案例1:查询Haroxy运行了多长时间,计算公式:( (当前时间 - haproxy运行时间) / 小时 )
time()得到的是当前的时间戳
在这里插入图片描述

(time() - haproxy_process_start_time_seconds ) / 3600

在这里插入图片描述

案例2:检查后端的活跃服务器小于1

haproxy_backend_active_servers < 1

在这里插入图片描述

案例3:查询Haproxy后端服务器是否有检测失败的

haproxy_server_check_failures_total == 1

在这里插入图片描述

Haproxy_436">2.4 Haproxy告警规则文件

1、编写告警规则文件

cat /etc/prometheus/rules/haproxy_rules.yml
groups:
- name: "Haproxy告警规则"rules:- alert: Haproxy前端活跃会话数过高expr: |avg_over_time(haproxy_frontend_current_sessions[5m])/haproxy_frontend_limit_sessions * 100 > 80for: 5mlabels:severity: warningannotations:summary: "实例:{{ $labels.instance }} Haproxy前端活跃会话数占限制比率过高"description: "Haproxy前端'{{ $labels.proxy }}' 活跃会话数占限制的会话数比率超过了80%,当前值为{{ $value }}%。"- alert: Haproxy前端新建会话速率过高expr: |avg_over_time(haproxy_frontend_max_session_rate[5m])/haproxy_frontend_limit_session_rate * 100 > 80for: 5mlabels:severity: warningannotations:summary: "实例:{{ $labels.instance }} Haproxy前端新建会话速率占限制比率过高"description: "Haproxy前端'{{ $labels.proxy }}' 每秒新建的会话速率占限制比率已经超过80%,当前值为{{ $value }}%。"- alert: Haproxy前端HTTP响应4xx\5xx错误率过高expr: |rate(haproxy_frontend_http_responses_total{code=~"4xx|5xx"}[5m])/ignoring(code)group_leftrate(haproxy_frontend_http_requests_total[5m]) * 100 > 20for: 5mlabels:severity: criticalannotations:summary: "实例:{{ $labels.instance }} Haproxy前端HTTP响应错误率过高"description: "Haproxy前端'{{ $labels.proxy }}' 的 {{ $labels.code }}状态码占总请求的比率已经超过20%,当前错误率为{{ $value }}%。"- alert: Haproxy后端活跃会话数占限制比率过高expr: |avg_over_time(haproxy_backend_current_sessions[5m])/haproxy_backend_limit_sessions * 100 > 80for: 5mlabels:severity: warningannotations:summary: "实例:{{ $labels.instance }} Haproxy后端活跃会话数占限制比率过高"description: "Haproxy后端'{{ $labels.proxy }}' 活跃会话数占总会话数限制的比率超过了80%,当前值为{{ $value }}%。"- alert: Haproxy后端4xx错误率过高expr: |rate(haproxy_backend_http_responses_total{code="4xx"}[5m])/ignoring(code) rate(haproxy_backend_http_requests_total[5m]) * 100> 10for: 5mlabels:severity: warningannotations:summary: "实例:{{ $labels.instance }} Haproxy后端4xx错误率过高 "description: "Haproxy后端'{{ $labels.proxy }}' 的4xx响应错误率超过了10%,当前错误率为{{ $value }}%。"- alert: Haproxy后端5xx错误率过高expr: |rate(haproxy_backend_http_responses_total{code="5xx"}[5m])/ignoring(code) rate(haproxy_backend_http_requests_total[5m]) * 100> 10for: 5mlabels:severity: criticalannotations:summary: "实例:{{ $labels.instance }} Haproxy后端5xx错误率过高 "description: "Haproxy后端'{{ $labels.proxy }}' 的5xx响应错误率超过了10%,当前错误率为{{ $value }}%。"- alert: Haproxy后端无活跃服务器expr: haproxy_backend_active_servers < 1for: 5mlabels:severity: criticalannotations:summary: "实例:{{ $labels.instance }} 后端无活跃服务器"description: "Haproxy '{{ $labels.proxy }}' 后端活跃服务器数量小于1,这意味着整个后端服务不可用,立即检查后端服务器状态。"- alert: Haproxy后端服务器检测失败expr: haproxy_server_check_failures_total == 1for: 5mlabels:severity: warningannotations:summary: "实例:{{ $labels.instance }} 后端服务器检测失败"description: "Haproxy '{{ $labels.proxy }}' 后端的 '{{ $labels.server }}' 实例检测失败,可能存在连接问题或服务不稳定。"

在这里插入图片描述

重新加载prometheus配置

curl -X POST http://localhost:9090/-/reload

查看告警
在这里插入图片描述

Haproxy_561">2.5 Grafana导入Haproxy图形

导入haproxy的Grafana模板。ID为 12693 这个模板提供了 HAProxy 性能和状态的图表,包括请求数、响应时间、错误计数等。

在Grafana 仪表盘-新建-导入
在这里插入图片描述

输入12693,点击加载
在这里插入图片描述

选择数据源prometheus,点击导入
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

如果想看下某个图形,表达的是什么数据,可以点击右上角三个点,点击编辑

在这里插入图片描述
在这里插入图片描述

可以看到PromQL语句
在这里插入图片描述


http://www.ppmy.cn/ops/152801.html

相关文章

【MySQL】 库的操作

欢迎拜访&#xff1a;雾里看山-CSDN博客 本篇主题&#xff1a;【MySQL】 库的操作 发布时间&#xff1a;2025.1.23 隶属专栏&#xff1a;MySQL 目录 库的创建语法使用 编码规则认识编码集查看数据库默认的编码集和校验集查看数据库支持的编码集和校验集指定编码创建数据库验证不…

【博客之星】2024年度总结

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;CSDN博客专家   &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01…

React基础

前言 &#xff08;2021年笔记&#xff09;补充记录 React基础 前言React讲义一、create-react-app二、关于React1、React的起源和发展2、React与传统MVC的关系3、React高性能的体现&#xff1a;虚拟DOM4、React的特点和优势 三、编写第一个react应用程序四、元素与组件1、函数…

Objective-C语言的安全开发

Objective-C语言的安全开发 引言 在当今的信息技术时代&#xff0c;软件的安全性已成为开发者必须重视的重点。随着移动互联网的蓬勃发展&#xff0c;iOS作为重要的移动操作系统&#xff0c;受到越来越多开发者的关注。而Objective-C作为iOS应用开发的主要语言之一&#xff0…

利用现有模型处理面部视频获取特征向量(3)

下一步在没有conda的ubuntu装miniconda3 mkdir -p ~/miniconda3 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3 rm ~/miniconda3/miniconda.shsource ~/m…

《从入门到精通:蓝桥杯编程大赛知识点全攻略》(五)-数的三次方根、机器人跳跃问题、四平方和

本博客将详细探讨如何通过二分查找算法来解决这几个经典问题。通过几个实际的例子&#xff0c;我们将展示如何在这些问题中灵活应用二分查找&#xff0c;优化计算过程&#xff0c;并在面对大数据量时保持高效性。 目录 前言 数的三次方根 算法思路 代码如下 机器人跳跃问题…

css动画水球图

由于echarts水球图动画会导致ios卡顿&#xff0c;所以纯css模拟 展示效果 组件 <template><div class"water-box"><div class"water"><div class"progress" :style"{ --newProgress: newProgress % }"><…

防火墙安全策略

目录 一.拓扑信息 二.需求分析 三.命令行详细配置信息 1.配置IP 2.交换机配置 3.修改安全区域 4.安全策略 四.web界面详细配置 1.配置IP和设置安全区域 2.交换机配置 3.安全策略 五.测试 一.拓扑信息 二.需求分析 1.VLAN 2属于办公区域&#xff1b;VLAN 3属于生…