【Prometheus】Prometheus如何监控Haproxy

在这里插入图片描述

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

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

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

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

在这里插入图片描述

文章目录

  • Prometheus如何监控Haproxy
    • 1、监控案例介绍
      • 1.1 监控场景描述
      • 1.2 监控环境规划
    • 2、Prometheus监控Haproxy
      • 2.1 安装并配置Haproxy
      • 2.2 配置Prometheus,将Haproxy纳入监控
      • 2.3 Haproxy常用指标
      • 2.4 Haproxy告警规则文件
      • 2.5 Grafana导入Haproxy图形

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 监控环境规划

在这里插入图片描述

2、Prometheus监控Haproxy

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

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获取数据,依托于这个配置
在这里插入图片描述

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,可以查到相关指标
在这里插入图片描述

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

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

在这里插入图片描述

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

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

2.5 Grafana导入Haproxy图形

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

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

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

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/6219.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

仅仅4M!windows系统适用,免费无限制使用!

软件介绍 在日常生活里&#xff0c;我们经常会碰到电脑运行迟缓、网速卡顿的现象&#xff0c;却又不清楚是哪个程序在占用过多资源。这种时候&#xff0c;一款能实时监测网络和系统状态的工具就变得非常关键了。今天呢&#xff0c;就给大家介绍一个小巧又实用的监控工具——「T…

计算机毕业设计hadoop+spark+hive图书推荐系统 豆瓣图书数据分析可视化大屏 豆瓣图书爬虫 知识图谱 图书大数据 大数据毕业设计 机器学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

Harmony Next 支持创建分身

应用分身能实现在一个设备上安装多个相同的应用&#xff0c;实现多个账号同时登录使用和运行并且互不影响。主要应用场景有社交账号双开、游戏大小号双开等&#xff0c;无需账号切换&#xff0c;从而省去频繁登录的繁琐。 Harmony Next 很容易就能让 App 支持创建分身。 官方文…

Linux下 date时间应该与系统的 RTC(硬件时钟)同步

发现客户服务器时间与真实时间不同&#xff0c;并且服务器没有网络。 解决办法&#xff1a;时间应该与系统的 RTC&#xff08;硬件时钟&#xff09;同步 手动设置系统时间 使用 date 命令将系统时间设置为 2025年01月21日 14:12:00&#xff1a; sudo date --set"2025-01…

XX污水处理厂基于RK3576核心板应用(四)——人员倒地智能识别系统方案

通过 SAIL-RK3576核心板 支撑的 人员倒地识别系统&#xff0c;污水处理厂能够在广阔、复杂的区域内实时监控人员安全&#xff0c;实现意外倒地等事故的秒级响应与干预。搭配多元人形动态监测机制&#xff0c;还可进一步拓展对其他异常动作或不安全行为的识别&#xff0c;持续保…

【IEEE Fellow 主讲报告| EI检索稳定】第五届机器学习与智能系统工程国际学术会议(MLISE 2025)

重要信息 会议时间地点&#xff1a;2025年6月13-15日 中国深圳 会议官网&#xff1a;http://mlise.org EI Compendex/Scopus稳定检索 会议简介 第五届机器学习与智能系统工程国际学术会议将于6月13-15日在中国深圳隆重召开。本次会议旨在搭建一个顶尖的学术交流平台&#xf…

css粘性定位超出指定宽度失效问题

展示效果 解决办法&#xff1a;外层容器添加display:grid即可 完整代码 <template><div class"box"><div class"line" v-for"items in 10"><div class"item" v-for"item in 8">drgg</div>&…

随机变量的变量替换——归一化流和直方图规定化的数学基础

变量替换是一种在统计学和数学中广泛应用的技术&#xff0c;它通过定义新的变量来简化问题&#xff0c;使得原本复杂的随机变量变得更加容易分析。 变量替换的公式&#xff0c;用于将一个随机变量 X X X 的概率密度函数 f X f_X fX​ 转换为其经过函数 g g g 变换后的随机变…

Scrapy之一个item包含多级页面的处理方案

目标 在实际开发过程中&#xff0c;我们所需要的数据往往需要通过多个页面的数据汇总得到&#xff0c;通过列表获取到的数据只有简单的介绍。站在Scrapy框架的角度来看&#xff0c;实际上就是考虑如何处理一个item包含多级页面数据的问题。本文将以获取叶子猪网站的手游排行榜及…

