Files
hertzbeat/home/docs/advanced/extend-http-example-token.md
T
2024-04-17 21:23:02 +08:00

15 KiB

id, title, sidebar_label
id title sidebar_label
extend-http-example-token Tutorial 2 Obtain TOKEN index value based on HTTP protocol for subsequent collection and authentication Tutorial 2 Get TOKEN for subsequent authentication

Through this tutorial, we will describe step by step how to modify on the basis of tutorial 1, add an metrics, first call the authentication interface to obtain the TOKEN, and use the TOKEN as a parameter for the subsequent metrics collection and authentication.

Before reading this tutorial, we hope that you are familiar with how to customize types, metrics, protocols, etc. from Custom Monitoring and http Protocol Customization.

Request process

Authentication information metrics (highest priority)】【HTTP interface carries account password call】->【Response data analysis】->【**Analysis and issuance of TOKEN-accessToken as an metric **] -> [Assign accessToken as a variable parameter to other collection index groups]

Here we still use the hertzbeat monitoring example of Tutorial 1! The hertzbeat background interface not only supports the basic direct account password authentication used in Tutorial 1, but also supports token authentication.

We need POST to call the login interface /api/account/auth/form to get accessToken, the request body (json format) is as follows:

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

The response structure data is as follows:

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

Add custom monitoring type hertzbeat_token

HertzBeat Dashboard -> Monitoring Templates -> New Template -> Config Monitoring Template Yml -> Save and Apply -> Add A Monitoring with The New Monitoring Type

We define all monitoring collection types (mysql,jvm,k8s) as yml monitoring templates, and users can import these templates to support corresponding types of monitoring.

Monitoring template is used to define the name of monitoring type(international), request parameter mapping, index information, collection protocol configuration information, etc.

  1. The custom monitoring type needs to add a new configuration monitoring template yml. We directly reuse the hertzbeat monitoring type in Tutorial 1 and modify it based on it

A monitoring configuration definition file named after the monitoring type - hertzbeat_token

We directly reuse the definition content in hertzbeat and modify it to our current monitoring type hertzbeat_auth configuration parameters, such as app, category, etc.

# This monitoring type belongs to the 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: hertzbeat_token
name:
   en-GB: HertzBeat Monitoring (Token)
   en-US: Hertz Beat Monitor (Token)
params:
   # field - field name identifier
   - field: host
     # name - parameter field display name
     name:
       en-CN: Host Host
       en-US: Host
     # type-field type, style (mostly map input tag type attribute)
     type: host
     # Whether it is a required item true-required false-optional
     required: true
   - field: port
     name:
       en-CN: port
       en-US: Port
     type: number
     # When the type is number, use range to represent the range
     range: '[0,65535]'
     required: true
     # port default
     defaultValue: 1157
     # Parameter input box prompt information
     placeholder: 'Please enter the port'
   - field: ssl
     name:
       en-CN: Enable SSL
       en-US: SSL
     # When the type is boolean, the front end uses switch to display the switch
     type: boolean
     required: false
   - field: contentType
     name:
       en-CN: Content-Type
       en-US: Content-Type
     type: text
     placeholder: 'Request Body Type'
     required: false
   - field: payload
     name:
       en-CN: request BODY
       en-US: BODY
     type: textarea
     placeholder: 'Available When POST PUT'
     required: false
# Index group list configuration under todo
metrics: ....

Define metrics auth login request to get token

  1. Add an index group definition auth in hertzbeat_token, set the collection priority to the highest 0, and collect the index token.

# This monitoring type belongs to the 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: hertzbeat_token
name:
   en-GB: HertzBeat Monitoring (Token)
   en-US: Hertz Beat Monitor (Token)
