Skip to main content

教程二:基于HTTP协议获取TOKEN指标值,给后续采集认证使用

通过此教程我们一步一步描述如何在教程一的基础上改造,新增一个指标组,先调用认证接口获取TOKEN后,使用TOKEN作为参数供后面的指标组采集认证使用。

阅读此教程前我们希望您已经从自定义监控http协议自定义了解熟悉了怎么自定义类型,指标,协议等。

请求流程

认证信息指标组(优先级最高)】【HTTP接口携带账户密码调用】->【响应数据解析】->【解析签发TOKEN-accessToken作为指标】->【将accessToken作为变量参数赋值给其他采集指标组

这里我们依然用教程一的hertzbeat监控举例!hertzbeat后台接口不仅仅支持教程一使用的basic直接账户密码认证,也支持token认证。

我们需要POST调用登录接口/api/account/auth/form获取accessToken,请求body(json格式)如下:

{
"credential": "hertzbeat",
"identifier": "admin"
}

响应结构数据如下:

{
"data": {
"token": "xxxx",
"refreshToken": "xxxx"
},
"msg": null,
"code": 0
}

新增自定义监控类型hertzbeat_token

  1. 自定义监控类型需新增配置两个YML文件,我们直接复用教程一的 hertzbeat 监控类型,在其基础上修改

用监控类型命名的监控配置定义文件 - app-hertzbeat_token.yml 需位于安装目录 /hertzbeat/define/app/ 下 用监控类型命名的监控参数定义文件 - param-hertzbeat_token.yml 需位于安装目录 /hertzbeat/define/param/ 下

  1. 配置参数定义文件 param-hertzbeat.yml

参数定义文件是定义我们在页面上需要输入哪些参数,一般的HTTP协议参数主要有ip, port, headers, params, uri, 账户密码等, 我们直接复用 param-hertzbeat.yml 里面的参数定义内容,删除其中的我们不需要输入的uri参数和keyword关键字等参数即可。 定义内容如下:注意⚠️app属性值需要改为监控类型名称hertzbeat_token

# 监控应用类型名称(与文件名保持一致) eg: linux windows tomcat mysql aws...
app: hertzbeat_token
# 强制固定必须参数 - host(ipv4,ipv6,域名)
param:
# field-字段名称标识符
- field: host
# name-参数字段显示名称
name:
zh-CN: 主机Host
en-US: Host
# type-字段类型,样式(大部分映射input标签type属性)
type: host
# 是否是必输项 true-必填 false-可选
required: true
- field: port
name:
zh-CN: 端口
en-US: Port
type: number
# 当type为number时,用range表示范围
range: '[0,65535]'
required: true
# 端口默认值
defaultValue: 1157
# 参数输入框提示信息
placeholder: '请输入端口'
- field: ssl
name:
zh-CN: 启动SSL
en-US: SSL
# 当type为boolean时,前端用switch展示开关
type: boolean
required: false
- field: contentType
name:
zh-CN: Content-Type
en-US: Content-Type
type: text
placeholder: 'Request Body Type'
required: false
- field: payload
name:
zh-CN: 请求BODY
en-US: BODY
type: textarea
placeholder: 'Available When POST PUT'
required: false
  1. 初步配置监控配置定义文件 app-hertzbeat.yml

监控配置定义文件是用来定义采集类型是啥,需要用哪种协议采集方式,采集的指标是啥,协议的配置参数等。 我们直接复用 app-hertzbeat.yml 里面的定义内容,修改为我们当前的监控类型hertzbeat_auth配置参数, 比如 app, category等

# 此监控类型所属类别:service-应用服务监控 db-数据库监控 custom-自定义监控 os-操作系统监控
category: custom
# 监控应用类型(与文件名保持一致) eg: linux windows tomcat mysql aws...
app: hertzbeat_token
name:
zh-CN: HertzBeat监控(Token)
en-US: HertzBeat Monitor(Token)
# 参数映射map. type是参数类型: 0-number数字, 1-string明文字符串, 2-secret加密字符串, 3-map映射的json串
# 强制固定必须参数 - host
configmap:
- key: host
type: 1
- key: port
type: 0
- key: contentType
type: 1
- key: payload
type: 1
# 指标组列表 todo 下方配置
metrics: ......

