家庭私有云上 Docker 部署 hertzbeat,方便的监控告警系统
我是笑看风云旦,喜欢研究一些开源有价值的工具,搭建在自己的家庭私有云上,提升自己的工作效率、生活便捷性,又能保障自身的数据安全。如果你有什么好的工具,也可以推荐给我!
今天给大家推荐一款监控告警系统hertzbeat,下面这段是项目方的描述:
hertzbeat是一个拥有强大自定义监控能力,高性能集群,兼容 Prometheus,无需 Agent 的开源实时监控告警系统。
- 集 监控+告警+通知 为一体,支持对应用服务,应用程序,数据库,缓存,操作系统,大数据,中间件,Web服务器,云原生,网络,自定义等监控阈值告警通知一步到位。
- 易用友好,无需
Agent
,全WEB
页面操作,鼠标点一点就能监控告警,零上手学习成本。 - 将
Http, Jmx, Ssh, Snmp, Jdbc, Prometheus
等协议规范可配置化,只需在浏览器配置监控模版YML
就能使用这些协议去自定义采集想要的指标。您相信只需配置下就能立刻适配一款K8s
或Docker
等新的监控类型吗? - 兼容
Prometheus
的系统生态并且更多,只需页面操作就可以监控Prometheus
所能监控的。 - 高性能,支持多采集器集群横向扩展,支持多隔离网络监控,云边协同。
- 自由的告警阈值规则,
邮件
Discord
Slack
Telegram
钉钉
微信
飞书
短信
Webhook
Server酱
等方式消息及时送达。
不多说,先来秀一下部署成功后的截图。
1、登录界面:

2、登录后的首页:

监控的项目确实很多,涉及应用服务、数据库、操作系统、中间件四个大模块,每个模块里面又分好多种:再浅浅截两张:


下面演示下,监控服务端口可用性,如果有问题,对接钉钉报警出来。
第一步:点击端口可用性界面,点击“新增 端口可用性”

第二步:填写信息,这个表单倒是很简单,我觉得没啥好介绍的,主要确定好需要监控的服务的Host地址和端口号,填好后可以先点击测试是否能通,然后保存。

第三步:点击消息通知,新增一个接收人,我这里选择钉钉告警:

然后点击后面的选项卡“告警通知策略”,我这里没有设置时间限制,24小时告警。

好了,配置完成,接下来我让服务的端口不可用。

奶思,手机响了,钉钉的告警效果如上图所示。我看系统里面也有监控模板可以配置,有兴趣的盆友也可以研究下。

下面给大家介绍如何部署,还是老样子,贴心的提供两种部署方式,docker-compose 和 K8S:
1、以docker-compose方式部署,这种方式比较简单,docker-compose文件如下:
version: '2.4'
services:
hertzbeat:
image: tancloud/hertzbeat:v1.3.1
container_name: hertzbeat
environment:
- TZ=Asia/Shanghai
- LANG=zh_CN.UTF-8
ports:
- 1157:1157
volumes:
- /root/workspace/hertzbeat/data:/opt/hertzbeat/data
- /root/workspace/hertzbeat/logs:/opt/hertzbeat/logs
restart: always
我使用的portainer来管理容器,也是使用容器来部署,如果没有安装可以使用如下命令:
docker run -d -p 8000:8000 -p 9000:9000 \
--name portainer --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /root/workspace/portainer:/data portainer/portainer:1.24.2
portainer安装成功后,打开机器的1157端口,找到stacks,将如上hertzbeat的部署代码贴进去执行:

稍等片刻后,可以看到hertzbeat服务端启动成功,在1157端口监听,浏览器打开能看到我最开始截屏的登录界面表示部署成功!
2、以K8S方式部署,yaml文件如下:
apiVersion: v1
kind: Service
metadata:
name: hertzbeat-hs
namespace: tools
spec:
ports:
- port: 1157
selector:
app: hertzbeat
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: hertzbeat
namespace: tools
labels:
app: hertzbeat
spec:
replicas: 1
selector:
matchLabels:
app: hertzbeat
template:
metadata:
labels:
app: hertzbeat
spec:
dnsPolicy: ClusterFirst
dnsConfig:
options:
- name: timeout
value: "2"
- name: ndots
value: "2"
- name: diydns
containers:
- name: hertzbeat
resources:
requests:
cpu: 0.1
memory: 100Mi
limits:
cpu: 0.9
memory: 900Mi
image: tancloud/hertzbeat:v1.3.1
env:
- name: TZ
value: "Asia/Shanghai"
- name: LANG
value: "zh_CN.UTF-8"
ports:
- containerPort: 1157
volumeMounts:
- name: hertzbeatdata
mountPath: /opt/hertzbeat/data
- name: hertzbeatlogs
mountPath: /opt/hertzbeat/logs
volumes:
- name: hertzbeatdata
nfs:
path: /hertzbeat/data
server: nfs.laughstorm.cc
- name: hertzbeatlogs
nfs:
path: /hertzbeat/logs
server: nfs.laughstorm.cc
注意这里我使用了NFS把hertzbeat的文件映射出来,这样当Pod被销毁或者被调度到其他节点之后数据都不会丢失,你如果还没有安装NFS服务器可以参考我之前写的“在家庭私有云上实现 Docker 部署 NFS 网络文件系统”这篇文章。