首页 > 其他分享 >Prometheus监控之Haproxy

Prometheus监控之Haproxy

时间:2024-09-07 16:23:34浏览次数:13  
标签:Haproxy haproxy frontend 5m Prometheus 监控 http backend

1 Haproxy监控方式

在haproxy 2.0版本之前,prometheus提供了haproxy_exporter来对haproxy进行监控,haproxy从2.0版本开始不再需要使用haproxy_exporter进行监控,从haproxy 2.0 版本开始,HAProxy内置了对Prometheus的⽀持。这意味着HAProxy能够直接提供兼容Prometheus的指标格式,⽆需依赖任何额外的exporter 。(安装haproxy、然后修改stats,配置对外输出metrics接⼝)

1.1 安装并配置Haproxy

1.1.1 安装依赖环境

yum install gcc readline-devel openssl-devel systemd-devel -y

1.1.2 安装lua脚本

wget http://www.lua.org/ftp/lua-5.4.3.tar.gz
tar xf lua-5.4.3.tar.gz -C /usr/local/
cd /usr/local/lua-5.4.3/
make linux
make linux test
ln -s /usr/local/lua-5.4.3/ /usr/local/lua

1.1.3 编译Haproxy

下载地址
https://www.haproxy.org/download/2.4/src/
wget https://www.haproxy.org/download/2.4/src/haproxy-2.4.22.tar.gz

解压安装
tar xf haproxy-2.4.22.tar.gz
cd haproxy-2.4.22/
make ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 \
USE_ZLIB=1 USE_SYSTEMD=1 USE_LUA=1 \
USE_PROMEX=1 \
LUA_INC=/usr/local/lua/src LUA_LIB=/usr/local/lua/src
#从2.0.0版开始,HAProxy包括一个Prometheus导出模块,可在构建时将其构建到二进制文件中。 
#对于HAProxy 2.4及更高版本,在make命令中传递USE_PROMEX标志:
make install PREFIX=/usr/local/haproxy-2.4.22

ln -s /usr/local/haproxy-2.4.22/ /usr/local/haproxy
mkdir -p /var/lib/haproxy

1.1.4 创建启动文件

