The monitoring agent is an multi platform web api for monitoring. It has predefined endpoints to support default monitoring and provides a way to execute user defined scripts for a more precise monitoring The counterpart (the check for nagios) is published here: https://github.com/continentale/monitoring-agent-check
You can just download the binary from the release page
There is an example config file which is called config.toml. For a more detailed view in the config file please look at the docs below
here are some examples of all outputs on a linux system (Ubuntu 22.04)
endpoint: http://localhost:20480/api/v2/mem
output
{
"total": 13359026176,
"available": 11675070464,
"used": 1355632640,
"usedPercent": 10.147690573699494,
"free": 8672419840,
"active": 1037271040,
"inactive": 3243470848,
"wired": 0,
"laundry": 0,
"buffers": 229568512,
"cached": 3101405184,
"writeBack": 0,
"dirty": 4096,
"writeBackTmp": 0,
"shared": 73728,
"slab": 291307520,
"sreclaimable": 248287232,
"sunreclaim": 43020288,
"pageTables": 18882560,
"swapCached": 0,
"commitLimit": 10974478336,
"committedAS": 2348265472,
"highTotal": 0,
"highFree": 0,
"lowTotal": 0,
"lowFree": 0,
"swapTotal": 4294967296,
"swapFree": 4294967296,
"mapped": 84787200,
"vmallocTotal": 35184372087808,
"vmallocUsed": 27443200,
"vmallocChunk": 0,
"hugePagesTotal": 0,
"hugePagesFree": 0,
"hugePagesRsvd": 0,
"hugePagesSurp": 0,
"hugePageSize": 2097152
}
endpoint: http://localhost:20480/api/v2/procs
output
[
{
"name": "init",
"memoryPercent": 0.004077902,
"cpuPercent": 0.00047838765760734546,
"exe": "",
"status": ["sleep"]
},
{
"name": "sh",
"memoryPercent": 0.0045991377,
"cpuPercent": 0.00027342042326018614,
"exe": "/usr/bin/dash",
"status": ["sleep"]
}
]
endpoint: http://localhost:20480/api/v2/disks
output
[
{
"usage": {
"path": "/",
"fstype": "ext2/ext3",
"total": 269490393088,
"free": 229497516032,
"used": 26232205312,
"usedPercent": 10.257785123346386,
"inodesTotal": 16777216,
"inodesUsed": 926115,
"inodesFree": 15851101,
"inodesUsedPercent": 5.520075559616089
},
"details": {
"device": "/dev/sdb",
"mountpoint": "/",
"fstype": "ext4",
"opts": ["rw", "relatime"]
}
},
{
"usage": {
"path": "/mnt/wsl",
"fstype": "tmpfs",
"total": 6679511040,
"free": 6679511040,
"used": 0,
"usedPercent": 0,
"inodesTotal": 1630740,
"inodesUsed": 1,
"inodesFree": 1630739,
"inodesUsedPercent": 0.00006132185388228658
},
"details": {
"device": "tmpfs",
"mountpoint": "/mnt/wsl",
"fstype": "tmpfs",
"opts": ["rw", "relatime"]
}
}
]
endpoint: http://localhost:20480/api/v2/load
output
{
"load1": 0,
"load5": 0.2,
"load15": 0.29
}
endpoint: http://localhost:20480/api/v2/time
output
{
"timestamp": 1668715878,
"formatted": "Thu Nov 17 21:11:18 CET 2022"
}
endpoint: http://localhost:20480/api/v2/cpus
output
[
{
"cpu": "cpu-total",
"user": 365.98,
"system": 197.14,
"idle": 176918.48,
"nice": 4.1,
"iowait": 54.78,
"irq": 0,
"softirq": 71.52,
"steal": 0,
"guest": 0,
"guestNice": 0
}
]
endpoint: http://localhost:20480/api/v2/cpus?perCPU=true
output
[
{
"cpu": "cpu0",
"user": 30.32,
"system": 46.6,
"idle": 14724.38,
"nice": 0.16,
"iowait": 4.46,
"irq": 0,
"softirq": 50.53,
"steal": 0,
"guest": 0,
"guestNice": 0
},
{
"cpu": "cpu1",
"user": 28.05,
"system": 10.56,
"idle": 14745.15,
"nice": 1.73,
"iowait": 29.49,
"irq": 0,
"softirq": 7.74,
"steal": 0,
"guest": 0,
"guestNice": 0
}
]
endpoint: http://localhost:20480/api/v2/file?name=environment
output
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
PATH=$PATH:/usr/local/go/bin
endpoint: http://localhost:20480/api/v2/file?name=fstab
output
{
"Path": "/etc/fstab",
"IsDir": false,
"ModTime": 1629409395,
"Mode": "-rw-r--r--",
"Name": "fstab",
"Size": 43,
"Content": "LABEL=cloudimg-rootfs\t/\t ext4\tdefaults\t0 1\n"
}
endpoint: http://localhost:20480/api/v2/file?name=fstab
output
the file endpoint needs a special config. This config prevents users to read any data they want, so you must make the file accessible.
For this you have to go in the file section and enable the endpoint with
[file]
enabled = true
next you define your entries with two possible formats
# use this format if you just want to specify the path
# the FILE_NAME is just the name for the agent and must not match the real file name
FILE_NAME = path
# the other option is to provide the name directly and pass an path value
# full example:
[file]
enabled = true
[file.entries]
fsTab = "/etc/fstab"
[file.entries.environment]
path = "/etc/environment"
contentOnly = true
the exec endpoint needs a special config too to prevent the user exec all files on your system
to begin with a exec endpoint you should enable it:
the file endpoint needs a special config. This config prevents users to read any data they want, so you must make the file accessible.
For this you have to go in the file section and enable the endpoint with
[exec]
enabled = true
shell = "/bin/bash"
here you can define a shell if you want in where the file gets executed. If you leave it empty the default will be taken (windows: cmd | linux: /bin/bash)
Then you define a name for your command to reference it in the agent and specify the path to file If you want to define the entry directly you can do that by setting a path to your script in the section
full example:
[exec]
enabled = true
shell = "/bin/bash"
[exec.entries]
file_tester = "-c ./scripts/echo"
[exec.entries.test]
shell = "/usr/bin/python3"
path = "./scripts/echo"
# under server you can change the behavior of the server itself
[server]
# its the protocol used by the server. valid values are: http|https
protocol = "http"
# if https is enabled that are the paths to the certificates
certificate = "certificates/cert.crt"
key = "certificates/priv.key"
# use a secret in the client to get data
secret = "superSecretPassword"
useSecret = false
# set the port for the webserver
port = 20480
# sets the address for the webserver to listen on. If empty all interfaces will be used
address = ""
# under global there are the default values for all endpoints
[global]
timeStringFormat = "Mon Jan _2 15:04:05 MST 2006"
# configure the mem endpoint
[mem]
# disable or enable the endpoint
enabled = true
# configure the procs endpoint
[procs]
# disable or enable the endpoint
enabled = true
# configure the disks endpoint
[disks]
# disable or enable the endpoint
enabled = true
# configure the load endpoint
[load]
# disable or enable the endpoint
enabled = true
# configure the time endpoint
[time]
# disable or enable the endpoint
enabled = true
# configure the cpus endpoint
[cpus]
# disable or enable the endpoint
enabled = true
# turns of the per cpu view and summarizes all cpus in one output
# can configured in the api call as http-get parameter
perCPU = false
# configure the file endpoint
[file]
# disable or enable the endpoint
enabled = true
[file.entries]
fsTab = "/etc/fstab"
[file.entries.environment]
path = "/etc/environment"
contentOnly = true
[exec]
# disable or enable the endpoint
enabled = true
shell = "/bin/bash"
[exec.entries]
file_tester = "-c ./scripts/echo"
[exec.entries.test]
shell = "/usr/bin/python3"
path = "./scripts/echo"
- lots of documentation
- writing tests
- react on feedback