摘要:在云原生和微服务架构盛行的时代,监控系统已成为保障业务稳定运行的关键基础设施。传统的监控系统往往需要在被监控节点上部署Agent,增加了部署和维护的复杂性,同时也带来了安全风险和资源消耗。Apache HertzBeat作为Apache软件基金会孵化中的开源项
在云原生和微服务架构盛行的时代,监控系统已成为保障业务稳定运行的关键基础设施。传统的监控系统往往需要在被监控节点上部署Agent,增加了部署和维护的复杂性,同时也带来了安全风险和资源消耗。Apache HertzBeat作为Apache软件基金会孵化中的开源项目,提供了一种全新的监控思路:无需Agent,全Web界面操作,高性能集群,兼容Prometheus生态,同时提供强大的自定义监控和状态页构建能力。
无需Agent,简化监控部署
HertzBeat的核心创新点在于"无需Agent"。传统监控系统如Prometheus需要在被监控节点上部署exporter,而HertzBeat则利用现有的标准协议(HTTP, JMX, SSH, SNMP, jdbc等)直接连接目标系统进行数据采集。
例如,监控MySQL数据库时,只需在HertzBeat的Web界面输入MySQL的IP、端口、用户名和密码,即可开始监控。监控Linux操作系统时,只需输入服务器的IP、SSH端口、用户名和密码,即可通过SSH执行命令获取系统指标。
这种设计极大简化了监控部署流程,无需在每个被监控节点上安装额外的Agent,减少了部署、维护和升级的复杂性。同时,HertzBeat对敏感信息(如密码)进行全链路加密,确保数据安全。
高性能集群,支持大规模监控
随着监控规模的扩大,单点监控系统往往面临性能瓶颈和单点故障风险。HertzBeat支持部署采集器集群,实现多节点横向扩展。
采集器集群支持以下特性:
自动负载均衡:监控任务在多个采集器之间智能分配自动故障转移:当某个采集器节点宕机时,其他节点自动接管其监控任务单机与集群模式无缝切换:部署方式灵活,可根据需求调整HertzBeat的高性能设计使其能够轻松应对大规模监控场景。例如,一个采集器集群可以同时监控数千个节点,采集性能随着集群规模线性提升。
兼容Prometheus,无缝集成生态
HertzBeat兼容Prometheus的系统生态,可以监控Prometheus所能监控的指标。这意味着用户可以将HertzBeat与现有的Prometheus监控体系无缝集成。
HertzBeat不仅支持Prometheus的指标采集,还支持通过YML配置模板自定义监控任何指标。这种设计使得HertzBeat既能利用Prometheus生态的优势,又能满足特定的监控需求。
强大的自定义监控能力
HertzBeat的核心竞争力在于其强大的自定义监控能力。通过YML格式的监控模板,用户可以轻松定义任何监控指标。
HertzBeat将每个监控类型视为一个监控模板,例如MySQL监控、Redis监控、Kubernetes监控等。用户可以通过修改这些模板,来添加、修改或删除监控指标。
Web服务:Website, Port Telnet, Http Api应用框架:Jvm, SpringBoot2, SpringBoot3数据库:MySQL, PostgreSQL, MariaDB, Redis, MongoDB操作系统:Linux, Ubuntu, CentOS, Windows中间件:Tomcat, Nacos, Zookeeper, RabbitMQ云原生:Kubernetes, Docker网络设备:CiscoSwitch, HuaweiSwitch, HpeSwitch用户还可以通过自定义YML模板,轻松适配新的监控类型,如Kubernetes或Docker。
状态页构建能力
HertzBeat提供强大的状态页构建能力,可以轻松构建对外服务状态页,向用户展示产品服务的实时状态。状态页组件可以与监控状态联动同步,支持故障事件维护管理机制。
构建状态页的步骤简单直观:
创建状态页面添加状态组件(如数据库、API服务等)配置组件与监控指标的关联发布状态页这大大提高了企业服务的透明度,增强了用户信任,降低了沟通成本。
HertzBeat的架构设计简洁而高效,主要包括以下几个组件:
Web前端:基于Angular和TypeScript构建的用户界面,提供直观的监控配置、数据展示和告警管理功能。后端服务:基于SpringBoot构建的主服务,负责监控任务调度、数据存储、告警处理和通知发送。采集器集群:负责实际的数据采集工作,支持多节点部署,实现横向扩展。存储系统:支持多种时序数据库(如VictoriaMetrics、InfluxDB、TSDB等),用于存储监控数据。通知系统:支持多种通知渠道,包括邮件、Discord、Slack、Telegram、钉钉、微信、飞书、短信、Webhook等。HertzBeat的架构设计使得系统具有高可用性、可扩展性和灵活性,能够满足不同规模和复杂度的监控需求。Github开源地址是https://github.com/apache/hertzbeat
HertzBeat的安装和使用非常简单,以下是快速上手指南:
Docker安装
最简单的安装方式是使用Docker:
docker run -d -p 1157:1157 -p 1158:1158 --name hertzbeat apache/hertzbeat部署采集器集群(可选)
对于大规模监控场景,可以部署采集器集群:
docker run -d -e IDENTITY=custom-collector-name -e MANAGER_HOST=127.0.0.1 -e MANAGER_PORT=1158 --name hertzbeat-collector apache/hertzbeat-collector-e IDENTITY=custom-collector-name : 配置此采集器的唯一性标识符名称,多个采集器名称不能相同,建议自定义英文名称。-e MODE=public : 配置运行模式(public or private), 公共集群模式或私有云边模式。-e MANAGER_HOST=127.0.0.1 : 配置连接主 HertzBeat 服务的对外 IP。-e MANAGER_PORT=1158 : 配置连接主 HertzBeat 服务的对外端口,默认1158。docker简单安装如下:
安装完成后,浏览器访问http://localhost:1157
使用默认账号密码admin/hertzbeat登录,登录之后首页如下:
HertzBeat会自动创建监控任务,并开始采集数据。
HertzBeat的自定义监控能力是其核心优势。下面以自定义监控Kubernetes为例,详细说明如何通过YML配置模板实现自定义监控。
步骤1:了解Kubernetes监控需求
Kubernetes监控通常需要收集以下指标:
节点状态(CPU、内存、磁盘使用率)Pod状态(运行状态、重启次数)服务状态(端口、健康检查)集群状态(节点数、Pod数)步骤2:创建YML监控模板
在HertzBeat中,通过"监控模板"页面,可以创建新的YML监控模板。以下是Kubernetes监控的YML模板示例:
name: Kubernetesdescription: Kubernetes cluster monitoringprotocol: Httpconfig:url: http://{{host}}:{{port}}/api/v1/namespacesheaders:Authorization: Bearer {{token}}method: GETtimeout: 5000metrics:- name: node_countdescription: Number of nodes in the clustertype: gaugepath: $.items[0].status.capacity.cpuunit: core- name: pod_countdescription: Total number of pods in the clustertype: gaugepath: $.items[0].status.capacity.podsunit: count- name: pod_runningdescription: Number of running podstype: gaugepath: $.items[0].status.conditions[?(@.type=='Ready')].statusunit: count步骤3:配置监控实例
在"新增监控"页面,选择"Kubernetes"监控类型,填写Kubernetes API Server的地址、端口、认证令牌等信息。
步骤4:验证监控
保存配置后,HertzBeat会开始采集Kubernetes指标。在监控详情页面,可以查看实时指标数据,并配置告警阈值。
Apache HertzBeat通过"无需Agent"的设计,简化了监控系统的部署和维护,同时提供了高性能集群、兼容Prometheus生态、强大的自定义监控和状态页构建能力。这些特性使其成为构建现代监控系统的理想选择。
作为Apache软件基金会孵化项目,HertzBeat将秉承开源精神,持续为社区贡献价值。无论您是初创公司还是大型企业,HertzBeat都能帮助您快速搭建高效、可靠的监控系统,确保业务的稳定运行。
来源:有趣的科技君