HAProxy 可观测性最佳实践

HAProxy 简介

HAProxy(High Availability Proxy)是一款广泛使用的高性能负载均衡器,支持 TCP 和 HTTP 协议,提供高可用性、负载均衡和代理服务。它特别适用于负载较大的 Web 站点,能够支持数以万计的并发连接,并且可以简单安全地整合到现有架构中。可观测性可以帮助快速定位和解决 HAProxy 及其后端服务的问题。HAProxy 2.0 及以上版本提供了完善的指标暴露体系,可以把指标暴露到指定端口,然后由 Prometheus 进行采集。

观测云

观测云是一款专为 IT 工程师打造的全链路可观测产品,它集成了基础设施监控、应用程序性能监控和日志管理,为整个技术栈提供实时可观察性。这款产品能够帮助工程师全面了解端到端的用户体验追踪,了解应用内函数的每一次调用,以及全面监控云时代的基础设施。此外,观测云还具备快速发现系统安全风险的能力,为数字化时代提供安全保障。观测云的 DataKit 拥有 prom 采集器,可以取代 Prometheus 采集 HAProxy 指标,然后通过仪表板和监控器实时掌握 HAProxy 的运行情况。

前置条件

  • Centos7.9 主机 192.168.0.2192.168.0.3
  • 192.168.0.2 安装 Docker,Docker Compose
  • 192.168.0.2192.168.0.3 安装 Nginx,端口 80(可以使用其它代理服务)

部署 DataKit

DataKit 是一个开源的、跨平台的数据收集和监控工具,由观测云开发并维护。它旨在帮助用户收集、处理和分析各种数据源,如日志、指标和事件,以便进行有效的监控和故障排查。DataKit 支持多种数据输入和输出格式,可以轻松集成到现有的监控系统中。

登录观测云控制台,在「集成」 - 「DataKit」选择对应安装方式,当前采用 Linux 主机部署 DataKit。

复制第 2 步中的安装命令,在 192.168.0.2 主机上执行。

采集步骤

1、部署 HAProxy

HAProxy 部署在 192.168.0.2 主机上,创建 /data/haproxy/haproxy.cfg 文件,其中日志输出到 stdout,负载配置的是前置条件中的 Nginx,指标暴露在 8405 端口,backend 配置的是前置条件中的 Nginx。

globallog stdout format raw local0 info maxconn 4000daemondefaultsmode        tcplog        globaloption      tcplogoption      dontlognulloption      http-server-closeoption      redispatchretries                     3timeout     http-request    10stimeout     queue           1mtimeout     connect                 10stimeout     client          1mtimeout     server          1mtimeout     http-keep-alive 10stimeout     check           10smaxconn                     3000frontend prometheusbind *:8405mode httphttp-request use-service prometheus-exporter if { path /metrics }no log 
frontend frontend_webdescription "frontend frontend_web"bind  :8080default_backend webservers 
backend webservers balance roundrobinserver httpA 192.168.0.2:80 check inter 500 rise 3 fall 2 weight 1server httpB 192.168.0.3:80 check inter 1500 rise 3 fall 2 weight 1

创建 /data/haproxy/docker-compose.yaml 文件。

version: '3.8'
services:haproxy:image: haproxy:3.1.6container_name: haproxyvolumes:- ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfgports:- 8080:8080- 8405:8405logging:driver: "json-file"  options:max-size: "10m"   max-file: "3" networks:- haproxy-networknetworks:haproxy-network:driver: bridge         

启动 HAProxy。

docker-compose up -d

访问 192.168.0.2:8080 产生负载调用。

2、指标采集

登录 192.168.0.2,执行如下操作开通采集器。

cd /usr/local/datakit/conf.d/prom
cp prom.conf.sample haproxy.conf

修改 urls 和 source。

重启 DataKit。

datakit service -R

在「指标」 - 「指标管理」中能查看到采集的 haproxy 指标。

3、日志采集

