Files
hertzbeat/home/i18n/zh-cn/docusaurus-plugin-content-docs/version-1.9.0/advanced/extend-http-jsonpath.md
T

4.9 KiB

id, title, sidebar_label
id title sidebar_label
extend-http-jsonpath HTTP协议JsonPath解析方式 JsonPath解析方式

HTTP接口调用获取响应数据后,用JsonPath脚本解析的解析方式去解析响应数据。

注意⚠️ 响应数据为JSON格式

使用JsonPath脚本将响应数据解析成符合 Apache HertzBeat™ 指定的数据结构规则的数据

JsonPath操作符

JSONPath在线验证

JSONPATH 帮助描述
$ 根对象或元素
@ 当前对象或元素
. or [] 子元素操作符
.. 递归匹配所有子元素
* 通配符. 匹配所有对象或元素.
[] 下标运算符,JsonPath索引从0开始
[,] 连接运算符,将多个结果拼成数组返回,JSONPath允许使用别名.
[start:end:step] 数组切片运算符
?() 过滤器(脚本)表达式.
() 脚本表达式.

HertzBeat数据格式规范

单层格式:key-value

{
  "metricName1": "metricValue",
  "metricName2": "metricValue",
  "metricName3": "metricValue",
  "metricName4": "metricValue"
}

多层格式:数组里面套key-value

[
  {
    "metricName1": "metricValue",
    "metricName2": "metricValue",
    "metricName3": "metricValue",
    "metricName4": "metricValue"
  },
  {
    "metricName1": "metricValue",
    "metricName2": "metricValue",
    "metricName3": "metricValue",
    "metricName4": "metricValue"
  }
]

样例

查询自定义系统的数值信息,其暴露接口为 /metrics/person,我们需要其中的type,num指标 接口返回的原始数据如下:

{
  "firstName": "John",
  "lastName" : "doe",
  "age"      : 26,
  "address"  : {
    "streetAddress": "naist street",
    "city"         : "Nara",
    "postalCode"   : "630-0192"
  },
  "number": [
    {
      "type": "core",
      "num": 3343
    },
    {
      "type": "home",
      "num": 4543
    }
  ]
}

我们使用JsonPath脚本解析,对应的脚本为: $.number[*] ,解析后的数据结构如下:

[
  {
    "type": "core",
    "num": 3343
  },
  {
    "type": "home",
    "num": 4543
  }
]

此数据结构符合HertzBeat的数据格式规范,成功提取指标type,num值。

对应的监控模板YML可以配置为如下

category: custom
# 监控应用类型 eg: linux windows tomcat mysql aws...
app: example
name:
  zh-CN: 模拟应用类型
  en-US: EXAMPLE APP
# 监控参数定义. field 这些为输入参数变量,即可以用^_^host^_^的形式写到后面的配置中,系统自动变量值替换
# 强制固定必须参数 - host
params:
  # 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: 80
    # 参数输入框提示信息
    placeholder: '请输入端口'
# collect metrics config list
# 采集指标配置列表
metrics:
  # metrics - cpu
  # 监控指标 - cpu
  - name: cpu
    # 指标调度优先级(0-127)越小优先级越高,优先级低的指标会等优先级高的指标采集完成后才会被调度,相同优先级的指标会并行调度采集
    # 优先级为0的指标为可用性指标,即它会被首先调度,采集成功才会继续调度其它指标,采集失败则中断调度
    priority: 0
    # 具体监控指标列表
    fields:
      # 指标信息 包括 field名称   type字段类型:0-number数字,1-string字符串   label是否为标签   unit:指标单位
      - field: type
        type: 1
        label: true
      - field: num
        type: 0
# 监控采集使用协议 eg: sql, ssh, http, telnet, wmi, snmp, sdk
    protocol: http
# 当protocol为http协议时具体的采集配置
    http:
      # 主机host: ipv4 ipv6 域名
      host: ^_^host^_^
      # 端口
      port: ^_^port^_^
      # url请求接口路径
      url: /metrics/person
      # 请求方式 GET POST PUT DELETE PATCH
      method: GET
      # 是否启用ssl/tls,即是http还是https,默认false
      ssl: false
      # 响应数据解析方式: default-系统规则,jsonPath-jsonPath脚本,website-网站可用性指标监控
      # 这里使用jsonPath解析
      parseType: jsonPath
      parseScript: '$.number[*]'