【DockerCE】使用docker配置和运行HertzBeat

news2024/10/6 2:23:46

HertzBeat是一款免Agent的监控平台,拥有强大自定义监控能力,可以对应用服务、中间件、数据库、操作系统、云原生等进行监控,配置监控告警阈值,以及告警通知(邮件、微信、钉钉、飞书)。关于这个软件的介绍,我这里就不做过多的介绍了,感兴趣的可以去官网(https://hertzbeat.com/docs)去详细了解下。

今天我主要和大家分享下,如何使用docker来配置和运行HertzBeat。

HertzBeat将监控历史数据存储在时序数据库里面,官方文档给出了两款兼容的时序数据库软件,分别是IoTDB和TDengine,这里我使用的是TDengine。

首先,我们将所需的docker镜像下载到虚拟机(Docker已经提前安装,版本为20.10.21,如何安装请参考我博客的DockerCE的文章分类)。

# docker pull tancloud/hertzbeat
Using default tag: latest
latest: Pulling from tancloud/hertzbeat
751ef25978b2: Pull complete 
140e22108c7d: Pull complete 
993077aca88e: Pull complete 
d1a940e1e4e8: Pull complete 
4f368e97aba5: Pull complete 
4f4fb700ef54: Pull complete 
Digest: sha256:ed3d981673ee34e2d462ba0dda415f62aeec2380ccd0f45a8f1e481d05b2c735
Status: Downloaded newer image for tancloud/hertzbeat:latest
docker.io/tancloud/hertzbeat:latest

# docker pull  tdengine/tdengine:2.4.0.12
2.4.0.12: Pulling from tdengine/tdengine
2f94e549220a: Pull complete 
0c7809c5a70c: Pull complete 
354dceb62d94: Pull complete 
ded68138e6c3: Pull complete 
a049546d9313: Pull complete 
c67be503641a: Pull complete 
1f27396f6efc: Pull complete 
fe556ec02776: Pull complete 
Digest: sha256:0209b13bc6bffaac98fb05df58a86b06d998877d786efcdf59e68299b538d8bd
Status: Downloaded newer image for tdengine/tdengine:2.4.0.12
docker.io/tdengine/tdengine:2.4.0.12

然后,我们通过下面的命令来运行TDengine数据库

docker run -dti -p 6030-6049:6030-6049 -p 6030-6049:6030-6049/udp \
    -v /data/taosdata:/var/lib/taos \
    -e TZ=Asia/Shanghai \
    --name tdengine tdengine/tdengine:2.4.0.12

数据库root用户的默认密码是taosdata,这里我将其修改为其他密码,通过docker exec进入容器内部执行下面的命令。

# docker exec -it tdengine /bin/bash
root@77a11dd2b845:~/TDengine-server-2.4.0.12# taos
taos> show databases;
taos> CREATE DATABASE hertzbeat KEEP 90 DAYS 10 BLOCKS 6 UPDATE 1; 
Query OK, 0 of 0 row(s) in database (0.001995s)
taos> alter user root pass 'YourPassword';
Query OK, 0 of 0 row(s) in database (0.002024s)
taos> quit
root@77a11dd2b845:~/TDengine-server-2.4.0.12# exit
exit

备注:

CREATE DATABASE hertzbeat KEEP 90 DAYS 10 BLOCKS 6 UPDATE 1

上面这条语句的意思是:创建一个名为 hertzbeat 的库,这个库的数据将保留90天(超过90天将被自动删除),每 10 天一个数据文件,内存块数为 6,允许更新数据

下面,我们修改HertzBeat的两个关键的配置文件,分别是application.yml和sureness.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.223.199:6041/hertzbeat
      username: root
      password: YourPassword
    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

备注:

上面的配置文件,仅修改了warehouse块的td-engine配置(紫色部分)

td-engine:

enabled: true

driver-class-name: com.taosdata.jdbc.rs.RestfulDriver

url: jdbc:TAOS-RS://192.168.223.199:6041/hertzbeat

username: root

password: YourPassword

# 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]

备注:这里没有做什么修改,密码是默认的,为hertzbeat。

account:

- appId: admin

credential: hertzbeat

在/data目录下创建上面两个配置文件,然后使用下面的命令运行HertzBeat即可。

docker run -dti -p 1157:1157 \
    -e LANG=zh_CN.UTF-8 \
    -e TZ=Asia/Shanghai \
    -v /data/hertzbeat/data:/opt/hertzbeat/data \
    -v /data/hertzbeat/logs:/opt/hertzbeat/logs \
    -v /data/application.yml:/opt/hertzbeat/config/application.yml \
    -v /data/sureness.yml:/opt/hertzbeat/config/sureness.yml \
    --restart=always \
    --name hertzbeat tancloud/hertzbeat:latest

运行成功后,我们可以使用docker ps查看tdengine数据库实例和HertzBeat实例的进程。

# docker ps
CONTAINER ID   IMAGE                        COMMAND                  CREATED       STATUS       PORTS                                                                                                                          NAMES
4bb57f02dedd   tancloud/hertzbeat:latest    "./bin/entrypoint.sh"    2 hours ago   Up 2 hours   0.0.0.0:1157->1157/tcp, :::1157->1157/tcp                                                                                      hertzbeat
77a11dd2b845   tdengine/tdengine:2.4.0.12   "/tini -- /usr/bin/e…"   4 hours ago   Up 4 hours   0.0.0.0:6030-6049->6030-6049/tcp, 0.0.0.0:6030-6049->6030-6049/udp, :::6030-6049->6030-6049/tcp, :::6030-6049->6030-6049/udp   tdengine

本地虚拟机的HertzBeat管理页面:http://192.168.223.199:1157/

在仪表盘,我们可以看见已经配置的监控的总览,看起来还是很不错的。

下面分享下相关监控的趋势图(必须安装和运行时序数据库):

1)服务器可用性监控