params:
   # field - field name identifier
   - field: host
     # name - parameter field display name
     name:
       en-CN: Host Host
       en-US: Host
     # type-field type, style (mostly map input tag type attribute)
     type: host
     # Whether it is a required item true-required false-optional
     required: true
   - field: port
     name:
       en-CN: port
       en-US: Port
     type: number
     # When the type is number, use range to represent the range
     range: '[0,65535]'
     required: true
     # port default
     defaultValue: 1157
     # Parameter input box prompt information
     placeholder: 'Please enter the port'
   - field: ssl
     name:
       en-CN: Enable SSL
       en-US: SSL
     # When the type is boolean, the front end uses switch to display the switch
     type: boolean
     required: false
   - field: contentType
     name:
       en-CN: Content-Type
       en-US: Content-Type
     type: text
     placeholder: 'Request Body Type'
     required: false
   - field: payload
     name:
       en-CN: request BODY
       en-US: BODY
     type: textarea
     placeholder: 'Available When POST PUT'
     required: false
# List of metricss
metrics:
   # The first monitoring index group auth
   # Note: Built-in monitoring metrics have (responseTime - response time)
   - name: auth
     # The smaller the index group scheduling priority (0-127), the higher the priority, and the index group with low priority will not be scheduled until the collection of index groups with high priority is completed, and the index groups with the same priority will be scheduled and collected in parallel
     # The metrics with priority 0 is the availability metrics, that is, it will be scheduled first, and other metricss will continue to be scheduled if the collection is successful, and the scheduling will be interrupted if the collection fails
     priority: 0
     # Specific monitoring metrics in the metrics
     fields:
       # metric information includes field name type field type: 0-number, 1-string , label-if is metrics label,  unit: metric unit
       - field: token
         type: 1
       - field: refreshToken
         type: 1
     # Monitoring and collection protocol eg: sql, ssh, http, telnet, wmi, snmp, sdk
     protocol: http
     # When the protocol is the http protocol, the specific collection configuration
     http:
       host: ^_^host^_^
       # port
       port: ^_^port^_^
       # url request interface path
       url: /api/account/auth/form
       # Request method GET POST PUT DELETE PATCH
       method: POST
       # Whether to enable ssl/tls, that is, http or https, default false
       ssl: ^_^ssl^_^
       payload: ^_^payload^_^
       # request header content
       headers:
         content-type: ^_^contentType^_^
       # Response data analysis method: default-system rules, jsonPath-jsonPath script, website-website usability metric monitoring
       parseType: jsonPath
       parseScript: '$.data'

**At this time, save and apply, add hertzbeat_token type monitoring on the system page, configure input parameters, content-type fill in application/json, request Body fill in the account password json as follows: **

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

** After the addition is successful, we can see the token, refreshToken metric data we collected on the details page. **

Use token as a variable parameter to collect and use the following metricss

Add an index group definition summary in app-hertzbeat_token.yml, which is the same as summary in Tutorial 1, and set the collection priority to 1

Set the authentication method in the HTTP protocol configuration of this index group to Bearer Token, assign the index token collected by the previous index group auth as a parameter, and use ^o^ as the internal replacement symbol, that is ^o^token^o^. as follows:

   - name: summary
# When the protocol is the http protocol, the specific collection configuration
     http:
       # authentication
       authorization:
         # Authentication methods: Basic Auth, Digest Auth, Bearer Token
         type: Bearer Token
         bearerTokenToken: ^o^token^o^

The final hertzbeat_token template yml is defined as follows:


# This monitoring type belongs to the 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: hertzbeat_token
name:
   en-GB: HertzBeat Monitoring (Token)
   en-US: Hertz Beat Monitor (Token)
params:
   # field - field name identifier
   - field: host
     # name - parameter field display name
     name:
       en-CN: Host Host
       en-US: Host
     # type-field type, style (mostly map input tag type attribute)
     type: host
     # Whether it is a required item true-required false-optional
     required: true
   - field: port
     name:
       en-CN: port
       en-US: Port
     type: number
     # When the type is number, use range to represent the range
     range: '[0,65535]'
     required: true
     # port default
     defaultValue: 1157
     # Parameter input box prompt information
     placeholder: 'Please enter the port'
   - field: ssl
     name:
       en-CN: Enable SSL
       en-US: SSL
     # When the type is boolean, the front end uses switch to display the switch
     type: boolean
     required: false
   - field: contentType
     name:
       en-CN: Content-Type
       en-US: Content-Type
     type: text
     placeholder: 'Request Body Type'
     required: false
   - field: payload
     name:
       en-CN: request BODY
       en-US: BODY
     type: textarea
     placeholder: 'Available When POST PUT'
     required: false