vim /usr/lib/systemd/system/haproxy24.service
[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target

[Service]
ExecStartPre=/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c -q
ExecStart=/usr/local/haproxy/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /var/lib/haproxy/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target

1.1.5 配置Haproxy的stats功能

mkdir /etc/haproxy/ -p
vim /etc/haproxy/haproxy.cfg
global
    log         127.0.0.1 local2
    maxconn 100000 # Haproxy支持最大的会话数,如果default没有配置则使用global
    chroot      /var/lib/haproxy
    #user        haproxy
    #group       haproxy
    daemon
    stats socket /var/lib/haproxy/stats mode 600 level admin # 定义sock位置及权限
defaults
    mode                    http
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    maxconn                 3000
# 打开负载均衡的状态页面
frontend stats
    bind *:9999
    stats enable
    stats uri /haproxy-status
    stats auth qingchen:123456
    # Prometheus metrics 的路径
    http-request use-service prometheus-exporter if { path /metrics }
    # 允许每秒通过haproxy的新会话数限制为 100 个。如果超过这个数值,额外的新会话将被延迟或拒绝
    rate-limit sessions 100
# 定义负载均衡配置
frontend java
    bind *:8888
    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 *:8889
    mode http
    rate-limit sessions 200
    default_backend webservers
backend webservers
    balance roundrobin
    # 后端支持最大的并发连接数(会话数)
    fullconn 1000
    server web3 127.0.0.1:8080 check
    server web4 127.0.0.1:8080 check

1.1.6 启动Haproxy

systemctl daemon-reload
systemctl start haproxy24

1.1.7 检查Haproxy的状态⻚⾯

http://192.168.137.131:9999/haproxy-status

Prometheus监控之Haproxy_HTTP

1.1.8 metrics接⼝暴露指标

Prometheus监控之Haproxy_lua_02

1.2 配置Prometheus

1、编辑Prometheus配置⽂件,将haproxy服务纳⼊监控
  - job_name: "haproxy"
    metrics_path: "/metrics"
    static_configs:
    - targets: ["192.168.137.131:9999"]

2、重新加载Prometheus配置⽂件 
curl -X POST http://192.168.137.131:9090/-/reload

1.3 Haproxy常用指标

对于(Rate)、请求失败数(Errors)、请求延迟(Duration)但是Haproxy作为负载均衡,他⼜分为了前端和后端:

Frontend 在 HAProxy 中指的是客户端连接到的部分,它负责接收来⾃客户端的请求并将它们转发到相应的 backend 集群。通常监控 frontend 以下信息:

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

Backend 是由⼀个或多个服务器组成的集群,这些服务器⽤于处理frontend转发过来的请求。通常监控 backend 以下信息:

  • 会话数、当前活动连接
  • 后端服务器的响应时间
  • 后端服务器错误和超时等
  • 后端服务器的健康状态(⽐如是否在线、是否繁忙等)

1.3.1 haporxy fronted连接与会话相关指标

指标名称

指标类型

指标含义

haproxy_frontend_ connections_total

counter


HAProxy 前端的新建连接总数。

haproxy_frontend_connections_rate_max

gauge

HaPorxy 前端每秒最⼤新建连接速率。

haproxy_frontend_sessions_total

gauge

HAProxy 前端接受的总会话数。

haproxy_frontend_current_sessions

gauge

HAProxy 前端当前活跃会话的数量。

haproxy_frontend_max_sessions

gauge

HAProxy当前最⼤并发会话数量。

haproxy_frontend_limit_sessions


gauge

HaProxy 前端会话数上限。这个值是静态配的,⽤来防⽌过载。在default字段下配置 maxconn 参数

haproxy_frontend_max_session_rate

gauge

HaProxy 前端每秒新建最⼤的会话速率。

haproxy_frontend_limit_session_rate


gauge

HaProxy 前端每秒新建会话速率上限。在frontend⾥⾯通过添加 rate-limit sessions参数进⾏配置

案例1:查询最近5分钟,Haproxy前端新建连接数的速率 
rate(haproxy_frontend_connections_total[5m]) 

案例2:查询最近5分钟,Haproxy前端当前平均活跃的会话数,占⽐的总限制的会话数⽐率。
计算公式:( 当前活跃的会话数 / 会话数的限制 * 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 

1.3.2 haporxy fronted http请求与响应相关指标

指标名称

指标类型

指标含义

haproxy_frontend_http_requests_total

counter


HAProxy 前端接收的 HTTP 请求的总数(仅统计有效的)。

haproxy_frontend_http_requests_rate_max

gauge

HAProxy 前端每秒最⼤新建的 HTTP 请求速率。


haproxy_frontend_request_errors_total

counter


HAProxy 前端接收到的请求错误总数,可能包括格式错误或协议错误等请求。

haproxy_frontend_http_responses_total

counter


HAProxy 前端发送的 HTTP 响应,按照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:查询 HTTP 响应错误(4xx 和 5xx)占总请求⽐率,
计算公式:(4xx|5xx的响应码增⻓率 / 总的请求数)
rate(haproxy_frontend_http_responses_total{code=~"4xx|5xx"}[5m]) 
/ ignoring(code) 
group_left 
rate(haproxy_frontend_http_requests_total[5m]) * 100 

1.3.3 HaproxyBackend相关指标

指标名称

指标类型

指标含义

haproxy_backend_sessions_total

counter


HAProxy 后端处理的总会话数,包括新连接的会话。

haproxy_backend_current_sessions

gauge

HAProxy 后端当前活跃的会话并发数量。

haproxy_backend_max_sessions

gauge

HAProxy 后端同时处理过的最⼤会话数量。

haproxy_backend_limit_sessions


gauge

HAProxy 后端限制最⼤会话限制,默认是500,可以通过配置fullconn number来修改这个限制。

haproxy_backend_http_requests_total

counter


HAProxy 后端接收到的 HTTP 总请求数。

haproxy_backend_http_responses_total

counter


HAProxy 后端的 HTTP 响应的数量,包括成功响应和错误响应。

案例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(cod 
e) 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

1.3.4 Haproxy监控状态相关指标

指标名称

指标类型

指标含义

haproxy_process_start_time_seconds

counter


HaProxy 进程的启动时间,可以⽤它来确定HAProxy 运⾏了多久。

haproxy_backend_active_servers


gauge

HaProxy 当前活跃的后端服务器数量,如果为0则表示整个后端服务器全部不可⽤。

haproxy_server_check_failures_total

counter


HaProxy 后端服务器健康检查失败的实例,1表示检测失败、0表示没有失败

案例1:查询Haroxy运⾏了多⻓时间,
计算公式:( (当前时间 - haproxy运⾏时⻓) / ⼩时 )
(time() - haproxy_process_start_time_seconds ) / 3600 

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

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

1.4 Haproxy告警规则文件

1.4.1 告警规则⽂件

vim /app/module/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 }}' 实例检测失败,可能存在连接问题或服务不稳定。"

1.4.2 检查rules语法

