Install from the latest release (https://github.com/telkomdev/tob/releases)
choose the binary from the release according to your platform, for example for the Linux platform
$ wget https://github.com/telkomdev/tob/releases/download/2.0.7/tob-2.0.7.linux-amd64.tar.gzDownload sha256sum.txt according to the binary version you downloaded https://github.com/telkomdev/tob/releases/download/2.0.7/sha256sums.txt
$ wget https://github.com/telkomdev/tob/releases/download/2.0.7/sha256sums.txtLinux
$ sha256sum tob-2.0.7.linux-amd64.tar.gz -c sha256sums.txt
tob-2.0.7.linux-amd64.tar.gz: OKMac OSX
$ shasum -a 256 tob-2.0.7.darwin-amd64.tar.gz -c sha256sums.txt
tob-2.0.7.darwin-amd64.tar.gz: OKYou should be able to see that the checksum value for the file is valid, tob-2.0.7.linux-amd64.tar.gz: OK and tob-2.0.7.darwin-amd64.tar.gz: OK.
Indicates the file is not damaged, not modified and safe to use.
$ tar -xvzf tob-2.0.7.linux-amd64.tar.gz$ ./tob -c config.jsonRequirements
- Go version 1.16 or higher
Clone tob to your Machine
$ git clone https://github.com/telkomdev/tob.git
$ cd tob/$ make buildtob options
$ ./tob -hRunning tob with config file
$ ./tob -c config.jsoncurrently tob supports below KIND of services
- airflow
- airflowflower
- elasticsearch
- kafka
- mongodb
- mysql
- oracle
- postgresql
- redis
- web
- diskstatus
KIND represents one or many services. So you can monitor more than one service with the same KIND. For example, you can monitor multiple PostgreSQL instances. Or you can monitor multiple web applications.
checkInterval: in Seconds is how often your service is called by tob.
enable you set true when you want to monitor the service. Set it to false, if you don't want to monitor it.
config.json
"postgresql_one": {
"kind": "postgresql",
"url": "postgres://demo:12345@localhost:5432/demo?sslmode=disable",
"checkInterval": 10,
"enable": false
},
"postgresql_two": {
"kind": "postgresql",
"url": "postgres://demo:12345@localhost:5433/demo?sslmode=disable",
"checkInterval": 10,
"enable": false
},
"web_internal": {
"kind": "web",
"url": "https://portal.mycompany.com/health-check",
"checkInterval": 5,
"enable": true
},
"web_main_1": {
"kind": "web",
"url": "https://mycompany.com/health-check",
"checkInterval": 5,
"enable": true
}To monitor Disk Status on a Server Computer, tob requires a special agent that can be called by tob.
So we need to deploy an agent, in this case tob-http-agent to the Server Computer whose Disk Status we need to monitor.
$ wget https://github.com/telkomdev/tob/releases/download/2.0.7/tob-http-agent-1.1.0.linux-amd64.tar.gzDownload tob-http-agent-sha256sums.txt according to the binary version you downloaded https://github.com/telkomdev/tob/releases/download/2.0.7/tob-http-agent-sha256sums.txt
$ wget https://github.com/telkomdev/tob/releases/download/2.0.7/tob-http-agent-sha256sums.txtLinux
$ sha256sum tob-http-agent-1.1.0.linux-amd64.tar.gz -c tob-http-agent-sha256sums.txt
tob-http-agent-1.1.0.linux-amd64.tar.gz: OK$ tar -xvzf tob-http-agent-1.1.0.linux-amd64.tar.gzCreate tob-http-agent.service systemd unit service
$ sudo vi /etc/systemd/system/tob-http-agent.serviceCopy content from this file to the /etc/systemd/system/tob-http-agent.service and save
https://github.com/telkomdev/tob/blob/master/deployments/systemd/tob-http-agent.service
Reload systemd daemon
$ sudo systemctl daemon-reloadStart tob-http-agent service
$ sudo systemctl start tob-http-agentCheck if its running
$ sudo systemctl status tob-http-agentCreate tob-http-agent.conf
$ sudo vi /etc/nginx/sites-available/tob-http-agent.confCopy content from this file to the /etc/nginx/sites-available/tob-http-agent.conf and save
https://github.com/telkomdev/tob/blob/master/deployments/nginx/tob-http-agent-nginx.conf
Create /etc/nginx/sites-available/tob-http-agent.conf symlink
$ sudo ln -s /etc/nginx/sites-available/tob-http-agent.conf /etc/nginx/sites-enabled/Make sure the nginx configuration is not error
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfulRestart nginx
$ sudo systemctl restart nginx"ubuntu_1_storage_status": {
"kind": "diskstatus",
"url": "http://tob-http-agent.yourdomain.com",
"checkInterval": 5,
"thresholdDiskUsage": 90,
"enable": true
}Currently tob supports the following types of Notificator. Notificator is where the tob will send notifications when one or more of the services you're monitoring have problems.
- Discord
- Email with SMTP
- Slack (webhook) https://api.slack.com/messaging/webhooks
- Telegram
- Webhook | For security reasons, your
webhook endpointmust verify the HTTP header:x-tob-tokenthat is in every incoming http request.
Example of x-tob-token webhook verification in nodejs application
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const PORT = 3001;
const tobToken = "461b919e-1bf4-42db-a8ff-4f21633bbf10";
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.post('/webhook/tob', (req, res) => {
const headers = req.headers;
const token = headers["x-tob-token"];
const verifiedRequest = token === tobToken;
if (!verifiedRequest) {
return res.status(401).send({'message': 'token is not valid'});
}
console.log(req.body);
return res.status(200).send({'message': 'webbhook received'});
});
app.listen(PORT, () => console.log(`Server listening on port: ${PORT}`));The tobToken variable must be the same as the tobToken config located in the config.json file
"webhook": {
"url": "https://api.yourcompany.com/webhook/tob",
"tobToken": "461b919e-1bf4-42db-a8ff-4f21633bbf10",
"enable": true
}tob will send a message/payload in the following form to the webhook endpoint that you have specified in the config above.
{
"message": "mysql_cluster_1 is DOWN"
}This monitoring dashboard will automatically run on the default port: 9115 when Tob is run. You can change the default port, dashboard title, JWT Key, username and password in the configuration file.
"dashboardHttpPort": 9115,
"dashboardTitle": "My Product Monitoring Dashboard",
"dashboardJwtKey": "czNWm7vGU1usgoVBcuuDCDJWi4wAngTn",
"dashboardUsername": "tob",
"dashboardPassword": "5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5",dashboardPassword is generated with the SHA256 Hash function. You can regenerate dashboardPassword with the gen_sha256_pass script in the scripts folder.
$ ./scripts/gen_sha256_pass.sh my-very-secret-pass
Generating SHA256 from 'my-very-secret-pass'
6386253716d4ae82864e0cfac19de10db5ba1824b1e5a63f209dcb178a9d82e3You can now access the Monitoring Dashboard on port 9115, or the port you specified.
$ http://localhost:9115