# List of metricss
metrics:
# The first monitoring index group cpu
# Note: Built-in monitoring metrics have (responseTime - response time)
   - name: auth
     # The smaller the index group scheduling priority (0-127), the higher the priority, and the index group with low priority will not be scheduled until the collection of index groups with high priority is completed, and the index groups with the same priority will be scheduled and collected in parallel
     # The metrics with priority 0 is the availability metrics, that is, it will be scheduled first, and other metricss will continue to be scheduled if the collection is successful, and the scheduling will be interrupted if the collection fails
     priority: 0
     # Specific monitoring metrics in the metrics
     fields:
       # metric information includes field name type field type: 0-number, 1-string , label-if is metrics label,  unit: metric unit
       - field: token
         type: 1
       - field: refreshToken
         type: 1
     # Monitoring and collection protocol eg: sql, ssh, http, telnet, wmi, snmp, sdk
     protocol: http
     # When the protocol is the http protocol, the specific collection configuration
     http:
       host: ^_^host^_^
       # port
       port: ^_^port^_^
       # url request interface path
       url: /api/account/auth/form
       # Request method GET POST PUT DELETE PATCH
       method: POST
       # Whether to enable ssl/tls, that is, http or https, default false
       ssl: ^_^ssl^_^
       payload: ^_^payload^_^
       # request header content
       headers:
         content-type: ^_^contentType^_^
         ^_^headers^_^: ^_^headers^_^
       # Request parameter content
       params:
         ^_^params^_^: ^_^params^_^
       # Response data analysis method: default-system rules, jsonPath-jsonPath script, website-website usability metric monitoring
       parseType: jsonPath
       parseScript: '$.data'


   - name: summary
     # The smaller the index group scheduling priority (0-127), the higher the priority, and the index group with low priority will not be scheduled until the collection of index groups with high priority is completed, and the index groups with the same priority will be scheduled and collected in parallel
     # The metrics with priority 0 is the availability metrics, that is, it will be scheduled first, and other metricss will continue to be scheduled if the collection is successful, and the scheduling will be interrupted if the collection fails
     priority: 1
     # Specific monitoring metrics in the metrics
     fields:
       # metric information includes field name type field type: 0-number, 1-string , label-if is metrics label,  unit: metric unit
       - field: category
         type: 1
       - field: app
         type: 1
       - field: size
         type: 0
       - field: status
         type: 0
# Monitoring and collection protocol eg: sql, ssh, http, telnet, wmi, snmp, sdk
     protocol: http
# When the protocol is the http protocol, the specific collection configuration
     http:
       host: ^_^host^_^
       # port
       port: ^_^port^_^
       # url request interface path
       url: /api/summary
       # Request method GET POST PUT DELETE PATCH
       method: GET
       # Whether to enable ssl/tls, that is, http or https, default false
       ssl: ^_^ssl^_^
       # authentication
       authorization:
         # Authentication methods: Basic Auth, Digest Auth, Bearer Token
         type: Bearer Token
         bearerTokenToken: ^o^token^o^
       # Response data analysis method: default-system rules, jsonPath-jsonPath script, website-website usability metric monitoring
       parseType: jsonPath
       parseScript: '$.data.apps.*'

After the configuration is complete, save and apply, and check the monitoring details page

Set threshold alarm notification

Next, we can set the threshold normally. After the alarm is triggered, we can view it in the alarm center, add a new recipient, set alarm notification, etc. Have Fun!!!


over!

This is the end of the practice of custom monitoring of the HTTP protocol. The HTTP protocol also has other parameters such as headers and params. We can define it like postman, and the playability is also very high!

If you think hertzbeat is a good open source project, please star us on GitHub Gitee, thank you very much.

github: https://github.com/apache/hertzbeat

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