Docker Compose 部署的 HAProxy,日志输出到了 stdout,DataKit 容器采集器默认采集的 stdout 日志,无需再配置。

关键指标

在 HAProxy 中,监控 Frontend(前端)、Backend(后端)、Server(服务器)的常用指标对于性能优化。故障排查和容量规划至关重要。

Frontend 关键指标
指标名称描述类型
frontend_current_sessions当前在前端活跃的会话数量,会随会话的建立和结束动态变化Gauge
frontend_limit_sessions前端允许的最大会话数量,由配置文件中的 maxconn 参数决定Gauge
frontend_connections_total自 HAProxy 工作进程启动以来,前端接收的总连接数Counter
frontend_internal_errors_total自 HAProxy 进程启动以来,前端发生的内部错误总数Counter
frontend_bytes_in_total自 HAProxy 进程启动以来,前端接收的总字节数Counter
frontend_bytes_out_total自 HAProxy 进程启动以来,前端发送的总字节数Counter
frontend_intercepted_requests_total自 HAProxy 进程启动以来,前端拦截的 HTTP 请求总数Counter
Backend 关键指标
指标名称描述类型
backend_bytes_in_total自 HAProxy 进程启动以来,后端接收的总字节数Counter
backend_bytes_out_total自 HAProxy 进程启动以来,后端发送的总字节数Counter
backend_internal_errors_total自 HAProxy 进程启动以来,后端发生的内部错误总数Counter
backend_response_errors_total自 HAProxy 工作进程启动以来,后端返回的无效响应总数Counter
backend_current_queue当前在后端队列中等待处理的请求数量Gauge
backend_max_queue自 HAProxy 进程启动以来,后端队列中曾经达到的最大请求数量Gauge
backend_loadbalanced_total自 HAProxy 进程启动以来,后端负载均衡器成功分配到后端服务器的请求数量Counter
backend_max_response_time_seconds后端服务器响应请求所花费的最大时间(单位:秒)Gauge
backend_current_sessions当前在后端活跃的会话数量Gauge
backend_max_sessions自 HAProxy 进程启动以来,后端遇到的最大并发会话数Gauge
backend_sessions_total自 HAProxy 进程启动以来,后端处理的总会话数Counter
Server 关键指标
指标名称描述类型
server_check_failures_total自 HAProxy 工作进程启动以来,后端服务器健康检查失败的总次数Counter
server_connection_errors_total自 HAProxy 工作进程启动以来,后端服务器连接失败的总次数Counter
server_aborts_total自 HAProxy 工作进程启动以来,后端服务器主动中断连接的总次数Counter
server_bytes_in_total自 HAProxy 工作进程启动以来,某个特定后端服务器接收的总字节数Counter
server_bytes_out_total自 HAProxy 工作进程启动以来,某个特定后端服务器发送的总字节数Counter
server_sessions_total自 HAProxy 工作进程启动以来,某个特定后端服务器处理的总会话数Counter
server_connection_attempts_total自 HAProxy 工作进程启动以来,后端服务器的连接尝试次数总和Counter
server_connection_reuses_total自 HAProxy 工作进程启动以来,某个特定后端服务器的连接重用次数总和Counter
server_weight定义后端服务器的权重,权重越高,分配到该服务器的请求就越多配置参数

场景视图

登录观测云控制台,点击「场景」 -「新建仪表板」,输入 “haproxy”, 选择 “HAProxy 监控视图”,点击 “确定” 即可添加视图。

监控器(告警)

后端服务器检测失败

简要描述:后端服务检测失败触发告警。

后端活跃服务器数量小于1

简要描述:后端活跃服务器数量小于 1 触发告警。

前端 http 响应 4xx 错误率过高

简要描述:前端 http 响应 4消息错误率过高触发告警。

总结

HAProxy 通常用于高可用性场景,可观测性可以确保在出现问题时能够及时响应,减少停机时间。通过收集和分析 HAProxy 的指标(如连接数、响应时间、吞吐量等),可以实时监控其性能,确保系统运行在最佳状态。

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

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

