HTTP Protocol JsonPath Parsing Method
After calling the HTTP api to obtain the response data, use JsonPath script parsing method to parse the response data.
Note⚠️ The response data is JSON format.
Use the JsonPath script to parse the response data into data that conforms to the data structure rules specified by HertzBeat
JsonPath Operator
JSONPATH | Help description |
---|---|
$ | Root object or element |
@ | Current object or element |
. or [] | Child element operator |
.. | Recursively match all child elements |
* | Wildcard. Match all objects or elements |
[] | Subscript operator, jsonpath index starts from 0 |
[,] | Join operator, return multiple results as an array. Jsonpath allows the use of aliases |
[start🔚step] | Array slice operator |
?() | Filter (script) expression |
() | Script Expression |
HertzBeat data format specification
Single layer format :key-value
{
"metricName1": "metricValue",
"metricName2": "metricValue",
"metricName3": "metricValue",
"metricName4": "metricValue"
}
Multilayer format:Set key value in the array
[
{
"metricName1": "metricValue",
"metricName2": "metricValue",
"metricName3": "metricValue",
"metricName4": "metricValue"
},
{
"metricName1": "metricValue",
"metricName2": "metricValue",
"metricName3": "metricValue",
"metricName4": "metricValue"
}
]
Example
Query the value information of the custom system, and its exposed interface is /metrics/person
. We need type,num
Metric.
The raw data returned by the interface is as follows:
{
"firstName": "John",
"lastName" : "doe",
"age" : 26,
"address" : {
"streetAddress": "naist street",
"city" : "Nara",
"postalCode" : "630-0192"
},
"number": [
{
"type": "core",
"num": 3343
},
{
"type": "home",
"num": 4543
}
]
}
We use the jsonpath script to parse, and the corresponding script is: $.number[*]
,The parsed data structure is as follows:
[
{
"type": "core",
"num": 3343
},
{
"type": "home",
"num": 4543
}
]
This data structure conforms to the data format specification of HertzBeat, and the Metric type,num
is successfully extracted.
The corresponding monitoring template yml can be configured as follows
# The monitoring type category:service-application service monitoring db-database monitoring custom-custom monitoring os-operating system monitoring
category: custom
# Monitoring application type(consistent with the file name) eg: linux windows tomcat mysql aws...
app: example
name:
zh-CN: 模拟应用类型
en-US: EXAMPLE APP
params:
# field-field name identifier
- field: host
# name-parameter field display name
name:
zh-CN: 主机Host
en-US: Host
# type-field type, style(most mappings are input label type attribute)
type: host
# required or not true-required false-optional
required: true
- field: port
name:
zh-CN: 端口
en-US: Port
type: number
# When type is number, range is used to represent the range.
range: '[0,65535]'
required: true
# port default
defaultValue: 80
# Prompt information of parameter input box
placeholder: 'Please enter the port'
# Metric group list
metrics:
# The first monitoring Metric group person
# Note:the built-in monitoring Metrics have (responseTime - response time)
- name: cpu
# The smaller Metric group scheduling priority(0-127), the higher the priority. After completion of the high priority Metric group collection,the low priority Metric group will then be scheduled. Metric groups with the same priority will be scheduled in parallel.
# Metric group with a priority of 0 is an availability group which will be scheduled first. If the collection succeeds, the scheduling will continue otherwise interrupt scheduling.
priority: 0
# metrics fields list
fields:
# Metric information include field: name type: field type(0-number: number, 1-string: string) label-if is metrics label unit: Metric unit
- field: type
type: 1
label: true
- field: num
type: 0
# protocol for monitoring and collection eg: sql, ssh, http, telnet, wmi, snmp, sdk
protocol: http
# Specific collection configuration when the protocol is HTTP protocol
http:
# host: ipv4 ipv6 domain name
host: ^_^host^_^
# port
port: ^_^port^_^
# url request interface path
url: /metrics/person
# request mode GET POST PUT DELETE PATCH
method: GET
# enable ssl/tls or not, that is to say, HTTP or HTTPS. The default is false
ssl: false
# parsing method for response data: default-system rules, jsonPath-jsonPath script, website-website availability Metric monitoring
# jsonPath parsing is used here
parseType: jsonPath
parseScript: '$.number[*]'