2)网页可用性监控

3)端口可用性监控

4)系统资源使用监控

5)中间件监控

备注:Tomcat中间件监控,跨服务器监控,要在catalina.sh里面配置开启JMX(IP地址不能是127.0.0.1或者localhost),同时还需要在tomcat-user.xml里面配置监控用户。

CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=192.168.223.199 -Dcom.sun.management.jmxremote.port=9011 -Dcom.su
n.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
  <role rolename="manager"/>
  <user username="monitor" password="YourPassword" roles="manager"/>

HertzBeat的配置信息如下:

监控告警测试:

模拟停掉Tomcat服务,然后再启动,就会出现下面的告警列表,看起来还是很清晰的。

在告警中心可以看见更加详细的告警信息记录:

总结,这款软件监控的对象还是很广的,监控配置也很简单。但是,监控数据的GUI展示和目前流行的Grafana相比,监控数据的展示界面显得还是相对简陋的,期待后期可以完善和提升。另外,软件的安全性也有待提升,因为明文密码配置在文件中,在生产环境中(尤其是大厂)肯定是不允许的。

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

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

相关文章

困扰多年的Docker和iptables的恩怨,今天解决了

先介绍下我的使用环境&#xff1a; 操作系统&#xff1a;CentOS7.9 Docker版本&#xff1a;20.10.21 事情是这样的&#xff0c;安装完Docker的时候&#xff0c;容器镜像都跑起来了&#xff0c;端口也放行了&#xff0c;就是无法控制系统防火墙friewalld,查看firewalld状态报错 …

【微信小游戏开发笔记】第一节:微信小游戏Cocos开发环境配置

微信小游戏开发环境配置 微信小游戏开发前&#xff0c;首先要做一些准备&#xff1a; 注册 微信公众平台 账号&#xff0c;获取小游戏AppID(小程序ID)。安装 微信开发者工具&#xff0c;用于编译小游戏。安装 Visual Studio Code&#xff0c;用于编写游戏逻辑代码。安装并配置…

Linux命令:wget(下载文件)、ssh(登录及免密登录)、scp(远程文件传输)、sh(脚本)

wget 概述 wget是一个下载文件的工具&#xff0c;用在命令行下&#xff0c;下载一些软件或从远程服务器恢复备份到本地服务器 wget支持HTTP&#xff0c;HTTPS和FTP协议&#xff0c;可以使用HTTP代理 支持自动下载 wget可以在用户退出系统的之后在后台执行。意味着你可以登…

C语言选择排序和快速排序(图解过程)+思路清晰

选择排序和快排选择排序时间复杂度和空间复杂度快排&#xff08;三种方式&#xff09;1.hoar时间复杂度和空间复杂度优化--三数取中优化--小区间优化2.挖坑法3.双指针&#xff08;推荐&#xff09;选择排序 本篇文章的重点在快排。因为选择排序无论是在思想上面还是&#xff0…

提供数百万岗位和丰厚利润,苹果却转移产业链,中国制造怎么办?

新年刚过&#xff0c;就传出消息指苹果直接代中国供应链企业向印度提出建厂申请&#xff0c;其中有14家获得了许可&#xff0c;而3家被否决&#xff0c;这凸显出苹果坚定向印度转移生产线&#xff0c;如此做对中国制造将产生深远影响。一、苹果对中国制造的影响巨大苹果为中国提…

新的一年,这份高级测试人的职业素养请收好~

软件测试工程师需要的专业技能计算机领域的专业技能是测试工程师应该必备的一项素质&#xff0c;是做好测试工作的前提条件。尽管没有任何IT背景的人也可以从事测试工作&#xff0c;但是一名要想获得更大发展空间或者持久竞争力的测试工程师&#xff0c;则计算机专业技能是必不…

5G R16+C-V2X赋能下一代智能T-Box,助力智能驾驶时代加速到来

█ 5G技术助力C-V2X持续进化&#xff0c;智能网联新生态逐步建立 汽车行业正面临百年未有之变局&#xff0c;智能汽车已经成为全球汽车产业发展的战略方向。发改委、工信部、交通部等11部委联合印发的《智能汽车创新发展战略》中指出&#xff1a;汽车产业与相关产业全面融合&a…

