Jinspector is an easy-to-use monitoring tool for Linux and Windows operating systems. Jinspector is based on SpringBoot, its main function is to offer an easy flexible way to monitor your services status on distributed systems. Jinspector does not provide monitoring metrics like network utilization, CPU load or disk space consumption. It just monitor whether your services are working or not and send an email report.
- Easy to install
- Simple configuration
- Cross platform
- Report friendly
- Flexible inspection
- No need to restart after modifying configuration
- Do issue inspections only
- The number of hosts is small
- Want to install and configure in an easy way
- Jinspector requires JDK1.8+ installed
- You need to know about yaml language, if you don't know this language, it doesn't matter, cause it's quite simple. You don't need to know all about this language, just follow the configuration sample and you will know how to configure it easily
Step 1: download the latest release
Step 2: unzip the release file
Step 3: find the config
folder, configure the files inside according to the configuration rules below
Step 4: go to the jinspector folder and run the monitoring progarm, for Linux use nohup java -jar jinspector.jar &
, for windows use java -jar jinspector.jar
This part needs to be accomplished
configuration files:
These files can be found in the latest release
This file is simple, it just used to identify your host, here is the example file:
id: anyid
This file describes which host will be chosen as a server and which port will the server use. In some cases a client can't send out inspection results because it has shut down due to unexpected reasons, so a list of required host ids are necessary, they can help you know whether the hosts' clients are working
server:
#server id
id: anyid
#server ip
ip: 108.61.174.70
#Jinspector server will use this port
port: 2333
#unique string that identify your clients
token: zxjawdjawdjgawgnnxuw
requiredHostIds:
#sometimes a client can't send out inspection results because it has shut down due to
#unexpected reasons, so a list of required host ids are necessary, they can help you know
#whether the hosts' clients are working
#Here are the list of host ids below, host id is configured at id.yml
- anyid
- clientid1
- clientid2
We can judge whether a service is running on a remote host mostly by its port, if the port is listening that will prove the service is running, for web aplications an accessible url tells the service works fine, all configurations in expose.yml can be access from outsite, sample configuration is as below:
# all name and description attributes are not required
connections:
web:
# full attributes edition
- connection:
name: ASF homepage
#(required) the url you want to check if it is accessible
url: http://www.apache.org/
description: The Apache Software Foundation website
# simplest attributes edition
- connection:
url: https://mvnrepository.com/
- connection:
name: unreachable site
url: https://www.unreachable.com
ports:
# full attributes edition
- connection:
name: mysql
#(required)
host: nanmatou.club
#(required)
port: 3306
description: mysql port
# simplest attributes edition
- connection:
host: nanmatou.club
port: 3319
Some services can't access from outside, the hosts have only private network environment, or like a timed task, it doesn't need to use a port, in this circumstance expose.yml won't work, so we need to configure local inspection, the configuration sample file is shown as below:
# all name and description attributes are not required
servers:
- server:
# the id is related to the id in id.yml
id: serverhostid
name: master
services:
# full attributes edition
- service:
name: Tomcat
inspectCommand: jps
expectedResult: Bootstrap
description: Is tomcat running?
# simplest attributes edition
- service:
inspectCommand: sudo docker ps
expectedResult: mysql
- service:
inspectCommand: ps -e
expectedResult: unknow process
- server:
id: clienthostid
name: client1
services:
- service:
inspectCommand: tasklist
expectedResult: chrome
- service:
inspectCommand: netstat -ano
expectedResult: 49664
The local inspections are made up of a group of severs, each server has an id
, which is configured at id.yml
, and name
is used to let you know which host it is, it will be displayed in an email report. Each server has several services
, each service
defines how you inpect the service and whether the service is running.For example, I want to know whether my docker mysql container is running on linux, so I logined to my linux server and typed the command "docker ps" and I saw this:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b7dea5675023 mysql:5.7 "docker-entrypoint.s…" 5 weeks ago Up 5 weeks 33060/tcp, 0.0.0.0:3318->3306/tcp mysql-service
So if I see mysql-service
, the docker mysql container is running, the configuration block is like below:
- service:
name: docker mysql
inspectCommand: docker ps
expectedResult: mysql-service
description: Whether the docker mysql container running
This file defines the email sender
and inspection shedule
, Jinspector has a built-in email sender, if you want to set up your own email config, please visit your mail service provider website for help, for gmail, check sending email via gmail
receivers
defines a list of email address you want to send to
in schedule
node, report
will send mail with all inspection results while inspect
only send results with issues
mail:
sender:
host: smtp.qq.com
port: 465
address: jinspector@foxmail.com
password: yjrvxfydupwkdfch
nickname: Jinspector
receivers:
- jinspector@foxmail.com
title: Jinspector
schedule:
report:
# 24-hour time display
initialTime: "16:57"
# in seconds
interval: 1*60*3
inspect:
initialTime: "10:18"
interval: 120
An email report will be like this:
Here are some inspectCommand tips:
netstat -ano # look for ports
tasklist # look processes on windows
ps aux | grep xxx.jar # find process on linux
......
Waiting for contibuters' advice
- web interface
- auto recover function
- use netty instead of tomcat for better performance
- complete the code comments and documents
- built-in inspect commands and auto find services
- set up docker version
Your contributions are always welcome!