定义指标组auth登录请求获取token

  1. app-hertzbeat.yml新增一个指标组定义 auth, 设置采集优先级为最高0,采集指标 token.

# 此监控类型所属类别:service-应用服务监控 db-数据库监控 custom-自定义监控 os-操作系统监控
category: custom
# 监控应用类型(与文件名保持一致) eg: linux windows tomcat mysql aws...
app: hertzbeat_token
name:
zh-CN: HertzBeat监控(Token)
en-US: HertzBeat Monitor(Token)
# 参数映射map. type是参数类型: 0-number数字, 1-string明文字符串, 2-secret加密字符串, 3-map映射的json串
# 强制固定必须参数 - host
configmap:
- key: host
type: 1
- key: port
type: 0
- key: contentType
type: 1
- key: payload
type: 1
# 指标组列表
metrics:
# 第一个监控指标组 auth
# 注意:内置监控指标有 (responseTime - 响应时间)
- name: auth
# 指标组调度优先级(0-127)越小优先级越高,优先级低的指标组会等优先级高的指标组采集完成后才会被调度,相同优先级的指标组会并行调度采集
# 优先级为0的指标组为可用性指标组,即它会被首先调度,采集成功才会继续调度其它指标组,采集失败则中断调度
priority: 0
# 指标组中的具体监控指标
fields:
# 指标信息 包括 field名称 type字段类型:0-number数字,1-string字符串 instance是否为实例主键 unit:指标单位
- field: token
type: 1
- field: refreshToken
type: 1
# 监控采集使用协议 eg: sql, ssh, http, telnet, wmi, snmp, sdk
protocol: http
# 当protocol为http协议时具体的采集配置
http:
# 主机host: ipv4 ipv6 域名
host: ^_^host^_^
# 端口
port: ^_^port^_^
# url请求接口路径
url: /api/account/auth/form
# 请求方式 GET POST PUT DELETE PATCH
method: POST
# 是否启用ssl/tls,即是http还是https,默认false
ssl: ^_^ssl^_^
payload: ^_^payload^_^
# 请求头内容
headers:
content-type: ^_^contentType^_^
# 响应数据解析方式: default-系统规则,jsonPath-jsonPath脚本,website-网站可用性指标监控
parseType: jsonPath
parseScript: '$.data'

此时,重启hertzbeat系统,在系统页面上添加 hertzbeat_token 类型监控,配置输入参数,content-typeapplication/json , 请求Body填账户密码json如下:

{
"credential": "hertzbeat",
"identifier": "admin"
}

新增成功后我们就可以在详情页面看到我们采集的 token, refreshToken指标数据。

token作为变量参数给后面的指标组采集使用

app-hertzbeat.yml新增一个指标组定义 summary 同教程一中的summary相同, 设置采集优先级为1 设置此指标组的HTTP协议配置中认证方式为 Bearer Token 将上一个指标组auth采集的指标token作为参数给其赋值,使用^o^作为内部替换符标识,即^o^token^o^。如下:

  - name: summary
# 当protocol为http协议时具体的采集配置
http:
# 认证
authorization:
# 认证方式: Basic Auth, Digest Auth, Bearer Token
type: Bearer Token
bearerTokenToken: ^o^token^o^

最终app-hertzbeat.yml定义如下:


# 此监控类型所属类别:service-应用服务监控 db-数据库监控 custom-自定义监控 os-操作系统监控
category: custom
# 监控应用类型(与文件名保持一致) eg: linux windows tomcat mysql aws...
app: hertzbeat_token
name:
zh-CN: HertzBeat监控(Token)
en-US: HertzBeat Monitor(Token)
# 参数映射map. type是参数类型: 0-number数字, 1-string明文字符串, 2-secret加密字符串, 3-map映射的json串
# 强制固定必须参数 - host
configmap:
- key: host
type: 1
- key: port
type: 0
- key: username
type: 1
- key: password
type: 2
- key: headers
type: 3
- key: contentType
type: 1
- key: payload
type: 1
# 指标组列表
metrics:
# 第一个监控指标组 cpu
# 注意:内置监控指标有 (responseTime - 响应时间)
- name: auth
# 指标组调度优先级(0-127)越小优先级越高,优先级低的指标组会等优先级高的指标组采集完成后才会被调度,相同优先级的指标组会并行调度采集
# 优先级为0的指标组为可用性指标组,即它会被首先调度,采集成功才会继续调度其它指标组,采集失败则中断调度
priority: 0
# 指标组中的具体监控指标
fields:
# 指标信息 包括 field名称 type字段类型:0-number数字,1-string字符串 instance是否为实例主键 unit:指标单位
- field: token
type: 1
- field: refreshToken
type: 1
# 监控采集使用协议 eg: sql, ssh, http, telnet, wmi, snmp, sdk
protocol: http
# 当protocol为http协议时具体的采集配置
http:
# 主机host: ipv4 ipv6 域名
host: ^_^host^_^
# 端口
port: ^_^port^_^
# url请求接口路径
url: /api/account/auth/form
# 请求方式 GET POST PUT DELETE PATCH
method: POST
# 是否启用ssl/tls,即是http还是https,默认false
ssl: ^_^ssl^_^
payload: ^_^payload^_^
# 请求头内容
headers:
content-type: ^_^contentType^_^
^_^headers^_^: ^_^headers^_^
# 请求参数内容
params:
^_^params^_^: ^_^params^_^
# 响应数据解析方式: default-系统规则,jsonPath-jsonPath脚本,website-网站可用性指标监控
parseType: jsonPath
parseScript: '$.data'


- name: summary
# 指标组调度优先级(0-127)越小优先级越高,优先级低的指标组会等优先级高的指标组采集完成后才会被调度,相同优先级的指标组会并行调度采集
# 优先级为0的指标组为可用性指标组,即它会被首先调度,采集成功才会继续调度其它指标组,采集失败则中断调度
priority: 1
# 指标组中的具体监控指标
fields:
# 指标信息 包括 field名称 type字段类型:0-number数字,1-string字符串 instance是否为实例主键 unit:指标单位
- field: category
type: 1
- field: app
type: 1
- field: size
type: 0
- field: status
type: 0
# 监控采集使用协议 eg: sql, ssh, http, telnet, wmi, snmp, sdk
protocol: http
# 当protocol为http协议时具体的采集配置
http:
# 主机host: ipv4 ipv6 域名
host: ^_^host^_^
# 端口
port: ^_^port^_^
# url请求接口路径
url: /api/summary
# 请求方式 GET POST PUT DELETE PATCH
method: GET
# 是否启用ssl/tls,即是http还是https,默认false
ssl: ^_^ssl^_^
# 认证
authorization:
# 认证方式: Basic Auth, Digest Auth, Bearer Token
type: Bearer Token
bearerTokenToken: ^o^token^o^
# 响应数据解析方式: default-系统规则,jsonPath-jsonPath脚本,website-网站可用性指标监控
parseType: jsonPath
parseScript: '$.data.apps.*'

配置完成后,再次重启 hertzbeat 系统,查看监控详情页面

设置阈值告警通知

接下来我们就可以正常设置阈值,告警触发后可以在告警中心查看,也可以新增接收人,设置告警通知等,Have Fun!!!


完!

HTTP协议的自定义监控的实践就到这里,HTTP协议还带其他参数headers,params等,我们可以像用postman一样去定义它,可玩性也非常高!

如果您觉得hertzbeat这个开源项目不错的话欢迎给我们在GitHub Gitee star哦,灰常感谢。感谢老铁们的支持。笔芯!

github: https://github.com/dromara/hertzbeat

gitee: https://gitee.com/dromara/hertzbeat