(二十四)深入理解蓝牙BLE之“H5协议”

前言&#xff1a;蓝牙产品在实际落地中&#xff0c;很多时候采用hostcontroller的通信模型&#xff0c;其中host负责实现协议栈profile是运行在主控cpu上的。controller为另外一颗单独的蓝牙芯片&#xff0c;负责蓝牙link layer的处理&#xff0c;两个芯片通过hci消息来交互数据…

SD卡提示格式化后怎么办?可尝试这种数据恢复方法快速找回!

生活中&#xff0c;虽然我们更习惯用手机、U盘来存储数据&#xff0c;但是对于摄影爱好者&#xff0c;SD卡还是非常刚需。 在使用SD卡存储文件时&#xff0c;经常遇到SD卡无法读取&#xff0c;要求我们格式化后才可以使用。此时&#xff0c;该如何备份里面的数据&#xff0c;或…

IB课程为何号称全球最难国际课程?

在读国际学校的同学们&#xff0c;一定对大名鼎鼎的IB课程不陌生&#xff0c;可是他为什么被称作是它号称最难的国际课程呢&#xff1f;今天就来给大家全面解析一下IB课程&#xff5e; IB课程最开始是IBO为外交官子女开设全球统一标准的课程。IB课程为全球学生开设从幼儿园到大…

【论文速递】TMM2023 - FECANet:用特征增强的上下文感知网络增强小样本语义分割

【论文速递】TMM2023 - FECANet:用特征增强的上下文感知网络增强小样本语义分割 【论文原文】&#xff1a;FECANet: Boosting Few-Shot Semantic Segmentation with Feature-Enhanced Context-Aware Network 获取地址&#xff1a;https://ieeexplore.ieee.org/stamp/stamp.js…

这款小巧精致的 Keychron K7 满足了我对键盘的所有想象

&#x1f53d; 前言 博主是一个“练习”时长两年半的前端码农&#xff0c;在练习期间打交道最多的就是键盘&#xff0c;敲得多了懂得也就多了对键盘的要求也变多了。 之前认为&#xff0c;不就一块键盘嘛&#xff0c;能打字就行。 现在认为&#xff0c;键盘必须要有好的手感&a…

Vue前端基于模板实现word导出功能

目录一、依赖二、模板三、代码一、依赖 // 核心依赖 cnpm i docxtemplater3.32.5 cnpm i file-saver2.0.5 cnpm i jszip-utils0.1.0 cnpm i pizzip3.1.3// ui cnpm i element-ui2.15.8二、模板 public 下新建 test.docx 三、代码 <template><div><el-form …

Maven依赖冲突

An attempt was made to call a method that does not exist 依赖冲突完整报错如下 Description:An attempt was made to call a method that does not exist. The attempt was made from the following location:com.baomidou.mybatisplus.extension.plugins.inner.Paginati…

Springboot抑郁症测试系统的设计与实现

在各大医院的教学过程中&#xff0c;用户的抑郁症测试是一项非常重要的事情。随着计算机多媒体技术的发展和网络的普及&#xff0c;“基于网络的学习模式”正悄无声息的改变着传统的抑郁症测试系统&#xff0c;“在线视频、案例展示”的研究和设计也成为教育技术领域的热点课题…

Spring-IOC相关内容

Spring-IOC相关内容 4&#xff0c;IOC相关内容 4.1 bean基础配置 对于bean的配置中&#xff0c;主要会讲解bean基础配置,bean的别名配置,bean的作用范围配置(重点),这三部分内容&#xff1a; 4.1.1 bean基础配置(id与class) 对于bean的基础配置&#xff0c;在前面的案例中…

Chapter2:ROS基础

ROS1{\rm ROS1}ROS1的基础及应用&#xff0c;基于古月的课&#xff0c;各位可以去看&#xff0c;基于hawkbot{\rm hawkbot}hawkbot机器人进行实际操作。 ROS{\rm ROS}ROS版本&#xff1a;ROS1{\rm ROS1}ROS1的Melodic{\rm Melodic}Melodic&#xff1b;实际机器人&#xff1a;Ha…

Magisk内部实现原理

Android10以后&#xff0c;Android系统限制了System分区的修改&#xff0c;结果就是&#xff0c;即使你i是自己编译的Android系统&#xff0c;即使是有做高的root权限&#xff0c;你依然无法挂载System分区并对其内容进行修改,尽管网上有各种帖子说可以使用mount -o rw,remount…

SpringBoot+Vue项目企业客户管理系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 浏…

Linux(centos7)基本操作---文件管理和用户管理

文件管理 文件的目录结构 文件的目录结构从根&#xff08;/&#xff09;目录开始&#xff0c;主要由一下几个目录组成&#xff0c;之间的作用也是不同的&#xff0c;具体作用如下&#xff1a; bin目录&#xff1a;主要存放系统中的一些基本的有执行权限&#xff08;x&#…