安装
临时启动容器
先临时启动容器,将容器内config目录下的内容拷贝到宿主机,便于之后修改。
mkdir /opt/hertbeat && cd /opt/hertbeat
vim docker-compose.yml
version: '3'
services:
hertzbeat:
image: tancloud/hertzbeat
container_name: hertzbeat
restart: unless-stopped
ports:
- 1157:1157
volumes:
- ./data:/opt/hertzbeat/data
- ./logs:/opt/hertzbeat/logs
environment:
- LANG=zh_CN.UTF-8
- TZ=Asia/Shanghai
临时启动容器
此时启动容器不会挂载config目录
docker-compose up -d
进入容器内,拷贝配置文件到宿主机
# 从容器内复制默认配置文件到宿主机
docker cp hertzbeat:/opt/hertzbeat/config/ /opt/hertzbeat/config/
docker cp hertzbeat:/opt/hertzbeat/define/ /opt/hertzbeat/define/
修改容器配置
重新编辑docker-compose.yml文件
version: '3'
services:
hertzbeat:
image: tancloud/hertzbeat
container_name: hertzbeat
restart: unless-stopped
ports:
- 1157:1157
volumes:
- ./data:/opt/hertzbeat/data
- ./logs:/opt/hertzbeat/logs
- ./config:/opt/hertzbeat/config # 确保宿主机config已包含必要文件
- ./ext-lib:/opt/hertzbeat/ext-lib # 存放插件
- ./define:/opt/hertzbeat/define # 监控模板
environment:
- LANG=zh_CN.UTF-8
- TZ=Asia/Shanghai
正式启动容器
# 停止并删除临时容器
docker-compose down
# 重新启动并挂载config目录
docker-compose up -d
此时重启容器将挂载config(配置文件)、ext-lib(插件)、define(监控模板)目录,方便在宿主机修改配置
登录
访问
接着就可以访问hertzbeat系统了。
访问http://ip:1157 默认账号密码 admin/hertzbeat
修改密码
修改默认密码
vim config/sureness.yml
更新密码的官方文档解释:https://hertzbeat.apache.org/zh-cn/docs/start/account-modify/
一、监控mysql
需求
需对数据库 106.75.X.X 中的 aladdin 数据库进行监控。当执行查询语句
“select count(*) from aladdin.wallet_deposit_addresses where allocated_at is null and network_bits = 1;”
时,若查询结果小于 10,就触发告警。
实现
安装驱动
监控mysql需要安装 MYSQL jdbc driver jar, 例如 mysql-connector-java-8.1.0.jar. https://mvnrepository.com/artifact/com.mysql/mysql-connector-j/8.1.0
将此 jar 包拷贝放入ext-lib目录下,重启 HertzBeat 服务生效。
配置自定义模板
HertzBeat默认的监控模板功能有限,若要实现需求,需新增监控模板。
选择「监控模板」,在代码输入界面输入代码如下:
# 监控类型所属类别:service-应用服务 program-应用程序 db-数据库 custom-自定义 os-操作系统 bigdata-大数据 mid-中间件 webserver-web服务器 cache-缓存 cn-云原生 network-网络监控等等
category: db
# 监控应用类型(与文件名保持一致) eg: linux windows tomcat mysql aws...
app: mysql_aladdin_1
name:
zh-CN: 钱包地址监控
en-US: Wallet Deposit Monitor
# 监控参数定义. field 这些为输入参数变量,即可以用^_^host^_^的形式写到后面的配置中,系统自动变量值替换
# 强制固定必须参数 - host
params:
- field: host
name:
zh-CN: 主机Host
en-US: Host
type: host
required: true
- field: port
name:
zh-CN: 端口
en-US: Port
type: number
range: '[0,65535]'
required: true
defaultValue: 3306
placeholder: '请输入端口'
- field: database
name:
zh-CN: 数据库名称
en-US: Database
type: text
required: false
- field: username
name:
zh-CN: 用户名
en-US: Username
type: text
limit: 50
required: false
- field: password
name:
zh-CN: 密码
en-US: Password
type: password
required: false
- field: url
name:
zh-CN: Url
en-US: Url
type: text
required: false
# 采集指标配置列表
metrics:
- name: basic
# 指标调度优先级(0-127)越小优先级越高,优先级低的指标会等优先级高的指标采集完成后才会被调度,相同优先级的指标会并行调度采集
# 优先级为0的指标为可用性指标,即它会被首先调度,采集成功才会继续调度其它指标,采集失败则中断调度
priority: 0
# 具体监控指标列表
fields:
# 指标信息 包括 field名称 type字段类型:0-number数字,1-string字符串 label是否为标签 unit:指标单位
- field: version
type: 1
label: true
- field: port
type: 1
- field: datadir
type: 1
- field: max_connections
type: 0
# (非必须)监控指标别名,与上面的指标名映射。用于采集接口数据字段不直接是最终指标名称,需要此别名做映射转换
aliasFields:
- version
- version_compile_os
- version_compile_machine
- port
- datadir
- max_connections
# (非必须)指标计算表达式,与上面的别名一起作用,计算出最终需要的指标值
# eg: cores=core1+core2, usage=usage, waitTime=allTime-runningTime
calculates:
- port=port
- datadir=datadir
- max_connections=max_connections
- version=version+"_"+version_compile_os+"_"+version_compile_machine
protocol: jdbc
jdbc:
# 主机host: ipv4 ipv6 域名
host: ^_^host^_^
# 端口
port: ^_^port^_^
platform: mysql
username: ^_^username^_^
password: ^_^password^_^
database: ^_^database^_^
# SQL查询方式: oneRow, multiRow, columns
queryType: columns
# sql
sql: show global variables where Variable_name like 'version%' or Variable_name = 'max_connections' or Variable_name = 'datadir' or Variable_name = 'port';
url: ^_^url^_^
- name: status
priority: 1
fields:
# 指标信息 包括 field名称 type字段类型:0-number数字,1-string字符串 label是否为标签 unit:指标单位
- field: threads_created
type: 0
- field: threads_connected
type: 0
- field: threads_cached
type: 0
- field: threads_running
type: 0
# (非必须)监控指标别名,与上面的指标名映射。用于采集接口数据字段不直接是最终指标名称,需要此别名做映射转换
aliasFields:
- threads_created
- threads_connected
- threads_cached
- threads_running
# (非必须)指标计算表达式,与上面的别名一起作用,计算出最终需要的指标值
# eg: cores=core1+core2, usage=usage, waitTime=allTime-runningTime
calculates:
- threads_created=threads_created
- threads_connected=threads_connected
- threads_cached=threads_cached
- threads_running=threads_running
protocol: jdbc
jdbc:
# 主机host: ipv4 ipv6 域名
host: ^_^host^_^
# 端口
port: ^_^port^_^
platform: mysql
username: ^_^username^_^
password: ^_^password^_^
database: ^_^database^_^
# SQL查询方式: oneRow, multiRow, columns
queryType: columns
# sql
sql: show global status where Variable_name like 'thread%' or Variable_name = 'com_commit' or Variable_name = 'com_rollback' or Variable_name = 'questions' or Variable_name = 'uptime';
url: ^_^url^_^
- name: innodb
priority: 2
fields:
# 指标信息 包括 field名称 type字段类型:0-number数字,1-string字符串 label是否为标签 unit:指标单位
- field: innodb_data_reads
type: 0
unit: 次数
- field: innodb_data_writes
type: 0
unit: 次数
- field: innodb_data_read
type: 0
unit: kb
- field: innodb_data_written
type: 0
unit: kb
protocol: jdbc
jdbc:
# 主机host: ipv4 ipv6 域名
host: ^_^host^_^
# 端口
port: ^_^port^_^
platform: mysql
username: ^_^username^_^
password: ^_^password^_^
database: ^_^database^_^
# SQL查询方式: oneRow, multiRow, columns
queryType: columns
# sql
sql: show global status where Variable_name like 'innodb%';
url: ^_^url^_^
- name: wallet_address_check
priority: 3
fields:
- field: wallet_address_count
type: 0
unit: 个
protocol: jdbc
jdbc:
host: ^_^host^_^
port: ^_^port^_^
platform: mysql
username: ^_^username^_^
password: ^_^password^_^
database: ^_^database^_^
queryType: oneRow # 查询结果为单行单列
sql: select count(*) as wallet_address_count from wallet_deposit_addresses where allocated_at is null and network_bits = 1;
url: ^_^url^_^
- name: wallet_address_check_trx
priority: 4
fields:
- field: wallet_address_count_trx
type: 0
unit: 个
protocol: jdbc
jdbc:
host: ^_^host^_^
port: ^_^port^_^
platform: mysql
username: ^_^username^_^
password: ^_^password^_^
database: ^_^database^_^
queryType: oneRow # 查询结果为单行单列
sql: select count(*) as wallet_address_count_trx from aladdin.wallet_deposit_addresses where allocated_at is null and network_bits = 6;
url: ^_^url^_^
新增监控项
选择「监控中心」->「新增监控」->「数据库监控」->「刚创建的钱包地址监控」,填写以下参数:
(可点击测试检查输入是否有误)

各输入项解释如下:

新增消息通知
选择「消息通知」->「新增接收对象」-「Telegram机器人」
输入telegrambot的token和userid即可。(创建telegrambot的方式见https://www.moyuwa.com/1893.html#header-16)

阈值规则
在创建好监控项以及告警通知渠道之后,还需进一步设置阈值规则,以此明确在何种条件下触发告警。具体操作如下:
选择「阈值规则」->「新增阈值规则」-> 选择指标对象」
此时模板里预先设置的对象会自动显示出来。从中找到需要监控的关键指标(key),通过设置对应的值(value),便可完成触发条件的配置。
此外,在通知模板中能够定义接收对象最终看到的告警内容,从而实现对告警信息展示的定制化。


评论(0)