Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/peekjef72/check_by_nrpe_exporter
play nrpe preformated command to target using template and a nrpe_exporter
https://github.com/peekjef72/check_by_nrpe_exporter
Last synced: about 2 months ago
JSON representation
play nrpe preformated command to target using template and a nrpe_exporter
- Host: GitHub
- URL: https://github.com/peekjef72/check_by_nrpe_exporter
- Owner: peekjef72
- License: mit
- Created: 2023-08-27T13:27:23.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-05-22T17:09:28.000Z (8 months ago)
- Last Synced: 2024-06-21T08:08:11.848Z (7 months ago)
- Language: Go
- Size: 322 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# check_by_nrpe_exporter
- webserver that wait for clients request sent in JSON format
- check request content for a command that is understood
- translate it to expected nrpe_exporter format and send it to corresponding nrpe_exporter (poller)
- translate openmetrics response from poller into a JSON format.# pre-requirements
* nrpe_exporter v 0.3.0: [see project on GitHub](https://github.com/peekjef72/nrpe_exporter/tree/profile_with_nrped_jfpik)
* build with result_message enabled
* transport ssl (openssl 1.1 or 3.1 enabled)
* nrpe agent compiled with allow arguments# configuration
config is defined in conf/check_by_nrpe_exporter.ymlit defines:
* known pollers list
* allowed commands and how to display them in the page.## pollers list
format:
```ymal
pollers:
name:
scheme: http(default)|https # may be omitted
host: fully_qualified_domain_name # mandatory
port: 9275 # may be omitted
baseUrl: "" # may be omitted
proxy: # may be omitted
VeriySSL: true # may be omitted
scrape_timeout: 10 # may be omittedexample:
host: my_nrpe_exporter.domain.name```
## commands
list of knowns command, that user can address and check every targets using poller.format:
```yaml
checks:
command_name:
command: real_nrpe_command_to_play
command_line: command_template_argument_line
params:
- name: param_name
display: label display for this param (default name)
help: tootips to display for this param
mandatory: true|false
type: text(default)|number|password|email|tel|url
default: "value" # a default value for parameter
encode: "" or "base64"filesystem:
command: check_disk
command_line: "
-X binfmt_misc -X devpts -X devtmpfs -X none -X proc -X procfs -X rpc_pipefs
-X sysfs -X tmpfs -X overlay -X debugfs -X tracefs -X autofs -X cgroup
--errors-only {{ .options }} -t {{ .timeout }} -w {{ .perc_threshold_warn }} -c {{ .perc_threshold_crit }} --all --local -i /.snapshot/"
params:
- name: perc_threshold_warn
display: warn threshold
help: warning free space thresdhold; if free bytes are less or egal to threshold, WARNING state is raised
default: 5
mandatory: true
type: number
- name: perc_threshold_crit
display: critical threshold
help: critical free space threshold; if free bytes are less or egal to threshold, CRITICAL state is raised
default: 3
mandatory: true
type: number
- name: timeout
default: 5
type: number
mandatory: true
help: timeout in second for the remote command to execute
- name: options
default: ""```
# web server
## REST API
### check
* GET /api/check
return the list of all available checks.
```json
{
"checks":[
"filesystem",
"filesystemre",
"...",
],
"message":"ok",
"status":1
}
```* GET /api/check/check_name
return details of command and paramater for a check.
e.g.: GET /api/check/filesystem
```json
{
"check":{
"filesystem":{
"command": "check_disk",
"command_line":" -X binfmt_misc -X devpts -X devtmpfs -X none -X proc -X procfs -X rpc_pipefs -X sysfs -X tmpfs -X overlay -X debugfs -X tracefs -X autofs -X cgroup --errors-only {{ .options }} -t {{ .timeout }} -w {{ .perc_threshold_warn }} -c {{ .perc_threshold_crit }} --all --local -i /.snapshot/",
"params": [ {
"name": "perc_threshold_warn",
"display": "warn threshold",
"help": "warning free space thresdhold; if free bytes are less or egal to threshold, WARNING state is raised",
"mandatory": true,
"default":"5",
"type":"number"
}, {
"name": "perc_threshold_crit",
"display":"critical threshold",
"help":"critical free space threshold; if free bytes are less or egal to threshold, CRITICAL state is raised",
"mandatory": true,
"default": "3",
"type":"number"
},{
"name": "timeout",
"help": "timeout in second for the remote command to execute",
"mandatory": true,
"default": "5",
"type": "number"
},{
"name":"options"
}
]
}
},
"message": "ok",
"status":1
}
```
### poller* GET /api/poller
return the list of all available pollers.
```json
{
"message": "ok",
"status": 1,
"pollers":[
"poller1","poller2","poller3"
]
}
```* GET /api/poller/poller_name
return the detail for the poller poller_name.
e.g.: GET /api/poller/poller1
```json
{
"message": "ok",
"poller": {
"poller1": {
"scheme": "http",
"host": "poller1.myhost.domain",
"port": "9275",
"auth_mode":{"mode":"basic"},
"proxy": "http://poller1.myhost.domain:9101",
"verifySSL":true,
"scrape_timeout":"10s"
}
},
"status":1}
```### trycheck
command check are sent to "/api/trycheck" with POST method
format:POST /api/trycheck
with body
```json
{
"poller": "poller_name",
"type": "command_name",
"target": "host:port",
"params": {
"name1": "value1",
"name_2": "value2"
[,...]
}
}
```e.g.: check for process
POST /api/trycheck
```json
{"poller": "poller_name", "target": "hostname:5666", "type": "process", "params": {"process": ".*sshd.*"}}
```## Web interface
there is only one page served by url /html/index.html.
It is a bootstrap, jquery html, css, javscript page that allow user to check commands (check) over a poller.
It queries REST API part to retrieve pollers, checks and to perform query to nrpe_exporter on the sselected poller for the target and displays the result of the check.
![GUI](./doc/check_by_nrpe_exporter_ihm.png)