Server Monitoring tool, based in bash, extensible with custom sensors, and outputing a JSON on a standalone HTTP server (without need of Apache nor nginx). This script has to be exploited with an external webinterface.
- Clone the GIT repo
- Make the installer file available for execution (
chmod +x install.sh) - At first launch, it will create your configuration files, and will be ready.
- Once launched, visit http://youserverip:8765/?key=XXXXXXX (replace XXXXXXX by the key provided).
{{
"system":{
"daemon":"bashmonit/1.2.16",
"generation_date":"Tue 1 Mar 2022 06:39:34 PM CEST"
},
"sensors":{
"apps":{
"mysql":{
"status":"online"
},
"php":{
"version":"7.4.22"
}
},
"system":{
"os":{
"hostname":"developer",
"distro":"Debian",
"distro_version":"11.0",
"uptime":"10 days, 8 hours, 19 minutes, 3 seconds",
"uptime_timestamp":1628929200
},
"processes":{
"load_average":"0.00",
"count":268,
"biggest":{
"command":"bash",
"pid":"3098723",
"cpu_usage":"2.0%"
}
}
},
"hardware":{
"cpu":{
"model":"Intel(R) Xeon(R) CPU E3-1245 v5 @ 3.50GHz",
"frequency":"1200",
"cores":8,
"usage":"7.04%"
},
"mount_points":[
{
"mount_point":"/",
"free":"554GB",
"total":"936GB",
"usage":"38%",
"device":"/dev/md1"
}
],
"disks":[
{
"disk":"/dev/sda",
"serial":"171416BD40D2",
"temperature":35,
"family_model":"Crucial/Micron Client SSDs",
"model":"Micron_1100_MTFDDAK512TBN",
"capacity":"512 GB",
"smart_status":"PASSED"
},
{
"disk":"/dev/sdb",
"serial":"1711166727CA",
"temperature":36,
"family_model":"Crucial/Micron Client SSDs",
"model":"Micron_1100_MTFDDAK512TBN",
"capacity":"512 GB",
"smart_status":"PASSED"
},
{
"disk":"/dev/sdc",
"serial":"1709160C0DFF",
"temperature":36,
"family_model":"Crucial/Micron Client SSDs",
"model":"Micron_1100_MTFDDAK512TBN",
"capacity":"512 GB",
"smart_status":"PASSED"
}
],
"memory":{
"used":"5229MB",
"total":"64104MB",
"usage":"8.16%"
},
"temperatures":{
"cpu":33
}
}
}
}The daemon needs ROOT permissions and some packages such as :
- nc
- awk
- net-tools (
netstat) - lm-sensors (
sensors) - bc
- gawk
- jq
- netcat
- lsblk
- smartmontools (
smartctl)
At first launch, it will try to install them automatically.
The installation process has been successfully tested on Debian/Ubuntu distributions.
- Make
install.shexecutable (chmod +x install.sh) and run it (./install.sh). It will copy the executable in/usr/local/sbin/bashmonit, and create configuration files in/etc/bashmonit.d/(for all sensors) and/etc/bashmonit.conffor general purposes - run by typing
bashmonit
The specified port (by default 8765) must be free of use. If not, the daemon will display the following message :
Port 8765 already in use, please free this port or configure another one.
3 solutions
- Release the port (if 80, it may be Apache or nginx)
- Change the port in the INI file and relaunch the app
- Check if a process is using your port by typing
lsof -i :8765and kill the process if needed
Reminder the specified port must be accessible from your bashmonit client, so your firewall (such as iptables) must keep this port opened.
To avoid unauthorized access to your monitoring system, a key must be specified using GET parameter key, such as : http://youserverip:port/?key=XXXXXXX
The key is automatically generated at first launch and stored in your configuration file.
After installation, you can edit all sensors parameters by editing /etc/bashmonit.d/*.conf files (if any).
Eg. : for mysql sensors, you can edit MYSQL credentials in /etc/bashmonit.d/apps-mysql.conf
There's no daemon currently provided. So if you want to use it permanently, many tools provide this feature, such as :
Make sure PM2 is installed (after installing nodejs, type npm install -g pm2)
- type
pm2 --name bashmonit -f start /usr/local/sbin/bashmonit --interpreter=bashto run the process in background - then type
pm2 saveto save this process to a file - finally type
pm2 startupto ensure that the process will be relaunch if server is rebooted.
- netcat web server - the base of bashttp
Please feel free to contribute by submitting enhancement or new sensors !
We use SemVer for versioning. For the versions available, see the tags on this repository.
- 1.2.16 [mar 2022] : Avoid bad disk detection
- 1.2.15 [feb 2022] : Enhance disk performance sensor
- 1.2.14 [sep 2021] : Fix install process
- 1.2.13 [aug 2021] : Add physical disk information & smart Status
- 1.2.12 [aug 2021] : Better support of OS Version detection
- 1.2.11 [aug 2021] : uptime in timestamp and sensors output in int while necessary
- 1.2.10 [aug 2021] : fix bad CPU % output
- 1.2.9 [aug 2021] : Enhanced update method
- 1.2.8 [aug 2021] : Changed CPU % usage method
- 1.2.7 [aug 2021] : Bad CPU core detection (not working fine in Containers)
- 1.2.6 [aug 2021] : Add --get-port method to retrieve PORT, and installer update.
- 1.2.5 [aug 2021] : Add --get-key method to retrieve APPKEY
- 1.2.4 [aug 2021] : Installer update
- 1.2.3 [jun 2021] : Distinguished JSON entry for OS version
- 1.2.2 [jun 2021] : changed disk json format
- 1.2.1 [jun 2021] : add cpu model and frequency to CPU sensor
- 1.2.0 [may 2021] : change default port, multiple disk sensor
- 1.1.1 [nov 2019] : add autoupdate process
- 1.1.0 [dec 2018] : first official release (published in nov. 2019).
- 1.0.0 - 1.0.9 [aug 2017-dec 2018]: internal releases.
Charles Bourgeaux - Initial work - reSmush.it See also the list of contributors who participated in this project.
This project is licensed under the MIT License - see the LICENSE.md file for details