Skip to content

Commit

Permalink
[home,manager]add practice learn doc and hertzbeat monitor (#284)
Browse files Browse the repository at this point in the history
  • Loading branch information
tomsun28 committed Sep 11, 2022
1 parent 5670086 commit a277f35
Show file tree
Hide file tree
Showing 31 changed files with 2,157 additions and 36 deletions.
2 changes: 1 addition & 1 deletion home/blog/2022-09-10-ssl-practice.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ author: tom
author_title: tom
author_url: https://github.com/tomsun28
author_image_url: https://avatars.githubusercontent.com/u/24788200?s=400&v=4
tags: [opensource]
tags: [opensource, practice]
---

先祝看到的同学中秋快乐,身体健康,在身体健康的基础上尽量暴富。
Expand Down
253 changes: 253 additions & 0 deletions home/docs/advanced/extend-http-example-hertzbeat.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,253 @@
---
id: extend-http-example-hertzbeat
title: 教程一:适配一款基于HTTP协议的监控类型
sidebar_label: 教程一:适配一款HTTP协议监控
---

通过此教程我们一步一步描述如何在hertzbeat监控系统下新增适配一款基于http协议的监控类型。

阅读此教程前我们希望您已经从[自定义监控](extend-point)[http协议自定义](extend-http.md)了解熟悉了怎么自定义类型,指标,协议等。


### HTTP协议解析通用响应结构体,获取指标数据

> 很多场景我们需要对提供的 HTTP API 接口进行监控,获取接口返回的指标值。这篇文章我们通过http自定义协议来解析我们常见的http接口响应结构,获取返回体中的字段作为指标数据。

```
{
"code": 200,
"msg": "success",
"data": {}
}
```
如上,通常我们的后台API接口会设计这这样一个通用返回。hertzbeat系统的后台也是如此,我们今天就用hertzbeat的 API 做样例,新增适配一款新的监控类型 **hertzbeat**,监控采集它的系统摘要统计API
`http://localhost:1157/api/summary`, 其响应数据为:

```
{
"msg": null,
"code": 0,
"data": {
"apps": [
{
"category": "service",
"app": "jvm",
"status": 0,
"size": 2,
"availableSize": 0,
"unManageSize": 2,
"unAvailableSize": 0,
"unReachableSize": 0
},
{
"category": "service",
"app": "website",
"status": 0,
"size": 2,
"availableSize": 0,
"unManageSize": 2,
"unAvailableSize": 0,
"unReachableSize": 0
}
]
}
}
```

**我们这次获取其app下的 `category`,`app`,`status`,`size`,`availableSize`等指标数据。**


### 新增对应的应用定义YML和参数定义YML

1. 自定义监控类型需新增配置两个YML文件

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

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

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

```yaml
app: hertzbeat
param:
- 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: 1157
- field: ssl
name:
zh-CN: 启用HTTPS
en-US: HTTPS
type: boolean
required: true
- field: timeout
name:
zh-CN: 超时时间(ms)
en-US: Timeout(ms)
type: number
required: false
hide: true
- field: authType
name:
zh-CN: 认证方式
en-US: Auth Type
type: radio
required: false
hide: true
options:
- label: Basic Auth
value: Basic Auth
- label: Digest Auth
value: Digest Auth
- field: username
name:
zh-CN: 用户名
en-US: Username
type: text
limit: 20
required: false
hide: true
- field: password
name:
zh-CN: 密码
en-US: Password
type: password
required: false
hide: true
```

3. 配置监控配置定义文件 app-hertzbeat.yml

监控配置定义文件是用来定义采集类型是啥,需要用哪种协议采集方式,采集的指标是啥,协议的配置参数等。我们直接复用 app-api.yml 里面的定义内容,修改为我们当前的监控类型`hertzbeat`配置参数即可,如下:注意⚠️我们这次获取接口响应数据中的`category`,`app`,`status`,`size`,`availableSize`等字段作为指标数据。

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

```

**新增完毕,现在我们重启hertzbeat系统。我们可以看到系统页面已经多了一个`hertzbeat`监控类型了。**


![](/img/docs/advanced/extend-http-example-1.png)


### 系统页面添加对`hertzbeat`监控类型的监控

> 我们点击新增 `HertzBeat监控系统`,配置监控IP,端口,采集周期,高级设置里的账户密码等, 点击确定添加监控。

![](/img/docs/advanced/extend-http-example-2.png)


![](/img/docs/advanced/extend-http-example-3.png)

> 过一定时间(取决于采集周期)我们就可以在监控详情看到具体的指标数据和历史图表啦!

![](/img/docs/advanced/extend-http-example-4.png)



### 设置阈值告警通知

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

----

#### 完!

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

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

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

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

0 comments on commit a277f35

Please sign in to comment.