【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
global
  maxconn 100000 # Haproxy支持最大的会话数,如果default没有配置则使用global
  # uid 99
  # gid 99
  user haproxy
  group haproxy
  daemon
  log 127.0.0.1 local2 info
  pidfile /var/lib/haproxy/haproxy.pid
  stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin # 定义sock位置及权限
defaults
  option http-keep-alive
  option forwardfor
  maxconn 5000 # Haproxy支持的最大会话数,默认是100000
  retries 3 # 连接后端服务器失败的次数如果超过这里设置的值,haproxy会将对应的后端服务器标记为不可用
  mode http
  timeout connect 300s
  timeout client 300s
  timeout server 300s
# 打开负载均衡的状态页面
frontend stats
  bind *:9999
  stats enable
  stats uri /haproxy-status
  stats auth jingtian:123456
 
  # Prometheus metrics 的路径
  http-request use-service prometheus-exporter if { path /metrics }
  # 允许每秒通过haproxy的新会话数限制为 100 个。如果超过这个数值,额外的新会话将被延迟或拒绝
  rate-limit sessions 100
# 定义负载均衡配置
frontend java
  bind *:80
  mode http
  rate-limit sessions 100
  default_backend javaserver
backend javaserver
  balance roundrobin
  server web1 127.0.0.1:8080 check
  server web2 127.0.0.1:8080 check
# 定义负载均衡配置
frontend web
  bind *:81
  mode http
  rate-limit sessions 200
  default_backend webservers
backend webservers
  balance roundrobin
  # 后端支持最大的并发连接数(会话数)
  fullconn 1000
  server web3 10.10.0.30:9090 check
  server 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 > 80
    for: 5m
    labels:
      severity: warning
    annotations:
      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 > 80
    for: 5m
    labels:
      severity: warning
    annotations:
      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_left
      rate(haproxy_frontend_http_requests_total[5m]) * 100 > 20
    for: 5m
    labels:
      severity: critical
    annotations:
      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 > 80
    for: 5m
    labels:
      severity: warning
    annotations:
      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> 10
    for: 5m
    labels:
      severity: warning
    annotations:
      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> 10
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "实例:{{ $labels.instance }} Haproxy后端5xx错误率过高 "
      description: "Haproxy后端'{{ $labels.proxy }}' 的5xx响应错误率超过了10%,当前错误率为{{ $value }}%。"

  - alert: Haproxy后端无活跃服务器
    expr: haproxy_backend_active_servers < 1
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "实例:{{ $labels.instance }} 后端无活跃服务器"
      description: "Haproxy '{{ $labels.proxy }}' 后端活跃服务器数量小于1,这意味着整个后端服务不可用,立即检查后端服务器状态。"
 
 
  - alert: Haproxy后端服务器检测失败
    expr: haproxy_server_check_failures_total == 1
    for: 5m
    labels:
      severity: warning
    annotations:
      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语句
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

s/jwt-decode.js?v=534c014e‘ vue3引入jwt-decode报错

安装 cnpm install jwt-js-decode 导入 import { jwtDecode } from jwt-js-decode; 使用 const decode jwtDecode(user_token)

使用LabVIEW的History功能实现队列数据的读取而不清空

在LabVIEW中&#xff0c;有多种方法可以读取队列中的数据而不清空它。使用 Dequeue Element 和 Enqueue Element 函数可以实现读取并重新插入数据回队列&#xff0c;但当需要处理大数据流或需要更动态的解决方案时&#xff0c;这种方法可能会变得繁琐。一个更高效的解决方案是利…

【Redis】Redis入门以及什么是分布式系统{Redis引入+分布式系统介绍}

文章目录 介绍redis的引入 分布式系统单机架构应用服务和数据库服务分离【负载均衡】引入更多的应用服务器节点 单机架构 分布式是什么 数据库分离和负载均衡 理解负载均衡 数据库读写分离 引入缓存 数据库分库分表 引入微服务 介绍 The open source, in-memory data store us…

线上内存泄漏排查思路

“内存泄漏”是开发者最害怕的问题之一&#xff0c;尤其是在高并发、高负载的线上环境中。它往往不易察觉&#xff0c;却能悄悄吞噬系统的性能&#xff0c;最终导致应用崩溃或响应变慢。你是否曾在项目上线后遇到过性能下降或宕机的问题&#xff0c;而问题根源竟然是内存泄漏&a…

【Redis】在ubuntu上安装Redis

文章目录 提权搜索软件包安装修改配置文件ip保护模式配置密码 重新启动服务器使用 redis 自带的客户端来连接服务器 提权 先切换到 root 用户,su 命令切换到 root. 搜索软件包 使用 apt 命令来搜索 redis 相关的软件包 apt search redis 安装 使用 apt 命令安装 redisapt …

人形机器人,自动驾驶“老炮”创业第二站

造一台人形机器人&#xff0c;或许正在成为2025年最炙手可热的事情。 从去年第四季度开始&#xff0c;伴随着大模型应用的深入&#xff0c;具身智能概念被点燃&#xff0c;其中最鲜明的一个特点是&#xff0c;大量自动驾驶大佬的转行加入。 随便说几个比较有分量的&#xff0…

《SwinIR:使用Swin-Transformer图像恢复》学习笔记