/app/module/prometheus/promtool check rules /app/module/prometheus/rules/haproxy_rules.yml

1.4.3 重新加载Prometheus

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

1.4.4 验证告警规则

Prometheus监控之Haproxy_后端服务_03

1.5 导⼊Haproxy图形

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

Prometheus监控之Haproxy_HTTP_04

标签:Haproxy,haproxy,frontend,5m,Prometheus,监控,http,backend
From: https://blog.51cto.com/u_13236892/11945210

相关文章

  • prometheus学习笔记之kube-state-metrics
    一、kube-state-metrics简介Kube-state-metrics:通过监听APIServer生成有关资源对象的状态指标,比如Deployment、Node、Pod,需要注意的是kube-state-metrics只是简单的提供一个metrics数据,并不会存储这些指标数据,所以我们可以使用Prometheus来抓取这些数据然后存储,......
  • shell脚本监控一个进程号,进程号没有就输出error
    你可以使用一个简单的Shell脚本来监控进程号(PID),如果进程不存在则输出error。以下是一个示例脚本:#!/bin/bash#输入要监控的进程号pid=$1#检查进程是否存在ifps-p$pid>/dev/nullthenecho"Process$pidisrunning."elseecho"error:Process$pid......
  • 厨师帽识别 后厨厨师帽佩戴情况实时监控-明厨亮灶
    厨师帽识别后厨厨师帽佩戴情况实时监控对于各种厨房工作自然环境下的安全健康难题,全自动识别餐厅厨房工作人员的厨师帽是不是佩戴,是否正确佩戴,是不是有耗子/猫/狗等小动物侵入,外来人员侵入后厨等。适用遍布在全国各地的餐厅厨房集中化实时监控管理方法,能够处理厨房卫生监管盲区大......
  • 加油站智能视频监控系统
    加油站智能视频监控系统赋能传统监控设备,主要对于加油站抽烟、手机、用火、浓烟、卸油情况下的静电释放时长、操作人员值勤、消防灭火器置放,立即将操作错误推至省部级应急平台。加油站智能视频监控系统可以对加油站监控范围内的加油区和卸油区、抽烟、手机、用火、浓烟等异常状态......
  • Linux 性能优化(网络、磁盘、内存、日志监控)
    1、CPU性能监控1.2、平均负载基础平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和CPU使用率并没有直接关系。平均负载其实就是平均活跃进程数。平均活跃进程数,直观上的理解就是单位时间内的活跃进程数。查看cpu个数:grep'modelnam......
  • JAVA线程池监控以及动态调整线程池
    1背景Java线程池源码分析 里虽然介绍了线程池的核心配置(核心线程数、最大线程数和队列大小)该如何配置,但是实际上业界也没有一个统一的标准。虽然有些所谓的"公式",但是不同的业务场景复杂多变,配置原则也不尽相同。从实际经验来看,IO密集型、CPU密集型应用在线程配置上就比较悬殊,因......
  • 企业邮箱监控设置指南:企业邮箱怎么设置邮箱监控(企业邮箱外发邮件如何监控)?
    邮件监控成为了一项重要的信息安全措施。通过合理的邮箱监控设置,企业不仅能有效防止信息泄露,还能提升工作效率和管理透明度。本文将为您详细介绍企业邮箱如何设置邮箱监控,特别是针对外发邮件的监控方法。一、选择合适的邮件监控工具首先,企业需要根据自身需求和预算选择合......
  • lvs、nginx、haproxy区别和使用场
    LVS(LinuxVirtualServer)、Nginx和HAProxy是三种常用的负载均衡技术,各自具有不同的特性和适用场景。以下是它们的区别和使用场景:1.LVS(LinuxVirtualServer)定义:LVS是一种基于内核的负载均衡解决方案,主要用于提供高可用性和高性能的TCP/UDP负载均衡。特点:层次:工作在......
  • AS-V1000视频监控平台web客户端播放实时视频和视频录像时,有个别画面出现卡顿和花屏问
    目录一、问题背景二、解决过程  1、检查平台进程  2、检查服务器CPU内存的使用情况  ①top/htop命令  ②vmstat命令  ③free命令  ④sar命令  3、检查网络带宽情况  三、最终效果一、问题背景  客户在公网测试服务器中的视......
  • Prometheus Alertmanager设置与告警规则配置详解
    PrometheusAlertmanager设置与告警规则配置详解Prometheus是一个开源的监控和告警系统,其设计理念是通过时间序列数据库存储指标数据,并通过多维数据模型和查询语言进行数据分析。Prometheus的告警系统由两部分组成:Prometheus服务器本身和Alertmanager。Alertmanager......