相关文章

增强LangChain交互体验:消息历史(记忆)功能详解

背景 在构建聊天机器人时,将对话状态传入和传出链至关重要。 LangGraph 实现了内置的持久层,允许链状态自动持久化在内存或外部后端(如 SQLite、Postgres 或 Redis)中。在本文我们将演示如何通过将任意 LangChain runnables 包装在最小的 LangGraph 应用程序中来添加持久性…

EasyRTC音视频实时通话助力微信小程序:打造低延迟、高可靠的VoIP端到端呼叫解决方案

一、方案概述​ 在数字化通信浪潮下,端到端实时音视频能力成为刚需。依托庞大用户生态的微信小程序,是实现此类功能的优质载体。基于WebRTC的EasyRTC音视频SDK,为小程序VoIP呼叫提供轻量化解决方案,通过技术优化实现低延迟通信&a…

WebVm:无需安装,一款可以在浏览器运行的 Linux 来了

WebVM 是一款可以在浏览器中运行的Linux虚拟机。不是那种HTMLJavaScript模拟的UI,完全通过HTML5/WebAssembly技术实现客户端运行。通过集成CheerpX虚拟化引擎,可直接在浏览器中运行未经修改的Debian系统。 Stars 数13054Forks 数2398 主要特点 完整 Lin…

CesiumInstancedMesh 实例

CesiumInstancedMesh 实例 import * as Cesium from cesium;// Three.js 风格的 InstancedMesh 类, https://threejs.org/docs/#api/en/objects/InstancedMesh export class CesiumInstancedMesh {/*** Creates an instance of InstancedMesh.** param {Cesium.Geometry} geom…

创建型模式之Abstract Factory(抽象工厂)

创建型模式之Abstract Factory(抽象工厂) 摘要: 本文介绍了抽象工厂模式(Abstract Factory),它是一种创建型设计模式,提供了一种创建一系列相关对象的接口而无需指定具体类。文章通过手机工厂示…

多卡训练核心技术详解

多卡训练核心技术详解 多卡训练 主要围绕分布式环境初始化、模型并行化、数据分片和梯度同步展开。下面结合您的代码,详细解释这些核心部分: 并行执行命令 torchrun --nproc_per_node=5 TokenLossMulCard.py 1. 分布式环境初始化 def init_distributed():init_process_…

OpenCV---minAreaRect