paper&#xff1a;2108.10257 GitHub&#xff1a;GitHub - JingyunLiang/SwinIR&#xff1a; SwinIR&#xff1a; 使用 Swin Transformer 进行图像修复 &#xff08;官方仓库&#xff09; 目录 摘要 1、Introduction 2、Related Work 2.1 图像修复 2.2 视觉Transformer…

力扣hot100-->滑动窗口、贪心

你好呀&#xff0c;欢迎来到 Dong雨 的技术小栈 &#x1f331; 在这里&#xff0c;我们一同探索代码的奥秘&#xff0c;感受技术的魅力 ✨。 &#x1f449; 我的小世界&#xff1a;Dong雨 &#x1f4cc; 分享我的学习旅程 &#x1f6e0;️ 提供贴心的实用工具 &#x1f4a1; 记…

Top 30的AI应用产品出海经验分享

榜单说明 本文基于对AI图片产品的分类和流量分析&#xff0c;旨在洞察AI图片应用的出海趋势。以下是分类和收录标准&#xff1a; 分类标准 将AI图片产品分为三大类&#xff1a;图片生成、图片编辑和平面设计。 图片生成&#xff1a;以基于大模型生成图片并展示结果&#xff0…

Hive之加载csv格式数据到hive

场景&#xff1a; 今天接了一个需求&#xff0c;将测试环境的hive数据导入到正式环境中。但是不需要整个流程的迁移&#xff0c;只需要迁移ads表 解决方案&#xff1a; 拿到这个需求首先想到两个方案&#xff1a; 1、将数据通过insert into语句导出&#xff0c;然后运行脚本 …

73,【5】BUUCTF WEB [网鼎杯 2020 玄武组]SSRFMe(未解出)

进入靶场 又是代码又是代码又是代码又是代码又是代码又是代码又是代码又是代码又是代码又是代码又是代码又是代码又是代码又是代码 <?php // 检查 URL 是否为内部 IP 地址 function check_inner_ip($url) {// 使用正则表达式检查 URL 格式是否以 http、https、gopher 或 d…

如何实现各种类型的进度条

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了浮动按钮相关的内容&#xff0c;,本章回中将介绍进度条相关的Widget,闲话休提&#xff0c;让我们一起Talk Flutter吧。 1 概念介绍 进度条是常用的组件之一&#xff0c;它主要用来显示某种动作的完成进度。Flu…

复位信号的同步与释放(同步复位、异步复位、异步复位同步释放)

文章目录 背景前言一、复位信号的同步与释放1.1 同步复位1.1.1 综述1.1.2 优缺点 1.2 recovery time和removal time1.3 异步复位1.3.1 综述1.3.2 优缺点 1.4 同步复位 与 异步复位1.5 异步复位、同步释放1.5.1 总述1.5.2 机理1.5.3 复位网络 二、思考与补充2.1 复…

欢迎来到linux大陆!本次试炼地点——秩序“权限”圣殿

一篇关于权限的学习笔记~ 1、权限的概念2、权限管理2.1 角色的不同分类2.2 文件权限原理剖析2.2.1 熟悉指令2.2.2 普通用户只能更改自己的文件权限&#xff0c;但是sudo提权可以更改其他文件权限2.2.3 没有权限&#xff0c;系统拒绝访问2.2.4 权限匹配2.2.5 root用户不受任何限…

Spring 定时任务:@Scheduled 注解四大参数解析

本文主要介绍了在 Spring 框架中使用Scheduled注解实现定时任务的方法&#xff0c;重点讲解了fixedRate、fixedDelay、cron和initialDelay这四个参数的用法&#xff0c;并通过实例代码进行了详细说明。 1. fixedRate 参数 参数含义 fixedRate指定任务固定时间间隔执行。如设…

使用频谱仪:测量宽带信号的功率

marker默认只测一个频率点的功率&#xff0c;当测试宽带信号&#xff0c;如20MHz&#xff0c;不能直接使用marker来测量功率。 有2种方式&#xff1a; 宽带信号需要使用Measure-> channel power 来测量。 meas setup integ BW&#xff1a;500mhz Freq&#xff1a;中心频…

postman请求参数化

postman界面介绍 一、使用环境变量(Environment Variables)进行参数化 1、在请求中使用环境变量 在请求的url、请求头(Headers)、请求体(Body)等部分都可以使用环境变量。 URL 部分示例 点击 Postman 界面右上角的 “眼睛” 图标(Environment Quick Look)打开环境管理…

优选算法——哈希表

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

【C语言学习】:C语言补充:转义字符,<<,>>操作符,IDE

&#x1f381;个人主页&#xff1a;我们的五年https://blog.csdn.net/djdjiejsn?typeblog &#x1f50d;系列专栏&#xff1a;C课程学习https://blog.csdn.net/djdjiejsn/category_12617142.html &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 C语言学…

Cesium特效——城市白模的科技动效的各种效果

最终效果图如下&#xff1a; 实现方法&#xff1a; 步骤一&#xff1a;使用cesiumlib生产白模&#xff0c;格式为3dtiles 注意事项&#xff1a;采用其他方式可能导致白模贴地&#xff0c;从而导致不能实现该效果&#xff0c;例如把步骤二的服务地址改为Cesium Sandcastle 里的…