赞
踩
HertzBeat赫兹跳动 是一个拥有强大自定义监控能力,无需 Agent 的开源实时监控告警系统。集 监控+告警+通知 为一体,支持对应用服务,数据库,操作系统,中间件,云原生,网络等监控,阈值告警通知一步到位,只需在浏览器配置YML就能使用这些协议去自定义采集任何想要的指标。拥有更自由化的阈值规则(计算表达式),邮件 Discord Slack Telegram 钉钉 微信 飞书 短信 Webhook 等方式及时送达。
本文记录hertzbeat在docker的简单安装部署:
前期环境配置可以参考:
1)【虚拟机】vmware虚拟机创建 centos7系统配置
2)【虚拟机】【ssh】本地ssh连接虚拟机 - Xshell配置与虚拟机ip配置
3)【Docker】【IDEA】springboot项目在服务器docker容器化部署,IDEA远程debug
TDengine 是一款开源、云原生的时序数据库,专为物联网、工业互联网、金融、IT 运维监控等场景设计并优化。HertzBeat的历史数据存储依赖时序数据库 TDengine。我们先安装TDengine时序数据集.
docker拉取TDengine镜像:
docker pull tdengine/tdengine
结果如下:
[root@docker zengweiyu]# docker pull tdengine/tdengine
Using default tag: latest
Trying to pull repository docker.io/tdengine/tdengine ...
latest: Pulling from docker.io/tdengine/tdengine
7c457f213c76: Pull complete
4f4fb700ef54: Pull complete
ace7bebcf257: Pull complete
1f27396f6efc: Pull complete
1943f503fd5c: Pull complete
5f19bc842b7f: Pull complete
Digest: sha256:a7b599a377e088232204b9a996beba6fd78c7ee836a1992a61801c3331a42032
Status: Downloaded newer image for docker.io/tdengine/tdengine:latest
启动前需要先把需要挂载的目录先创建好,我们有命令:
mkdir -p /usr/tdengine/taos/data
mkdir -p /usr/tdengine/taos/log
注意:TDengine启动前 /usr/tdengine/taos/data
目录必须清空,否则无法启动。
我们启动TDengine:
docker run -d -p 6030-6049:6030-6049 -p 6030-6049:6030-6049/udp \
-e TZ=Asia/Shanghai \
-v /usr/tdengine/taos/data:/var/lib/taos \
-v /usr/tdengine/taos/log:/var/log/taos \
--name tdengine --privileged=true tdengine/tdengine:latest
其中:
--name tdengine
:指定容器名称
-p 6030-6035:6030-6035
-p 6030-6035:6030-6035/udp
映射taos客户端使用端口,必须包含TCP和UDP
-v /usr/tdengine/taos/data:/var/lib/taos
:映射数据目录
-v /usr/tdengine/taos/log:/var/log/taos
:映射日志目录
执行后有:
[root@docker tdengine]# docker run -d -p 6030-6049:6030-6049 -p 6030-6049:6030-6049/udp \
> -e TZ=Asia/Shanghai \
> -v /usr/tdengine/taos/data:/var/lib/taos \
> -v /usr/tdengine/taos/log:/var/log/taos \
> --name tdengine --privileged=true tdengine/tdengine:latest
d338e4e2bf7829717b69b51583a3ae3f67c02e61974dff01b9ab24585139617c
docker 查看 container进程:
docker ps
TDengine启动成功。
接下来进入TDengine中初始化我们用于记录监控数据需要的数据库和数据表:
docker exec -it tdengine /bin/bash
依次输入
taos
show databases;
CREATE DATABASE hertzbeat KEEP 90 DURATION 10 BUFFER 16;
alter user root pass '123456';
quit
exit
如下:
[root@docker tdengine]# docker exec -it tdengine /bin/bash root@d338e4e2bf78:~# taos Welcome to the TDengine Command Line Interface, Client Version:3.0.5.0 Copyright (c) 2022 by TDengine, all rights reserved. ******************************** Tab Completion ************************************ * The TDengine CLI supports tab completion for a variety of items, * * including database names, table names, function names and keywords. * * The full list of shortcut keys is as follows: * * [ TAB ] ...... complete the current word * * ...... if used on a blank line, display all supported commands * * [ Ctrl + A ] ...... move cursor to the st[A]rt of the line * * [ Ctrl + E ] ...... move cursor to the [E]nd of the line * * [ Ctrl + W ] ...... move cursor to the middle of the line * * [ Ctrl + L ] ...... clear the entire screen * * [ Ctrl + K ] ...... clear the screen after the cursor * * [ Ctrl + U ] ...... clear the screen before the cursor * ************************************************************************************** Server is Community Edition. taos> show databases; name | ================================= information_schema | performance_schema | Query OK, 2 row(s) in set (0.002187s) taos> CREATE DATABASE hertzbeat KEEP 90 DURATION 10 BUFFER 16; Create OK, 0 row(s) affected (0.711618s) taos> alter user root pass '123456'; Query OK, 0 row(s) affected (0.002944s) taos> quit root@d338e4e2bf78:~# exit exit [root@docker tdengine]# [root@docker tdengine]#
这里在TDengine创建一个名为 hertzbeat 的库,这个库的数据将保留90天(超过90天将被自动删除),每 10 天一个数据文件,内存块数为 16,允许更新数据。
docker拉取Hertzbeat镜像:
docker pull tancloud/hertzbeat
有如下:
[root@docker tdengine]# docker pull tancloud/hertzbeat
Using default tag: latest
Trying to pull repository docker.io/tancloud/hertzbeat ...
latest: Pulling from docker.io/tancloud/hertzbeat
751ef25978b2: Pull complete
140e22108c7d: Pull complete
993077aca88e: Pull complete
d1a940e1e4e8: Pull complete
fa84f2de330f: Pull complete
91a75a310198: Pull complete
b0d19efe1871: Pull complete
4f4fb700ef54: Pull complete
Digest: sha256:7c4526d0e4f8b4f1e637670f5af80fc5aef3d13a23208952d37e1d9a49855082
Status: Downloaded newer image for docker.io/tancloud/hertzbeat:latest
创建/data/hertzbeat
目录:
mkdir -p /data/hertzbeat
在/data/hertzbeat
,我们配置一下hertzbeat的配置文件application.yml和sureness.yml:
vi application.yml
完整配置如下:
# application.yml # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. server: port: 1157 spring: application: name: ${HOSTNAME:@hertzbeat@}${PID} profiles: active: prod mvc: static-path-pattern: /** jackson: default-property-inclusion: ALWAYS web: resources: static-locations: - classpath:/dist/ - classpath:../dist/ # need to disable spring boot mongodb auto config, or default mongodb connection tried and failed.. autoconfigure: exclude: org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration, org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration thymeleaf: prefix: classpath:/templates/ check-template-location: true cache: true suffix: .html mode: HTML management: endpoints: web: exposure: include: '*' enabled-by-default: off sureness: auths: - digest - basic - jwt jwt: secret: 'CyaFv0bwq2Eik0jdrKUtsA6bx3sDJeFV643R LnfKefTjsIfJLBa2YkhEqEGtcHDTNe4CU6+9 8tVt4bisXQ13rbN0oxhUZR73M6EByXIO+SV5 dKhaX0csgOCTlCxq20yhmUea6H6JIpSE2Rwp' --- spring: config: activate: on-profile: prod datasource: driver-class-name: org.h2.Driver username: sa password: 123456 url: jdbc:h2:./data/hertzbeat;MODE=MYSQL hikari: max-lifetime: 120000 jpa: hibernate: ddl-auto: update # Not Require, Please config if you need email notify # 非必填:不使用邮箱作为警告通知可以去掉spring.mail配置 mail: # Attention: this is mail server address. # 请注意此为邮件服务器地址:qq邮箱为 smtp.qq.com qq企业邮箱为 smtp.exmail.qq.com host: smtp.exmail.qq.com username: example@tancloud.cn # Attention: this is not email account password, this requires an email authorization code # 请注意此非邮箱账户密码 此需填写邮箱授权码 password: example port: 465 default-encoding: UTF-8 properties: mail: smtp: socketFactoryClass: javax.net.ssl.SSLSocketFactory ssl: enable: true debug: false warehouse: store: td-engine: enabled: true driver-class-name: com.taosdata.jdbc.rs.RestfulDriver url: jdbc:TAOS-RS://192.168.10.200:6041/hertzbeat username: root password: 123456 iot-db: enabled: false host: 127.0.0.1 rpc-port: 6667 username: root password: root # org.apache.iotdb.session.util.Version: V_O_12 || V_0_13 version: V_0_13 # if iotdb version >= 0.13 use default queryTimeoutInMs = -1; else use default queryTimeoutInMs = 0 query-timeout-in-ms: -1 # 数据存储时间:默认'7776000000'(90天,单位为毫秒,-1代表永不过期) # data expire time, unit:ms, default '7776000000'(90 days, -1:never expire) expire-time: '7776000000' memory: enabled: true init-size: 1024 redis: enabled: false host: 127.0.0.1 port: 6379 password: 123456 alerter: # custom console url console-url: https://console.tancloud.cn # base of alert eval interval time, unit:ms. The next time is 2 times the previous time. alert-eval-interval-base: 600000 # max of alert eval interval time, unit:ms max-alert-eval-interval: 86400000 # system alert(available alert, reachable alert...) trigger times system-alert-trigger-times: 1
依次按:wq
保存退出。
application.yml
我们改动过的配置项为:
warehouse:
store:
td-engine:
enabled: true
driver-class-name: com.taosdata.jdbc.rs.RestfulDriver
url: jdbc:TAOS-RS://192.168.10.200:6041/hertzbeat
username: root
password: 123456
其中username
和password
为我们在TDengine的设置的账号密码,url
地址中的ip改为docker所在的主机IP,而不是localhost。虽然Hertzbeat和TDengine部署在一个docker,但容器之间默认不能用127.0.0.1通讯。
sureness.yml
配置遵循默认即可,
vi sureness.yml
# hertzbeat用户和用户权限配置-sureness.yml # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. ## -- sureness.yml文本数据源 -- ## # 加载到匹配字典的资源,也就是需要被保护的,设置了所支持角色访问的资源 # 没有配置的资源也默认被认证保护,但不鉴权 # eg: /api/v1/source1===get===[admin] 表示 /api/v2/host===post 这条资源支持 admin 这一种角色访问 # eg: /api/v1/source2===get===[] 表示 /api/v1/source2===get 这条资源不支持任何角色访问 resourceRole: - /api/account/auth/refresh===post===[admin,user,guest] - /api/apps/**===get===[admin,user,guest] - /api/monitor/**===get===[admin,user,guest] - /api/monitor/**===post===[admin,user] - /api/monitor/**===put===[admin,user] - /api/monitor/**===delete==[admin] - /api/monitors/**===get===[admin,user,guest] - /api/monitors/**===post===[admin,user] - /api/monitors/**===put===[admin,user] - /api/monitors/**===delete===[admin] - /api/alert/**===get===[admin,user,guest] - /api/alert/**===post===[admin,user] - /api/alert/**===put===[admin,user] - /api/alert/**===delete===[admin] - /api/alerts/**===get===[admin,user,guest] - /api/alerts/**===post===[admin,user] - /api/alerts/**===put===[admin,user] - /api/alerts/**===delete===[admin] - /api/notice/**===get===[admin,user,guest] - /api/notice/**===post===[admin,user] - /api/notice/**===put===[admin,user] - /api/notice/**===delete===[admin] - /api/tag/**===get===[admin,user,guest] - /api/tag/**===post===[admin,user] - /api/tag/**===put===[admin,user] - /api/tag/**===delete===[admin] - /api/summary/**===get===[admin,user,guest] - /api/summary/**===post===[admin,user] - /api/summary/**===put===[admin,user] - /api/summary/**===delete===[admin] # 需要被过滤保护的资源,不认证鉴权直接访问 # /api/v1/source3===get 表示 /api/v1/source3===get 可以被任何人访问 无需登录认证鉴权 excludedResource: - /api/account/auth/**===* - /api/i18n/**===get - /api/apps/hierarchy===get - /actuator/**===get # web ui 前端静态资源 - /===get - /dashboard/**===get - /monitors/**===get - /alert/**===get - /account/**===get - /setting/**===get - /passport/**===get - /**/*.html===get - /**/*.js===get - /**/*.css===get - /**/*.ico===get - /**/*.ttf===get - /**/*.png===get - /**/*.gif===get - /**/*.jpg===get - /**/*.svg===get - /**/*.json===get # swagger ui 资源 - /swagger-resources/**===get - /v2/api-docs===get - /v3/api-docs===get # h2 database - /h2-console/**===* # 用户账户信息 # 下面有 admin tom lili 三个账户 # eg: admin 拥有[admin,user]角色,密码为hertzbeat # eg: tom 拥有[user],密码为hertzbeat # eg: lili 拥有[guest],明文密码为lili, 加盐密码为1A676730B0C7F54654B0E09184448289 account: - appId: admin credential: hertzbeat role: [admin,user] - appId: tom credential: hertzbeat role: [user] - appId: guest credential: hertzbeat role: [guest] - appId: lili # 注意 Digest认证不支持加盐加密的密码账户 # 加盐加密的密码,通过 MD5(password+salt)计算 # 此账户的原始密码为 lili credential: 1A676730B0C7F54654B0E09184448289 salt: 123 role: [guest]
依次按:wq
保存退出。
我们启动Hertzbeat,输入如下命令,端口默认1157:
docker run -dti -p 1157:1157 \
-e LANG=zh_CN.UTF-8 \
-v /data/hertzbeat/data:/opt/hertzbeat/data \
-v /data/hertzbeat/logs:/opt/hertzbeat/logs \
-v /data/hertzbeat/application.yml:/opt/hertzbeat/config/application.yml \
-v /data/hertzbeat/sureness.yml:/opt/hertzbeat/config/sureness.yml \
--restart=always \
--name hertzbeat --privileged=true tancloud/hertzbeat:latest
有如下:
[root@docker hertzbeat]# docker run -dti -p 1157:1157 \
> -e LANG=zh_CN.UTF-8 \
> -v /data/hertzbeat/data:/opt/hertzbeat/data \
> -v /data/hertzbeat/logs:/opt/hertzbeat/logs \
> -v /data/hertzbeat/application.yml:/opt/hertzbeat/config/application.yml \
> -v /data/hertzbeat/sureness.yml:/opt/hertzbeat/config/sureness.yml \
> --restart=always \
> --name hertzbeat --privileged=true tancloud/hertzbeat:latest
8ccc44cdec783117f39dbba56944ec48d0bf38041ebb054011a6852feb302038
docker ps -a
可以看到我们启动的TDengine和Hertzbeat:
我们顺便把之前的springboot服务起一下:
访问Hertzbeat:http://192.168.10.200:1157
其中192.168.10.200是主机IP,1157为Hertzbeat对外端口,可以有如下:
账号密码默认是 admin/hertzbeat,进入后可以自己配置指标监控如下:
https://hertzbeat.com/zh-cn/docs/start/docker-deploy
https://blog.csdn.net/fisherish/article/details/126195370
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。