一、基本概念与用途 minAreaRect是OpenCV中用于计算点集的最小面积旋转矩形的函数。在计算机视觉领域,它常被用于: 目标检测中获取倾斜对象的边界框(如倾斜的车牌、文本行、工业零件)形状分析与识别(如确定物体的主方…

高端装备制造企业如何选择适配的项目管理系统提升项目执行效率?附选型案例

高端装备制造项目通常涉及多专业协同、长周期交付和高风险管控,因此系统需具备全生命周期管理能力。例如,北京奥博思公司出品的 PowerProject 项目管理系统就是一款非常适合制造企业使用的项目管理软件系统。 国内某大型半导体装备制造企业与奥博思软件达…

如何科学测量系统的最高QPS?

要准确测量系统的最高QPS(Queries Per Second),既不能简单依赖固定请求数(如2万次),也不能盲目压到服务器崩溃。以下是专业的方法论和步骤: 1. 核心原则 目标:找到系统在稳定运行&a…

HTML5实现简洁的端午节节日网站源码

HTML5实现简洁的端午节节日网站源码 前言一、设计来源1.1 网站首页界面1.2 端午由来界面1.3 节日活动界面1.4 传统美食界面1.5 民俗文化界面1.6 登录界面1.7 注册界面 二、效果和源码2.1 动态效果2.2 源代码 结束语 HTML5实现简洁的端午节节日网站源码,酷炫的大气简…

使用 `\033` 方式设置终端字体颜色

通过 ANSI 转义序列(以八进制 \033 开头 ,十进制 27 ),我们可以在支持的终端中轻松实现这一功能。本文将详细介绍如何使用 \033 设置字体颜色,并提供 C、C++ 和 Python 的示例代码。 什么是 ANSI 转义序列? ANSI 转义序列是一组特殊的字符序列,用于控制终端的显示属性…

脱发因素机器学习数据分析

脱发因素机器学习数据分析 一、背景描述 随着年龄增长,脱发成为影响外貌与健康的重要问题。 本数据集包含遗传、荷尔蒙变化、医疗状况、药物治疗、营养缺乏、心理压力等12个可能导致脱发的因素, 旨在通过数据分析挖掘各因素与脱发的潜在关联&#xf…

React 第四十八节 Router中 useMatch 的使用详细介绍及案例分析

前言 useMatch 是 React Router 中的一个钩子,用于判断当前 URL 路径是否与指定模式匹配,并返回匹配的详细信息。 它常用于动态路由参数提取、条件渲染和导航高亮等场景。 一、useMatch 核心功能 路径匹配检测:判断当前路径是否符合指定模…

ubuntu mysql 8.0.42 基于二进制日志文件位置和GTID主从复制配置

目录 1 操作系统信息 2 MySql数据库版本 3 主机列表 4 MySQL服务器都安装依赖 5 主库服务器安装mysql软件步骤: 6 从服务器安装mysql软件步骤 7 基于二进制日志文件位置的主从复制配置 8 使用全局事务标识符进行主从复制(GTID) 9 部署过程遇到问题 1 操作系…

鸿蒙OSUniApp滑动锁屏实战:打造流畅优雅的移动端解锁体验#三方框架 #Uniapp

UniApp滑动锁屏实战:打造流畅优雅的移动端解锁体验 引言 移动应用的安全性和用户体验是开发中不可忽视的重要环节。滑动锁屏作为一种直观、安全且用户友好的解锁方式,在移动应用中得到广泛应用。本文将深入探讨如何使用UniApp框架实现一个功能完备、动…

专场回顾 | 重新定义交互,智能硬件的未来设计

自2022年起,中国智能硬件行业呈现出蓬勃发展的态势,市场规模不断扩大。一个多月前,“小智AI”在短视频平台的爆火将智能硬件带向了大众视野,也意味着智能硬件已不再仅仅停留在概念和技术层面,而是加速迈向实际落地应用…

zynq 级联多个ssd方案设计(ECAM BUG修改)

本文讲解采用zynq7045芯片如何实现200T容量高速存储方案设计,对于大容量高速存储卡,首先会想到采用pcie switch级联方式,因为单张ssd的容量是有限制的(目前常见的m.2接口容量为4TB,U.2接口容量为16TB)&…

中国区域每月地下水水位栅格数据集(2005-2022)

时间分辨率:月空间分辨率:1km - 10km共享方式:开放获取数据大小:8.52 GB数据时间范围:2005-01-01 — 2022-12-01元数据更新时间:2024-09-09 数据集摘要 数据集“GWs_cn_1km”提供了2005年至2022年中国区域…

鸿蒙OSUniApp导航栏组件开发:打造清新简约的用户界面#三方框架 #Uniapp

UniApp 开发实战:打造符合鸿蒙设计风格的日历活动安排组件 在移动应用开发中,日历和活动安排是非常常见的需求。本文将详细介绍如何使用 UniApp 框架开发一个优雅的日历活动安排组件,并融入鸿蒙系统的设计理念,实现一个既美观又实…

在 HTML 文件中添加图片的常用方法

本文详解HTML图片插入方法&#xff1a;1&#xff09;通过<img>标签实现&#xff0c;必须含src和alt属性&#xff1b;2&#xff09;路径支持绝对/相对引用&#xff1b;3&#xff09;建议设置width/height保持比例&#xff1b;4&#xff09;响应式方案用srcset适配不同设备…