应用层协议 HTTP 讲解实战:从0实现HTTP 服务器

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 一&#xff1a;&#x1f525; HTTP 协议 &#x1f98b; 认识 URL&#x1f98b; urlencode 和 urldecode 二&#xff1a;&#x1f525; HTTP 协议请求与响应格式 &#x1f98b; HTTP 请求…

Ansys Motor-CAD:IPM 电机实验室 - 扭矩速度曲线

各位电动机迷们&#xff0c;大家好&#xff1a; 在本博客中&#xff0c;我讨论了如何使用 Ansys Motor-CAD 通过 LAB 模块获取扭矩速度曲线。使用每安培最大扭矩电机控制策略&#xff0c;并涵盖恒定扭矩区域和恒定功率、磁通减弱区域。分析了高转子速度如何影响功率输出。 模型…

IPhone16 Pro 设备详情

目录 产品宣传图内部图——前内部图——后设备详细信息 产品宣传图 内部图——前 内部图——后 设备详细信息 信息收集于HubWeb.cn

SQL注入漏洞之基础数据类型注入 字符 数字 搜索 XX 以及靶场实例哟

目录 基础数据类型SQL注入 字符类型注入 单引号双引号解释 案例练习: 数字类型注入 案例 搜索性注入: 案例 XX性注入: 语句 案例 基础SQL注入类型分类 基础数据类型SQL注入 字符类型注入 xxx or 11 # select id,email from member where usernamexx or 11 # --…

【Elasticsearch】腾讯云安装Elasticsearch

Elasticsearch 认识Elasticsearch安装Elasticsearch安装Kibana安装IK分词器分词器的作用是什么&#xff1f;IK分词器有几种模式&#xff1f;IK分词器如何拓展词条&#xff1f;如何停用词条&#xff1f; 认识Elasticsearch Elasticsearch的官方网站如下 Elasticsearch官网 Ela…

【Unity】 HTFramework框架(五十九)快速开发编辑器工具(Assembly Viewer + ILSpy)

更新日期&#xff1a;2025年1月23日。 Github源码&#xff1a;[点我获取源码] Gitee源码&#xff1a;[点我获取源码] 索引 开发编辑器工具MouseRayTarget焦点视角Collider线框Assembly Viewer搜索程序集ILSpy反编译程序集搜索GizmosElement类找到Gizmos菜单找到Gizmos窗口分析A…

计算机网络之网络层

本文章目录结构出自于《王道计算机考研 计算机网络_哔哩哔哩_bilibili》 03 网络层 在网上看到其他人做了相关笔记&#xff0c;就不再多余写了&#xff0c;直接参考着学习吧。 1 详解网络层-网络层概述和编址【王道计算机网络笔记】_wx63088f6683f8f的技术博客_51CTO博客 2 …

Geek Uninstaller,绿色免安装轻量的应用卸载工具!

软件介绍 链接 一个轻量级拥有简洁交互界面、快速卸载电脑安装程序的工具。可快速扫描删除残余文件和注册表&#xff0c;对顽固和损坏的程序可执行强制删除、独立页面管理卸载系统Microsoft Store应用、快速打开程序安装文件夹、快速打开编辑程序注册表位置、将安装程序列表导…

解释 RESTful API,以及如何使用它构建 web 应用程序

RESTful API是一种设计和构建Web服务的架构风格&#xff0c;它遵循一组规范和约定&#xff0c;使客户端能够通过HTTP协议进行与服务器的通信&#xff0c;并进行资源的创建、读取、更新和删除操作。 REST&#xff08;Representational State Transfer&#xff09;表示资源的状态…

工业“MCU+AI”

随着工业4.0的推进&#xff0c;传统工业设备正向智能化和自动化方向转型。这要求设备具备更高的算力、更强的实时处理能力以及支持AI算法的能力&#xff0c;以应对工业机器人、电机控制、预测性维护等复杂应用场景。 近年来越来越多的芯片厂商纷纷推出工业“MCUAI”产品&#…

优选算法——哈希表

目录 1. 哈希表简介 2. 两数之和 3. 判定是否为字符重排 4. 存在重复元素 5. 字母异位词分组 1. 哈希表简介 2. 两数之和 题目链接&#xff1a;1. 两数之和 - 力扣&#xff08;LeetCode&#xff09; 题目展示&#xff1a; 题目分析&#xff1a; 大家来看上面的图&…