安装

临时启动容器

先临时启动容器,将容器内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^_^

新增监控项

选择「监控中心」->「新增监控」->「数据库监控」->「刚创建的钱包地址监控」,填写以下参数:
(可点击测试检查输入是否有误)
file
各输入项解释如下:
file

新增消息通知

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

阈值规则

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

版权所有,转载注明来源