我是笑看风云旦,喜欢研究一些开源有价值的工具,搭建在自己的家庭私有云上,提升自己的工作效率、生活便捷性,又能保障自身的数据安全。如果你有什么好的工具,也可以推荐给我!

今天给大家推荐一款监控告警系统hertzbeat,下面这段是项目方的描述:

hertzbeat是一个拥有强大自定义监控能力,高性能集群,兼容 Prometheus,无需 Agent 的开源实时监控告警系统。

  • 集 监控+告警+通知 为一体,支持对应用服务,应用程序,数据库,缓存,操作系统,大数据,中间件,Web服务器,云原生,网络,自定义等监控阈值告警通知一步到位。
  • 易用友好,无需 Agent,全 WEB 页面操作,鼠标点一点就能监控告警,零上手学习成本。
  • 将 Http, Jmx, Ssh, Snmp, Jdbc, Prometheus 等协议规范可配置化,只需在浏览器配置监控模版 YML 就能使用这些协议去自定义采集想要的指标。您相信只需配置下就能立刻适配一款 K8s 或 Docker 等新的监控类型吗?
  • 兼容 Prometheus 的系统生态并且更多,只需页面操作就可以监控 Prometheus 所能监控的。
  • 高性能,支持多采集器集群横向扩展,支持多隔离网络监控,云边协同。
  • 自由的告警阈值规则,邮件DiscordSlackTelegram钉钉微信飞书短信WebhookServer酱 等方式消息及时送达。

不多说,先来秀一下部署成功后的截图。

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 网络文件系统”这篇文章。