├── .gitattributes ├── .github └── FUNDING.yml ├── doc ├── images │ ├── EasyMonitor.png │ ├── MonitorConfiguration.png │ ├── MonitorConfigurationJob.png │ ├── easymonitorProperties.png │ └── mailTpl_1000.png ├── readme_en.md └── readme_zh_CN.md ├── easymonitor_application ├── easymonitor-1.5.0-RELEASE-APPLICATION.jar ├── easymonitor.properties ├── log4j.properties ├── readme.md ├── shutdown.bat ├── shutdown.sh ├── startup.bat ├── startup.sh └── template │ └── mail.tpl ├── easymonitor_engine_framework ├── easymonitor-1.4.0-RELEASE-javadoc.jar ├── easymonitor-1.4.0-RELEASE-sources.jar ├── easymonitor-1.4.0-RELEASE.jar ├── easymonitor.properties ├── readme.md └── template │ └── mail.tpl └── readme.md /.gitattributes: -------------------------------------------------------------------------------- 1 | * linguist-language=Java 2 | 3 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: ['http://www.easyproject.cn/donation'] 13 | -------------------------------------------------------------------------------- /doc/images/EasyMonitor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ushelp/EasyMonitor/e845d543389b6a985462db9afd4b0a0e3bd65e1f/doc/images/EasyMonitor.png -------------------------------------------------------------------------------- /doc/images/MonitorConfiguration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ushelp/EasyMonitor/e845d543389b6a985462db9afd4b0a0e3bd65e1f/doc/images/MonitorConfiguration.png -------------------------------------------------------------------------------- /doc/images/MonitorConfigurationJob.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ushelp/EasyMonitor/e845d543389b6a985462db9afd4b0a0e3bd65e1f/doc/images/MonitorConfigurationJob.png -------------------------------------------------------------------------------- /doc/images/easymonitorProperties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ushelp/EasyMonitor/e845d543389b6a985462db9afd4b0a0e3bd65e1f/doc/images/easymonitorProperties.png -------------------------------------------------------------------------------- /doc/images/mailTpl_1000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ushelp/EasyMonitor/e845d543389b6a985462db9afd4b0a0e3bd65e1f/doc/images/mailTpl_1000.png -------------------------------------------------------------------------------- /doc/readme_en.md: -------------------------------------------------------------------------------- 1 | # EasyMonitor 2 | 3 | EasyMonitor is a free, open source, cross-platform system running monitoring service application and engine framework based on Java.. Can run as application(**EasyMonitor Application**), and can be extended as the monitoring engine(**EasyMonitor Engine Framework**). 4 | 5 | EasyMonitor provide support for the need to monitor the operating state of the program scene,notification, script execution is equal to function. And all this, just a simple configuration management to complete. 6 | 7 | The latest version: `1.5.0-RELEASE` 8 | 9 | ## EasyMonitor Feature 10 | 11 | - **The Monitor Engine Framework out of the box can run** 12 | - **Comprehensive monitoring type**. Support `URL`,`PORT`, `PROCESS`, `USER` are four types. 13 | - **Restart Auto detection**. When monitored program exception, after the program to restart without restarting EasyMonitor. 14 | - **Heat load**. Support hot during operation to modify `easymonitor.properties`, modify the monitoring configuration parameters without rebooting EasyMonitor. 15 | - **Flexible scheduling configuration**. It supports `CronExpression` monitoring task scheduling. 16 | - **Cycle repeated reminders**. You can configure alerts to be sent to monitor abnormal interval, several reminders reminder prevent omissions. 17 | - **Enhanced plug-in expansion**. Custom Monitor validator ( `MonitorValidator`) and the sender (` Sender`). 18 | - **Custom notification templates**. Based on a custom template `freemarker` notification support built-in variables, update the template automatically reloaded. 19 | - **Remote monitoring**. 20 | - **Runtime feedback**. Get monitor runtime infomation 21 | - **Simple and flexible configuration**. Only a simple configuration management, you can monitor and control configurations for different rules, the sensitivity, use and scenes services, message notification, and command script execution. 22 | 23 | 24 | ## EasyMonitor inner three components 25 | 26 | - **Monitor** 27 | It can be configured for, PORT (port server), PROCESS (server process), USER (user-defined monitoring validator) to monitor four types of services URL (URL address). 28 | 29 | - **Sender** 30 | When the monitored object stops automatically after the execution notifications, the Executive Email, SMS notification, a monitoring service can have multiple Sender. 31 | 32 | - **Commander** 33 | The exception occurs when the service monitoring, performs the specified custom scripts. 34 | 35 | ![EasyMonitor Three Components](images/EasyMonitor.png) 36 | 37 | ## MonitorConfiguration 38 | - `MonitorConfiguration`Object, encapsulates the data required for each of the monitoring service, and configuration information (Basic), complete configuration information (Properties), monitor validator (MonitorValidator) and sending a list of objects (SenderImpls). 39 | 40 | ![EasyMonitor Configuration](images/MonitorConfiguration.png) 41 | 42 | - EasyMonitor based on `Monitor Configuration` object, creating monitoring Job. 43 | 44 | ![EasyMonitor Configuration Job](images/MonitorConfigurationJob.png) 45 | 46 | ## Properties 47 | 48 | `easymonitor.properties` EasyMonitor core configuration file is configured to monitor all the information needed. 49 | 50 | ### Configuration Structure 51 | 52 | ![EasyMonitor Properties](images/easymonitorProperties.png) 53 | 54 | ### **Global Config**(default configuration, optional) 55 | 56 | ```properties 57 | ;###################### Global Config(Optional) 58 | 59 | # Monitor ON or OFF, default is ON 60 | easymonitor.enable=ON 61 | 62 | # Monitor trigger Cron-Expressions; default is '0/10 * * * * ?' 63 | easymonitor.cronexpression=0/10 * * * * ? 64 | 65 | # Monitor max failure count; default is 10 66 | easymonitor.maxfailure=10 67 | 68 | # Receive Error Report mail address 69 | # You can specify more than one, separated by a ; 70 | easymonitor.mail.receiver=sendermail@domain.com 71 | 72 | # Send Mail Account Config 73 | # Send Mail Account 74 | easymonitor.mail.sender=sendermail@domain.com 75 | # Send Mail password 76 | easymonitor.mail.sender.passowrd=mailpassword 77 | # Send Mail SMTP host 78 | easymonitor.mail.sender.host=smtp.domain.com 79 | # Send Mail SMTP port; default is 25 80 | easymonitor.mail.sender.port=25 81 | # Send Mail Whether use SSL; default is false 82 | easymonitor.mail.sender.ssl=false 83 | # Send Mail title 84 | easymonitor.mail.sender.title=Server Error Notice- EasyMonitor 85 | # The send mail content freemarker template in template directory, default is 'mail.tpl' 86 | easymonitor.mail.sender.template=mail.tpl 87 | # When error, repeat send mail interval(seconds); default is 0, not repeat 88 | easymonitor.mail.sender.interval=0 89 | 90 | # Execute Command 91 | # You can specify more than one, separated by a ; 92 | easymonitor.cmd=/user/app/startup.sh;/user/app/script.sh 93 | ``` 94 | ### **Monitor Service Configuration**(Overried global configuration) 95 | - **url** configuration 96 | - **port** configuration 97 | - **process** configuration 98 | - **user** configuration 99 | 100 | `NAME` is custom monitoring service name, each monitored service by a group of the same `NAME` configuration entries. 101 | 102 | ```properties 103 | ######################## Monitor Service configuration 104 | # easymonitor.[url|port|process|user].NAME=value 105 | # easymonitor.[url|port|process|user].NAME.enable=ON|OFF 106 | # easymonitor.[url|port|process|user].NAME.cronexpression=0/10 * * * * ? 107 | # easymonitor.[url|port|process|user].NAME.maxfailure=10 108 | # easymonitor.port.NAME.server=IP 109 | # easymonitor.user.NAME.validatorClass=package.MonitorValidatorClas 110 | 111 | # easymonitor.[url|port|process|user].NAME.cmd=/user/app/script.sh 112 | 113 | # easymonitor.[url|port|process|user].NAME.mail.receiver=receivermail@domain.com 114 | 115 | # easymonitor.[url|port|process|user].NAME.mail.sender=sendermail@domain.com 116 | # easymonitor.[url|port|process|user].NAME.mail.sender.passowrd=sendermail_password 117 | # easymonitor.[url|port|process|user].NAME.mail.sender.host=sendermail_host 118 | # easymonitor.[url|port|process|user].NAME.mail.sender.port=sendermail_port 119 | # easymonitor.[url|port|process|user].NAME.mail.sender.ssl=sendermail_ssh 120 | # easymonitor.[url|port|process|user].NAME.mail.sender.title=sendermail_title 121 | # easymonitor.[url|port|process|user].NAME.mail.sender.template=mail.tpl 122 | # easymonitor.[url|port|process|user].NAME.mail.sender.interval=1800 123 | 124 | # easymonitor.[url|port|process|user].NAME.sender.impl=package.userSenderClass;package.userSenderClass2 125 | ``` 126 | 127 | 128 | 129 | ## Examples of fully configured 130 | ```properties 131 | ######################## Global Config(Optional) 132 | 133 | # Monitor ON or OFF, default is ON 134 | easymonitor.enable=ON 135 | 136 | # Monitor trigger Cron-Expressions; default is '0/10 * * * * ?' 137 | easymonitor.cronexpression=0/10 * * * * ? 138 | 139 | # Monitor max failure count; default is 10 140 | easymonitor.maxfailure=10 141 | 142 | # Receive Error Report mail address 143 | # You can specify more than one, separated by a ; 144 | easymonitor.mail.receiver=yourmail@domain.com;youmail2@domai2.org 145 | 146 | # Send Mail Account Config 147 | # Send Mail Account 148 | easymonitor.mail.sender=sendermail@domain.com 149 | # Send Mail password 150 | easymonitor.mail.sender.passowrd=mailpassword 151 | # Send Mail SMTP host 152 | easymonitor.mail.sender.host=smtp.domain.com 153 | # Send Mail SMTP port; default is 25 154 | easymonitor.mail.sender.port=25 155 | # Send Mail Whether use SSL; default is false 156 | easymonitor.mail.sender.ssl=false 157 | # Send Mail title 158 | easymonitor.mail.sender.title=Server Error Notice- EasyMonitor 159 | # The send mail content freemarker template in template directory, default is 'mail.tpl' 160 | easymonitor.mail.sender.template=mail.tpl 161 | # When error, repeat send mail interval(seconds); default is 0, not repeat 162 | easymonitor.mail.sender.interval=0 163 | 164 | # Execute Command 165 | # You can specify more than one, separated by a ; 166 | easymonitor.cmd=/user/app/startup.sh 167 | 168 | 169 | ######################## Monitor Service Configuration 170 | 171 | ############ URL Monitor(can override global config) 172 | ## format: 173 | ## easymonitor.url.NAME=urlValue 174 | ## easymonitor.url.NAME.enable=ON|OFF 175 | ## easymonitor.url.NAME.cronexpression=0/10 * * * * ? 176 | ## easymonitor.url.NAME.maxfailure=10 177 | ## easymonitor.url.NAME.cmd=/user/app/script.sh 178 | ## easymonitor.url.NAME.mail.receiver=receivermail@domain.com 179 | ## easymonitor.url.NAME.mail.sender=sendermail@domain.com 180 | ## easymonitor.url.NAME.mail.sender.passowrd=sendermail_password 181 | ## easymonitor.url.NAME.mail.sender.host=sendermail_host 182 | ## easymonitor.url.NAME.mail.sender.port=sendermail_port 183 | ## easymonitor.url.NAME.mail.sender.ssl=sendermail_ssh 184 | ## easymonitor.url.NAME.mail.sender.title=sendermail_title 185 | ## easymonitor.url.NAME.mail.sender.template=mail.tpl 186 | ## easymonitor.url.NAME.mail.sender.interval=1800 187 | ## easymonitor.url.NAME.sender.impl=package.userSenderClass;package.userSenderClass2 188 | 189 | # Example: 190 | easymonitor.url.tomcatServer1=http\://127.0.0.1\:8888 191 | easymonitor.url.tomcatServer1.cronexpression=0/5 * * * * ? 192 | easymonitor.url.tomcatServer1.maxfailure=4 193 | easymonitor.url.tomcatServer1.mail.receiver=yourmail@domain.com;yourmail@domain.org 194 | easymonitor.url.tomcatServer1.mail.sender.interval=30 195 | easymonitor.url.tomcatServer1.cmd=/home/app/tomcat/bin/startup.sh 196 | # easymonitor.url.tomcatServer1.sender.impl=user.SMSSender;user.OtherSender 197 | 198 | 199 | ############ Port Monitor(can override global config) 200 | ## format: 201 | ## easymonitor.port.NAME=portValue 202 | ## easymonitor.port.NAME.server=IP 203 | ## easymonitor.port.NAME.enable=ON|OFF 204 | ## easymonitor.port.NAME.cronexpression=0/10 * * * * ? 205 | ## easymonitor.port.NAME.maxfailure=10 206 | ## easymonitor.port.NAME.cmd=/user/app/script.sh 207 | ## easymonitor.port.NAME.mail.receiver=receivermail@domain.com 208 | ## easymonitor.port.NAME.mail.sender=sendermail@domain.com 209 | ## easymonitor.port.NAME.mail.sender.passowrd=sendermail_password 210 | ## easymonitor.port.NAME.mail.sender.host=sendermail_host 211 | ## easymonitor.port.NAME.mail.sender.port=sendermail_port 212 | ## easymonitor.port.NAME.mail.sender.ssl=sendermail_ssh 213 | ## easymonitor.port.NAME.mail.sender.title=sendermail_title 214 | ## easymonitor.port.NAME.mail.sender.template=mail.tpl 215 | ## easymonitor.port.NAME.mail.sender.interval=1800 216 | ## easymonitor.port.NAME.sender.impl=package.userSenderClass;package.userSenderClass2 217 | 218 | # Example: 219 | easymonitor.port.tomcatServer1=8080 220 | easymonitor.port.tomcatServer1.server=localhost 221 | easymonitor.port.tomcatServer1.cronexpression=0/3 * * * * ? 222 | easymonitor.port.tomcatServer1.maxfailure=4 223 | easymonitor.port.tomcatServer1.mail.receiver=yourmail@domain.com;yourmail@domain.org 224 | easymonitor.port.tomcatServer1.mail.sender.interval=30 225 | easymonitor.port.tomcatServer1.cmd=/home/app/tomcat/bin/startup.sh 226 | 227 | 228 | ############ Process Monitor(can override global config) 229 | ## format: 230 | ## easymonitor.process.NAME=processValue 231 | ## easymonitor.process.NAME.enable=ON|OFF 232 | ## easymonitor.process.NAME.cronexpression=0/10 * * * * ? 233 | ## easymonitor.process.NAME.maxfailure=10 234 | ## easymonitor.process.NAME.cmd=/user/app/script.sh 235 | ## easymonitor.process.NAME.mail.receiver=receivermail@domain.com 236 | ## easymonitor.process.NAME.mail.sender=sendermail@domain.com 237 | ## easymonitor.process.NAME.mail.sender.passowrd=sendermail_password 238 | ## easymonitor.process.NAME.mail.sender.host=sendermail_host 239 | ## easymonitor.process.NAME.mail.sender.port=sendermail_port 240 | ## easymonitor.process.NAME.mail.sender.ssl=sendermail_ssh 241 | ## easymonitor.process.NAME.mail.sender.title=sendermail_title 242 | ## easymonitor.process.NAME.mail.sender.template=mail.tpl 243 | ## easymonitor.process.NAME.mail.sender.interval=1800 244 | ## easymonitor.process.NAME.sender.impl=package.userSenderClass;package.userSenderClass2 245 | 246 | # Example: 247 | easymonitor.process.tomcatServer1=tomcat 248 | easymonitor.process.tomcatServer1.cronexpression=0/3 * * * * ? 249 | easymonitor.process.tomcatServer1.maxfailure=4 250 | easymonitor.process.tomcatServer1.mail.receiver=yourmail@domain.com;yourmail@domain.org 251 | easymonitor.process.tomcatServer1.mail.sender.interval=30 252 | easymonitor.process.tomcatServer1.cmd=/home/app/tomcat/bin/startup.sh 253 | 254 | 255 | ############ User define Monitor(can override global config) 256 | ## format: 257 | ## easymonitor.user.NAME=userValue 258 | ## easymonitor.user.NAME.validatorClass=validator.UserMonitorValidator 259 | ## easymonitor.user.NAME.enable=ON|OFF 260 | ## easymonitor.user.NAME.cronexpression=0/10 * * * * ? 261 | ## easymonitor.user.NAME.maxfailure=10 262 | ## easymonitor.user.NAME.cmd=/user/app/script.sh 263 | ## easymonitor.user.NAME.mail.receiver=receivermail@domain.com 264 | ## easymonitor.user.NAME.mail.sender=sendermail@domain.com 265 | ## easymonitor.user.NAME.mail.sender.passowrd=sendermail_password 266 | ## easymonitor.user.NAME.mail.sender.host=sendermail_host 267 | ## easymonitor.user.NAME.mail.sender.port=sendermail_port 268 | ## easymonitor.user.NAME.mail.sender.ssl=sendermail_ssh 269 | ## easymonitor.user.NAME.mail.sender.title=sendermail_title 270 | ## easymonitor.user.NAME.mail.sender.template=mail.tpl 271 | ## easymonitor.user.NAME.mail.sender.interval=1800 272 | ## easymonitor.user.NAME.sender.impl=package.userSenderClass;package.userSenderClass2 273 | 274 | # Example: 275 | easymonitor.user.fileExistsMonitor=data.txt 276 | easymonitor.user.fileExistsMonitor.validatorClass=user.YourFileMonitorValidator 277 | easymonitor.user.fileExistsMonitor.cmd=/home/app/create.sh 278 | easymonitor.user.fileExistsMonitor.cronexpression=0/5 * * * * ? 279 | easymonitor.user.fileExistsMonitor.mail.sender.interval=30 280 | easymonitor.user.fileExistsMonitor.mail.receiver=yourmail@domain.com;yourmail@domain.org 281 | easymonitor.user.fileExistsMonitor.maxfailure=4 282 | easymonitor.user.fileExistsMonitor.sender.impl=user.SMSSender;user.OtherSender 283 | ``` 284 | 285 | 286 | ## Mail template configuration 287 | EasyMonitor use `freemarker` mail content rendering technology template, the template must be stored in the directory` template`, `mail.tpl` default template. 288 | 289 | ![mail.tpl](images/mailTpl_1000.png) 290 | 291 | 292 | ### Custom template configuration 293 | 294 | You can modify the template content, or write your own messages to send template. 295 | 296 | ```properties 297 | ### Global configuration 298 | easymonitor.mail.sender.template=yourmail.tpl 299 | 300 | ### Monitor Service configuration 301 | easymonitor.[url|port|process|user].NAME.mail.sender.template=yourmail.tpl 302 | ``` 303 | 304 | ### Template built-in freemarker variables 305 | ``` 306 | ${type}: Monitoring Service Type 307 | ${name}: Monitoring Service Name 308 | ${value}: Monitoring Service value 309 | ${stoptime?datetime}: Monitoring target stop time 310 | ${monitorConfiguration}: Monitoring object 311 | ``` 312 | 313 | 314 | 315 | ## EasyMonitor Application 316 | 317 | **EasyMonitor Application** can run as application. Configure your monitoring service as needed, can be activated. 318 | 319 | ### Steps for usage 320 | 321 | 1. **Configuration monitor services** 322 | 323 | `Easymonitor.properties` the reference sample, configure your monitoring service. 324 | 325 | 2. **Run EasyMonitor** 326 | 327 | - **Windows**(Sometimes you must '`Run as Administrator`') 328 | 329 | ``` 330 | Start: startup.bat 331 | Stop: shutdown.bat 332 | ``` 333 | 334 | - **Unix** 335 | 336 | ``` 337 | Start: ./startup.sh 338 | Stop: ./shutdown.sh 339 | ``` 340 | 341 | 3. **Optional** 342 | 343 | 1. **Mail template** 344 | 345 | You can edit '`template/mail.tpl`' to customize send mail content. 346 | 347 | 2. **Logger** 348 | 349 | configure `log4j.properties` to out log. 350 | 351 | 352 | 353 | ## EasyMonitor Engine Framework 354 | 355 | EasyMonitor is also a free open source cross-platform Java monitoring engine framework that provides standardized monitoring configuration and core scheduling. 356 | 357 | You only need to develop your own monitoring and control system ( MonitorValidator`) and notify the sender (`Sender`), on-demand can be. 358 | 359 | 360 | ### Steps for usage 361 | 362 | 1. Maven dependency 363 | 364 | ```XML 365 | 366 | cn.easyproject 367 | easymonitor 368 | 1.5.0-RELEASE 369 | 370 | ``` 371 | 372 | 2. Custom `Monitor Validator` monitor or` Sender` notify the sender of the implementation class 373 | 374 | 3. Configure `easymonitor.properties` 375 | 376 | 4. Start 377 | ```JAVA 378 | public static void main(String[] args) { 379 | new EasyMonitor().start(); 380 | } 381 | ``` 382 | 383 | 384 | ### Custom MonitorValidator 385 | 386 | Only implement the interface `MonitorValidator`, according to the judgment result to rule returns` ValidatorResult`. 387 | 388 | - **MonitorValidator implements example** 389 | 390 | ```JAVA 391 | /** 392 | * User Monitor Example. 393 | * To monitor the file whether exists. 394 | */ 395 | public class FileMonitorValidator implements MonitorValidator { 396 | 397 | public ValidatorResult validate(MonitorConfiguration configuration) { 398 | // ONLY A DEMO 399 | System.out.println("file check !"); 400 | 401 | ValidatorResult result; 402 | 403 | File file=new File(configuration.getValue()); 404 | 405 | if(file.exists()){ 406 | result=ValidatorResult.VALIDATION; 407 | }else{ 408 | result=ValidatorResult.INVALIDATION; 409 | } 410 | 411 | return result; 412 | } 413 | } 414 | ``` 415 | 416 | - **ValidatorResult enum items** 417 | 418 | ``` JAVA 419 | /** 420 | * Validator pass 421 | */ 422 | VALIDATION, 423 | /** 424 | * Validator not pass 425 | */ 426 | INVALIDATION, 427 | /** 428 | * Ignore this validator result 429 | */ 430 | IGNORE; 431 | ``` 432 | 433 | - **Configure easymonitor.user.Name type user custome ValidatorMonitor** 434 | Note Specifying `validatoClass` configuration parameters. 435 | 436 | ```properties 437 | # Example: 438 | easymonitor.user.fileExistsMonitor=data.txt 439 | easymonitor.user.fileExistsMonitor.validatorClass=user.FileMonitorValidator 440 | easymonitor.user.fileExistsMonitor.cronexpression=0/5 * * * * ? 441 | easymonitor.user.fileExistsMonitor.mail.sender.interval=30 442 | easymonitor.user.fileExistsMonitor.mail.receiver=yourmail@domain.com;yourmail@domain.org 443 | easymonitor.user.fileExistsMonitor.cmd=/home/app/create.sh 444 | easymonitor.user.fileExistsMonitor.maxfailure=4 445 | ``` 446 | 447 | 448 | ### Custom Sender 449 | 450 | A monitoring service can customize many `Sender`. When a monitored service exceptions, you can perform the corresponding `SenderImpls` send reminders. 451 | 452 | Only to implements `Sender` interface. 453 | 454 | - **Sender Example** 455 | ```JAVA 456 | /** 457 | * User Sender Example. 458 | * Send a SMS 459 | */ 460 | public class SMSSender implements Sender{ 461 | public void send(MonitorConfiguration configuration) { 462 | // ONLY A DEMO 463 | System.out.println("SMS Sending..."); 464 | System.out.println(configuration); 465 | System.out.println(GlobalMonitorConfiguration.properties); 466 | System.out.println("Send completed"); 467 | } 468 | } 469 | ``` 470 | 471 | - **Configure Sender** 472 | 473 | Note Specifying `sender.impl` configuration parameters. 474 | 475 | ```properties 476 | # Example: 477 | easymonitor.[url|port|process|user].NAME.sender.impl=user.SMSSender;user.OtherSender 478 | ``` 479 | 480 | ### Custom Properties File and Freemarker Configuration object 481 | To provide more flexibility, EasyMonitor permit before starting Monitor service ** custom Properties File object** ( `easyMonitor.properties`) and ** mail to send Freemarker Configuration object** (` Configuration`). 482 | 483 | 484 | ```JAVA 485 | // Custom Properties File 486 | EasyMonitor.setPropertiesFile(java.io.File propertiesFile); 487 | 488 | // Custom mail to send Freemarker Configuration object 489 | MailSender.setFreemarkerConfiguration(freemarker.template.Configuration configuration); 490 | ``` 491 | 492 | Example: 493 | 494 | ```JAVA 495 | // Custom EasyMonitor initialization Parameter 496 | 497 | // Custom Properties File 498 | Resource res = new ServletContextResource(sce.getServletContext(), "/easyMonitor.properties"); 499 | try { 500 | // Properties File 501 | EasyMonitor.setPropertiesFile(res.getFile()); 502 | } catch (IOException e) { 503 | e.printStackTrace(); 504 | } 505 | 506 | // Custom mail to send Freemarker Configuration object 507 | Configuration cfg= new Configuration(Configuration.VERSION_2_3_23); 508 | cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); 509 | cfg.setDefaultEncoding("UTF-8"); 510 | cfg.setServletContextForTemplateLoading(sce.getServletContext(), "/template"); 511 | // MailSender Configuration 512 | MailSender.setFreemarkerConfiguration(cfg); 513 | ``` 514 | 515 | ### Runtime access to information 516 | 517 | `cn.easyproject.easymonitor.MonitorRuntime` providing information Monitor runtime. 518 | 519 | ``` 520 | # Monitor controller 521 | start() 522 | stop() 523 | 524 | # Information when started 525 | started: Wheter started 526 | allMonitorsOnStartup 527 | runningMonitorsOnStartup 528 | errorJobMonitorsOnStartup 529 | 530 | # Configuration information 531 | getMonitorNames(): All configuration names 532 | getMonitorsConfigurations(): All configuration objects 533 | getEnableMonitorsConfigurations(): All enable(enable=ON) configuration objects 534 | getGlobalMonitorsConfiguration(): Global Configuration object 535 | getProperties(): Properties object 536 | getPropertiesFile(): Properties File object 537 | ``` 538 | 539 | 540 | ## End 541 | 542 | [The official home page](http://www.easyproject.cn/easymonitor/en/index.jsp 'The official home page') 543 | 544 | [Comments](http://www.easyproject.cn/easymonitor/en/index.jsp#donation 'Comments') 545 | 546 | If you have more comments, suggestions or ideas, please contact me. 547 | 548 | Email: 549 | 550 | [http://www.easyproject.cn](http://www.easyproject.cn "EasyProject Home") 551 | 552 | 553 | 554 | 555 | We believe that the contribution of each bit by bit, will be driven to produce more and better free and open source products a big step. 556 | 557 | **Thank you donation to support the server running and encourage more community members.** 558 | 559 | [![PayPal](http://www.easyproject.cn/images/paypaldonation5.jpg)](https://www.paypal.me/easyproject/10 "Make payments with PayPal - it's fast, free and secure!") 560 | 561 | -------------------------------------------------------------------------------- /doc/readme_zh_CN.md: -------------------------------------------------------------------------------- 1 | # EasyMonitor 2 | 3 | EasyMonitor 是一个基于 Java 的免费开源跨平台系统运行监控服务应用及引擎框架。即可开箱即用(**EasyMonitor Application**),又可以作为监控引擎框架扩展(**EasyMonitor Engine Framework**)。 4 | 5 | EasyMonitor 能够为需要运行状态监控的程序场景提供一体化支持,提供集合了运行监控,通知发送,脚本执行等于功能。而这一切,仅需进行简单的配置管理即可完成。 6 | 7 | 最新版本: `1.5.0-RELEASE` 8 | 9 | ## EasyMonitor 特点 10 | 11 | - **开箱即用的监控引擎框架**。 12 | - **全面的类型监控**。支持 `URL`, `PORT`, `PROCESS`, `USER` 四种类型 13 | - **自动重启检测**。监控到程序异常,对程序进行恢复后,无需重新启动 EasyMonitor 14 | - **热加载**。支持运行期间热修改 `easymonitor.properties`,修改监控配置参数无需重启 EasyMonitor 15 | - **灵活的调度配置**。支持基于 `CronExpression` 的监控任务调度 16 | - **周期重复提醒**。可以配置监控异常提醒发送间隔,多次提醒,防止提醒疏漏 17 | - **插件式扩展增强**。自定义监控验证器(`MonitorValidator`) 和发送者(`Sender`) 18 | - **自定义通知模板**。基于 `freemarker` 的自定义通知模板,支持内置变量使用,更新模板自动重新加载 19 | - **远程监控**。 20 | - **运行时信息反馈**。获得监控运行时状况 21 | - **配置简单灵活**。仅需简单配置管理,即可实现针对不同规则、敏感度、用途和场景服务的监控配置,消息通知,及命令脚本执行 22 | 23 | 24 | ## EasyMonitor 内部工作三大组件 25 | 26 | - **Monitor(监控器)** 27 | 可以配置针对 URL(URL 地址), PORT(服务器端口),PROCESS(服务器进程),USER(用户自定义监控验证器) 四种类型服务的监控。 28 | 29 | - **Sender(发送者)** 30 | 当发现监控对象停止后,自动执行发送通知,执行 `Email`、 `SMS 短信` 通知等,一个监控服务可以有多个 Sender。 31 | 32 | - **Commander(命令执行)** 33 | 监控的服务发生异常时,执行指定的自定义脚本。 34 | 35 | ![EasyMonitor Three Components](images/EasyMonitor.png) 36 | 37 | ## MonitorConfiguration 38 | - `MonitorConfiguration` 对象,封装了每一项监控服务所需的相关数据和配置信息(Basic),完全配置信息(Properties),监控验证器(MonitorValidator)和发送对象列表(SenderImpls)。 39 | 40 | ![EasyMonitor Configuration](images/MonitorConfiguration.png) 41 | 42 | - EasyMonitor 会根据 `MonitorConfiguration` 对象,创建监控 Job。 43 | 44 | ![EasyMonitor Configuration Job](images/MonitorConfigurationJob.png) 45 | 46 | ## Properties 47 | 48 | `easymonitor.properties` 是 EasyMonitor 的核心配置文件,配置了监控所需的所有信息。 49 | 50 | ### 配置结构 51 | 52 | ![EasyMonitor Properties](images/easymonitorProperties.png) 53 | 54 | ### **全局配置**(作为监控服务配置的全局默认值,可选) 55 | 56 | ```properties 57 | # Monitor ON or OFF, default is ON 58 | # 监控服务默认是否打开,默认为 ON 59 | easymonitor.enable=ON 60 | 61 | # Monitor trigger Cron-Expressions; default is '0/10 * * * * ?' 62 | # 监控服务的默认调度 Cron-Expressions; 默认为 '0/10 * * * * ?' 63 | easymonitor.cronexpression=0/10 * * * * ? 64 | 65 | # Monitor max failure count; default is 10 66 | # 判断监控服务是否异常的默认最大失败次数;默认为 10 67 | easymonitor.maxfailure=10 68 | 69 | # Receive Error Report mail address 70 | # You can specify more than one, separated by a ; 71 | # 接收监控通知提醒的邮箱列表,多个邮箱使用 ; 分隔 72 | easymonitor.mail.receiver=yourmail@domain.com;youmail2@domai2.org 73 | 74 | # Send Mail Account Config 75 | # 邮箱发送者账户配置 76 | # Send Mail Account 77 | easymonitor.mail.sender=sendermail@domain.com 78 | # Send Mail password 79 | # 邮箱发送者密码 80 | easymonitor.mail.sender.passowrd=mailpassword 81 | # Send Mail SMTP host 82 | # 邮箱发送者 host 83 | easymonitor.mail.sender.host=smtp.163.com 84 | # Send Mail SMTP port; default is 25 85 | # 邮箱发送者 host 端口 86 | easymonitor.mail.sender.port=25 87 | # Send Mail Whether use SSL; default is false 88 | # 是否使用了 SSL 协议 89 | easymonitor.mail.sender.ssl=false 90 | # Send Mail title 91 | # 邮件发送标题 92 | easymonitor.mail.sender.title=Server Error Notice- EasyMonitor 93 | # The send mail content freemarker template in template directory, default is 'mail.tpl' 94 | # template 目录下的邮件发送模板,默认为 mail.tpl 95 | easymonitor.mail.sender.template=mail.tpl 96 | # When error, repeat send mail interval(seconds); default is 0, not repeat 97 | # 当监控服务发现错误时,是否按周期进行重复提醒(秒);默认为 0,不进行重复提醒 98 | easymonitor.mail.sender.interval=0 99 | 100 | # Execute Command 101 | # You can specify more than one, separated by a ; 102 | # 自动执行的脚本命令,多个脚本命令使用 ; 分隔 103 | easymonitor.cmd=/user/app/startup.sh 104 | ``` 105 | 106 | ### **监控服务配置**(可以覆盖全局配置的默认值) 107 | - **url** 监控配置 108 | - **port** 端口监控配置 109 | - **process** 进程监控配置 110 | - **user** 自定义监控配置 111 | 112 | `NAME` 是自定义的监控服务名称,每个监控服务由一组相同 `NAME` 的配置项组成。 113 | 114 | ```properties 115 | ######################## Monitor Service configuration 116 | easymonitor.[url|port|process|user].NAME=value 117 | easymonitor.[url|port|process|user].NAME.enable=ON|OFF 118 | easymonitor.[url|port|process|user].NAME.cronexpression=0/10 * * * * ? 119 | easymonitor.[url|port|process|user].NAME.maxfailure=10 120 | easymonitor.port.NAME.server=IP 121 | easymonitor.user.NAME.validatorClass=package.MonitorValidatorClas 122 | 123 | easymonitor.[url|port|process|user].NAME.cmd=/user/app/script.sh 124 | 125 | easymonitor.[url|port|process|user].NAME.mail.receiver=receivermail@domain.com 126 | 127 | easymonitor.[url|port|process|user].NAME.mail.sender=sendermail@domain.com 128 | easymonitor.[url|port|process|user].NAME.mail.sender.passowrd=sendermail_password 129 | easymonitor.[url|port|process|user].NAME.mail.sender.host=sendermail_host 130 | easymonitor.[url|port|process|user].NAME.mail.sender.port=sendermail_port 131 | easymonitor.[url|port|process|user].NAME.mail.sender.ssl=sendermail_ssh 132 | easymonitor.[url|port|process|user].NAME.mail.sender.title=sendermail_title 133 | easymonitor.[url|port|process|user].NAME.mail.sender.template=mail.tpl 134 | easymonitor.[url|port|process|user].NAME.mail.sender.interval=1800 135 | 136 | easymonitor.[url|port|process|user].NAME.sender.impl=package.userSenderClass;package.userSenderClass2 137 | ``` 138 | 139 | 140 | 141 | ## 完全配置示例 142 | ```properties 143 | ######################## Global Config(Optional) 全局配置(可选) 144 | 145 | # Monitor ON or OFF, default is ON 146 | # 监控服务默认是否打开,默认为 ON 147 | easymonitor.enable=ON 148 | 149 | # Monitor trigger Cron-Expressions; default is '0/10 * * * * ?' 150 | # 监控服务的默认调度 Cron-Expressions; 默认为 '0/10 * * * * ?' 151 | easymonitor.cronexpression=0/10 * * * * ? 152 | 153 | # Monitor max failure count; default is 10 154 | # 判断监控服务是否异常的默认最大失败次数;默认为 10 155 | easymonitor.maxfailure=10 156 | 157 | # Receive Error Report mail address 158 | # You can specify more than one, separated by a ; 159 | # 接收监控通知提醒的邮箱列表,多个邮箱使用 ; 分隔 160 | easymonitor.mail.receiver=yourmail@domain.com;youmail2@domai2.org 161 | 162 | # Send Mail Account Config 163 | # 邮箱发送者账户配置 164 | # Send Mail Account 165 | easymonitor.mail.sender=sendermail@domain.com 166 | # Send Mail password 167 | # 邮箱发送者密码 168 | easymonitor.mail.sender.passowrd=mailpassword 169 | # Send Mail SMTP host 170 | # 邮箱发送者 host 171 | easymonitor.mail.sender.host=smtp.domain.com 172 | # Send Mail SMTP port; default is 25 173 | # 邮箱发送者 host 端口 174 | easymonitor.mail.sender.port=25 175 | # Send Mail Whether use SSL; default is false 176 | # 是否使用了 SSL 协议 177 | easymonitor.mail.sender.ssl=false 178 | # Send Mail title 179 | # 邮件发送标题 180 | easymonitor.mail.sender.title=Server Error Notice- EasyMonitor 181 | # The send mail content freemarker template in template directory, default is 'mail.tpl' 182 | # template 目录下的邮件发送模板,默认为 mail.tpl 183 | easymonitor.mail.sender.template=mail.tpl 184 | # When error, repeat send mail interval(seconds); default is 0, not repeat 185 | # 当监控服务发现错误时,是否按周期进行重复提醒(秒);默认为 0,不进行重复提醒 186 | easymonitor.mail.sender.interval=0 187 | 188 | # Execute Command 189 | # You can specify more than one, separated by a ; 190 | # 自动执行的脚本命令,多个脚本命令使用 ; 分隔 191 | easymonitor.cmd=/user/app/startup.sh 192 | 193 | 194 | ######################## Monitor Service Configuration 监控配置 195 | 196 | ############ URL Monitor(can override global config) 197 | ## format: 198 | ## 格式: 199 | ## easymonitor.url.NAME=urlValue 200 | ## easymonitor.url.NAME.enable=ON|OFF 201 | ## easymonitor.url.NAME.cronexpression=0/10 * * * * ? 202 | ## easymonitor.url.NAME.maxfailure=10 203 | ## easymonitor.url.NAME.cmd=/user/app/script.sh 204 | ## easymonitor.url.NAME.mail.receiver=receivermail@domain.com 205 | ## easymonitor.url.NAME.mail.sender=sendermail@domain.com 206 | ## easymonitor.url.NAME.mail.sender.passowrd=sendermail_password 207 | ## easymonitor.url.NAME.mail.sender.host=sendermail_host 208 | ## easymonitor.url.NAME.mail.sender.port=sendermail_port 209 | ## easymonitor.url.NAME.mail.sender.ssl=sendermail_ssh 210 | ## easymonitor.url.NAME.mail.sender.title=sendermail_title 211 | ## easymonitor.url.NAME.mail.sender.template=mail.tpl 212 | ## easymonitor.url.NAME.mail.sender.interval=1800 213 | ## easymonitor.url.NAME.sender.impl=package.userSenderClass;package.userSenderClass2 214 | 215 | # Example: 216 | easymonitor.url.tomcatServer1=http\://127.0.0.1\:8888 217 | easymonitor.url.tomcatServer1.cronexpression=0/5 * * * * ? 218 | easymonitor.url.tomcatServer1.maxfailure=4 219 | easymonitor.url.tomcatServer1.mail.receiver=yourmail@domain.com;yourmail@domain.org 220 | easymonitor.url.tomcatServer1.mail.sender.interval=30 221 | easymonitor.url.tomcatServer1.cmd=/home/app/tomcat/bin/startup.sh 222 | # easymonitor.url.tomcatServer1.sender.impl=user.SMSSender;user.OtherSender 223 | 224 | 225 | ############ Port Monitor(can override global config) 226 | ## format: 227 | ## easymonitor.port.NAME=portValue 228 | ## easymonitor.port.NAME.server=IP 229 | ## easymonitor.port.NAME.enable=ON|OFF 230 | ## easymonitor.port.NAME.cronexpression=0/10 * * * * ? 231 | ## easymonitor.port.NAME.maxfailure=10 232 | ## easymonitor.port.NAME.cmd=/user/app/script.sh 233 | ## easymonitor.port.NAME.mail.receiver=receivermail@domain.com 234 | ## easymonitor.port.NAME.mail.sender=sendermail@domain.com 235 | ## easymonitor.port.NAME.mail.sender.passowrd=sendermail_password 236 | ## easymonitor.port.NAME.mail.sender.host=sendermail_host 237 | ## easymonitor.port.NAME.mail.sender.port=sendermail_port 238 | ## easymonitor.port.NAME.mail.sender.ssl=sendermail_ssh 239 | ## easymonitor.port.NAME.mail.sender.title=sendermail_title 240 | ## easymonitor.port.NAME.mail.sender.template=mail.tpl 241 | ## easymonitor.port.NAME.mail.sender.interval=1800 242 | ## easymonitor.port.NAME.sender.impl=package.userSenderClass;package.userSenderClass2 243 | 244 | # Example: 245 | easymonitor.port.tomcatServer1=8080 246 | easymonitor.port.tomcatServer1.server=localhost 247 | easymonitor.port.tomcatServer1.cronexpression=0/3 * * * * ? 248 | easymonitor.port.tomcatServer1.maxfailure=4 249 | easymonitor.port.tomcatServer1.mail.receiver=yourmail@domain.com;yourmail@domain.org 250 | easymonitor.port.tomcatServer1.mail.sender.interval=30 251 | easymonitor.port.tomcatServer1.cmd=/home/app/tomcat/bin/startup.sh 252 | 253 | 254 | ############ Process Monitor(can override global config) 255 | ## format: 256 | ## easymonitor.process.NAME=processValue 257 | ## easymonitor.process.NAME.enable=ON|OFF 258 | ## easymonitor.process.NAME.cronexpression=0/10 * * * * ? 259 | ## easymonitor.process.NAME.maxfailure=10 260 | ## easymonitor.process.NAME.cmd=/user/app/script.sh 261 | ## easymonitor.process.NAME.mail.receiver=receivermail@domain.com 262 | ## easymonitor.process.NAME.mail.sender=sendermail@domain.com 263 | ## easymonitor.process.NAME.mail.sender.passowrd=sendermail_password 264 | ## easymonitor.process.NAME.mail.sender.host=sendermail_host 265 | ## easymonitor.process.NAME.mail.sender.port=sendermail_port 266 | ## easymonitor.process.NAME.mail.sender.ssl=sendermail_ssh 267 | ## easymonitor.process.NAME.mail.sender.title=sendermail_title 268 | ## easymonitor.process.NAME.mail.sender.template=mail.tpl 269 | ## easymonitor.process.NAME.mail.sender.interval=1800 270 | ## easymonitor.process.NAME.sender.impl=package.userSenderClass;package.userSenderClass2 271 | 272 | # Example: 273 | easymonitor.process.tomcatServer1=tomcat 274 | easymonitor.process.tomcatServer1.cronexpression=0/3 * * * * ? 275 | easymonitor.process.tomcatServer1.maxfailure=4 276 | easymonitor.process.tomcatServer1.mail.receiver=yourmail@domain.com;yourmail@domain.org 277 | easymonitor.process.tomcatServer1.mail.sender.interval=30 278 | easymonitor.process.tomcatServer1.cmd=/home/app/tomcat/bin/startup.sh 279 | 280 | 281 | ############ User define Monitor(can override global config) 282 | ## format: 283 | ## easymonitor.user.NAME=userValue 284 | ## easymonitor.user.NAME.validatorClass=validator.UserMonitorValidator 285 | ## easymonitor.user.NAME.enable=ON|OFF 286 | ## easymonitor.user.NAME.cronexpression=0/10 * * * * ? 287 | ## easymonitor.user.NAME.maxfailure=10 288 | ## easymonitor.user.NAME.cmd=/user/app/script.sh 289 | ## easymonitor.user.NAME.mail.receiver=receivermail@domain.com 290 | ## easymonitor.user.NAME.mail.sender=sendermail@domain.com 291 | ## easymonitor.user.NAME.mail.sender.passowrd=sendermail_password 292 | ## easymonitor.user.NAME.mail.sender.host=sendermail_host 293 | ## easymonitor.user.NAME.mail.sender.port=sendermail_port 294 | ## easymonitor.user.NAME.mail.sender.ssl=sendermail_ssh 295 | ## easymonitor.user.NAME.mail.sender.title=sendermail_title 296 | ## easymonitor.user.NAME.mail.sender.template=mail.tpl 297 | ## easymonitor.user.NAME.mail.sender.interval=1800 298 | ## easymonitor.user.NAME.sender.impl=package.userSenderClass;package.userSenderClass2 299 | 300 | # Example: 301 | easymonitor.user.fileExistsMonitor=data.txt 302 | easymonitor.user.fileExistsMonitor.validatorClass=user.YourFileMonitorValidator 303 | easymonitor.user.fileExistsMonitor.cmd=/home/app/create.sh 304 | easymonitor.user.fileExistsMonitor.cronexpression=0/5 * * * * ? 305 | easymonitor.user.fileExistsMonitor.mail.sender.interval=30 306 | easymonitor.user.fileExistsMonitor.mail.receiver=yourmail@domain.com;yourmail@domain.org 307 | easymonitor.user.fileExistsMonitor.maxfailure=4 308 | easymonitor.user.fileExistsMonitor.sender.impl=user.SMSSender;user.OtherSender 309 | ``` 310 | 311 | 312 | 313 | ## 邮件模板配置 314 | EasyMonitor 使用了 `freemarker` 模板技术进行邮件内容渲染,模板必须存放在 `template` 目录下,默认使用 `mail.tpl` 模板。 315 | 316 | 317 | ![mail.tpl](images/mailTpl_1000.png) 318 | 319 | 320 | ### 自定义模板配置 321 | 322 | 您可以直接修改模板内容,或者编写您自己的邮件发送模板。 323 | 324 | ```properties 325 | ### Global configuration 326 | easymonitor.mail.sender.template=yourmail.tpl 327 | 328 | ### Monitor Service configuration 329 | easymonitor.[url|port|process|user].NAME.mail.sender.template=yourmail.tpl 330 | ``` 331 | 332 | ### 模板内置 freemarker 变量 333 | ``` 334 | ${type}: 监控服务类型 335 | ${name}: 监控服务名称 336 | ${value}: 监控服务值 337 | ${stoptime?datetime}: 监控对象停止时间 338 | ${monitorConfiguration.XXX}: 监控配置对象属性 339 | ``` 340 | 341 | 342 | ## EasyMonitor Application 343 | 344 | **EasyMonitor Application** 是开箱即用的 EasyMonitor 监控应用。按需配置您的监控服务,启动即可。 345 | 346 | ### 使用步骤 347 | 348 | 1. **配置监控服务** 349 | 350 | 参考 `easymonitor.properties` 中的示例,配置您的监控服务。 351 | 352 | 2. **运行 EasyMonitor** 353 | 354 | - **Windows**(Sometimes you must '`Run as Administrator`') 355 | 356 | ``` 357 | Start: startup.bat 358 | Stop: shutdown.bat 359 | ``` 360 | 361 | - **Unix** 362 | 363 | ``` 364 | Start: ./startup.sh 365 | Stop: ./shutdown.sh 366 | ``` 367 | 368 | 3. **可选配置** 369 | 1. **邮件模板 Mail template** 370 | 371 | 修改 '`template/mail.tpl`' 定制您的邮件提醒内容。 372 | 373 | 2. **日志 Logger** 374 | 375 | 配置 `log4j.properties` 日志输出。 376 | 377 | 378 | 379 | ## EasyMonitor Engine Framework 380 | 381 | EasyMonitor 同时是一个免费开源跨平台的 Java 监控引擎框架(**Java Monitor Engine Framework**),提供统一规范的监控配置和核心调度。 382 | 383 | 您只需要开发监控实现(`MonitorValidator`)和通知发送者(`Sender`),按需配置即可。 384 | 385 | 386 | ### 使用步骤 387 | 388 | 1. Maven dependency 389 | 390 | ```XML 391 | 392 | cn.easyproject 393 | easymonitor 394 | 1.5.0-RELEASE 395 | 396 | ``` 397 | 398 | 2. 自定义 `MonitorValidator` 监控或 `Sender` 通知发送者实现类 399 | 400 | 3. 配置 `easymonitor.properties` 401 | 402 | 4. 启动 403 | ```JAVA 404 | public static void main(String[] args) { 405 | new EasyMonitor().start(); 406 | } 407 | ``` 408 | 409 | 410 | ### **自定义 MonitorValidator** 411 | 412 | 仅需实现 `MonitorValidator` 接口,根据判断规则返回 `ValidatorResult` 结果即可。 413 | 414 | - **MonitorValidator 监控实现示例** 415 | 416 | ```JAVA 417 | /** 418 | * User Monitor Example. 419 | * To monitor the file whether exists. 420 | */ 421 | public class FileMonitorValidator implements MonitorValidator { 422 | 423 | public ValidatorResult validate(MonitorConfiguration configuration) { 424 | // ONLY A DEMO 425 | System.out.println("file check !"); 426 | 427 | ValidatorResult result; 428 | 429 | File file=new File(configuration.getValue()); 430 | 431 | if(file.exists()){ 432 | result=ValidatorResult.VALIDATION; 433 | }else{ 434 | result=ValidatorResult.INVALIDATION; 435 | } 436 | 437 | return result; 438 | } 439 | } 440 | ``` 441 | 442 | - **ValidatorResult 验证结果枚举选项** 443 | 444 | ``` JAVA 445 | /** 446 | * 检查通过 447 | */ 448 | VALIDATION, 449 | /** 450 | * 检查未通过 451 | */ 452 | INVALIDATION, 453 | /** 454 | * 忽略本次检测结果 455 | */ 456 | IGNORE; 457 | ``` 458 | 459 | - **配置 easymonitor.user.Name 类型的自定义监控** 460 | 注意指定 `validatorClass` 配置参数。 461 | 462 | ```properties 463 | # Example: 464 | easymonitor.user.fileExistsMonitor=data.txt 465 | easymonitor.user.fileExistsMonitor.validatorClass=user.FileMonitorValidator 466 | easymonitor.user.fileExistsMonitor.cronexpression=0/5 * * * * ? 467 | easymonitor.user.fileExistsMonitor.mail.sender.interval=30 468 | easymonitor.user.fileExistsMonitor.mail.receiver=yourmail@domain.com;yourmail@domain.org 469 | easymonitor.user.fileExistsMonitor.cmd=/home/app/create.sh 470 | easymonitor.user.fileExistsMonitor.maxfailure=4 471 | ``` 472 | 473 | ### **自定义 Sender** 474 | 一个监控服务可以自定义多个 `Sender`。当监控到服务异常时,可以执行对应的 `SenderImpls` 发送提醒通知。 475 | 476 | 仅需实现 `Sender` 接口即可。 477 | 478 | - **Sender 通知发送者示例** 479 | ```JAVA 480 | /** 481 | * User Sender Example. 482 | * Send a SMS 483 | */ 484 | public class SMSSender implements Sender{ 485 | public void send(MonitorConfiguration configuration) { 486 | // ONLY A DEMO 487 | System.out.println("SMS Sending..."); 488 | System.out.println(configuration); 489 | System.out.println(GlobalMonitorConfiguration.properties); 490 | System.out.println("Send completed"); 491 | } 492 | } 493 | ``` 494 | 495 | - **配置 Sender** 496 | 指定 `sender.impl` 配置参数。 497 | 498 | ```properties 499 | # Example: 500 | easymonitor.[url|port|process|user].NAME.sender.impl=user.SMSSender;user.OtherSender 501 | ``` 502 | 503 | 504 | ### 自定义配置文件和 freemarker 配置对象 505 | 为了提供更多灵活性,EasyMonitor 允许在启动监控服务前自定义**配置文件对象 Properties File**(`easymonitor.properties`) 和邮件发送时的 **freemarker 配置对象**(`Configuration`)。 506 | 507 | ```JAVA 508 | // 自定义配置文件对象 509 | EasyMonitor.setPropertiesFile(java.io.File propertiesFile); 510 | 511 | // 自定义邮件发送的 freemarker 配置对象 512 | MailSender.setFreemarkerConfiguration(freemarker.template.Configuration configuration); 513 | ``` 514 | 515 | 示例: 516 | 517 | ```JAVA 518 | // Custom EasyMonitor initialization Parameter 519 | 520 | // 自定义配置文件对象 521 | Resource res = new ServletContextResource(sce.getServletContext(), "/easymonitor.properties"); 522 | try { 523 | // Properties File 524 | EasyMonitor.setPropertiesFile(res.getFile()); 525 | } catch (IOException e) { 526 | e.printStackTrace(); 527 | } 528 | 529 | // 自定义邮件发送的 freemarker 配置对象 530 | Configuration cfg= new Configuration(Configuration.VERSION_2_3_23); 531 | cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); 532 | cfg.setDefaultEncoding("UTF-8"); 533 | cfg.setServletContextForTemplateLoading(sce.getServletContext(), "/template"); 534 | // MailSender Configuration 535 | MailSender.setFreemarkerConfiguration(cfg); 536 | ``` 537 | 538 | ### 运行时信息获取 539 | 540 | `cn.easyproject.easymonitor.MonitorRuntime` 提供了监控运行时的信息。 541 | 542 | ``` 543 | # 监控控制 544 | start():启动 545 | stop():停止 546 | 547 | # 启动后的运行状态信息 548 | started: 是否启动 549 | allMonitorsOnStartup:所有配置的服务 550 | errorJobMonitorsOnStartup:任务启动失败的服务 551 | runningMonitorsOnStartup:正在运行的服务 552 | 553 | # 配置信息 554 | getMonitorNames():所有配置的服务名称 555 | getMonitorsConfigurations():所有监控服务配置对象 556 | getEnableMonitorsConfigurations():所有设为启用(enable=ON)的监控服务配置对象 557 | getGlobalMonitorsConfiguration():全局监控配置对象 558 | getProperties():Properties对象 559 | getPropertiesFile():Properties File 对象 560 | ``` 561 | 562 | 563 | 564 | ## End 565 | 566 | [官方主页](http://www.easyproject.cn/easymonitor/zh-cn/index.jsp '官方主页') 567 | 568 | [留言评论](http://www.easyproject.cn/easymonitor/zh-cn/index.jsp#donation '留言评论') 569 | 570 | 如果您有更好意见,建议或想法,请联系我。 571 | 572 | Email: 573 | 574 | [http://www.easyproject.cn](http://www.easyproject.cn "EasyProject Home") 575 | 576 | 577 | **支付宝钱包扫一扫捐助:** 578 | 579 | 我们相信,每个人的点滴贡献,都将是推动产生更多、更好免费开源产品的一大步。 580 | 581 | **感谢慷慨捐助,以支持服务器运行和鼓励更多社区成员。** 582 | 583 | 支付宝钱包扫一扫捐助 584 | 585 | -------------------------------------------------------------------------------- /easymonitor_application/easymonitor-1.5.0-RELEASE-APPLICATION.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ushelp/EasyMonitor/e845d543389b6a985462db9afd4b0a0e3bd65e1f/easymonitor_application/easymonitor-1.5.0-RELEASE-APPLICATION.jar -------------------------------------------------------------------------------- /easymonitor_application/easymonitor.properties: -------------------------------------------------------------------------------- 1 | ######################## Global Config(Optional) 2 | 3 | # Monitor ON or OFF, default is ON 4 | easymonitor.enable=ON 5 | 6 | # Monitor trigger Cron-Expressions; default is '0/10 * * * * ?' 7 | easymonitor.cronexpression=0/10 * * * * ? 8 | 9 | # Monitor max failure count; default is 10 10 | easymonitor.maxfailure=10 11 | 12 | # Receive Error Report mail address 13 | # You can specify more than one, separated by a ## 14 | easymonitor.mail.receiver=yourmail@domain.com##youmail2@domai2.org 15 | 16 | # Send Mail Account Config 17 | # Send Mail Account 18 | easymonitor.mail.sender=sendermail@domain.com 19 | # Send Mail password 20 | easymonitor.mail.sender.passowrd=mailpassword 21 | # Send Mail SMTP host 22 | easymonitor.mail.sender.host=smtp.domain.com 23 | # Send Mail SMTP port; default is 25 24 | easymonitor.mail.sender.port=25 25 | # Send Mail Whether use SSL; default is false 26 | easymonitor.mail.sender.ssl=false 27 | # Send Mail title 28 | easymonitor.mail.sender.title=Server Error Notice- EasyMonitor 29 | # The send mail content freemarker template in template directory, default is 'mail.tpl' 30 | easymonitor.mail.sender.template=mail.tpl 31 | # When error, repeat send mail interval(seconds); default is 0, not repeat 32 | easymonitor.mail.sender.interval=0 33 | 34 | # Execute Command 35 | # You can specify more than one, separated by a ## 36 | easymonitor.cmd=/user/app/startup.sh 37 | 38 | 39 | ######################## Monitor Service Configuration 40 | 41 | ############ URL Monitor(can override global config) 42 | ## format: 43 | ## easymonitor.url.NAME=urlValue 44 | ## easymonitor.url.NAME.enable=ON|OFF 45 | ## easymonitor.url.NAME.cronexpression=0/10 * * * * ? 46 | ## easymonitor.url.NAME.maxfailure=10 47 | ## easymonitor.url.NAME.cmd=/user/app/script.sh 48 | ## easymonitor.url.NAME.mail.receiver=receivermail@domain.com 49 | ## easymonitor.url.NAME.mail.sender=sendermail@domain.com 50 | ## easymonitor.url.NAME.mail.sender.passowrd=sendermail_password 51 | ## easymonitor.url.NAME.mail.sender.host=sendermail_host 52 | ## easymonitor.url.NAME.mail.sender.port=sendermail_port 53 | ## easymonitor.url.NAME.mail.sender.ssl=sendermail_ssh 54 | ## easymonitor.url.NAME.mail.sender.title=sendermail_title 55 | ## easymonitor.url.NAME.mail.sender.template=mail.tpl 56 | ## easymonitor.url.NAME.mail.sender.interval=1800 57 | ## easymonitor.url.NAME.sender.impl=userSenderClass##userSenderClass2 58 | 59 | # Example: 60 | #easymonitor.url.tomcatServer1=http\://127.0.0.1\:8888 61 | #easymonitor.url.tomcatServer1.cronexpression=0/5 * * * * ? 62 | #easymonitor.url.tomcatServer1.maxfailure=4 63 | #easymonitor.url.tomcatServer1.mail.receiver=yourmail@domain.com##yourmail@domain.org 64 | #easymonitor.url.tomcatServer1.mail.sender.interval=30 65 | #easymonitor.url.tomcatServer1.cmd=/home/app/tomcat/bin/startup.sh 66 | 67 | 68 | ############ Port Monitor(can override global config) 69 | ## format: 70 | ## easymonitor.port.NAME=portValue 71 | ## easymonitor.port.NAME.server=IP 72 | ## easymonitor.port.NAME.enable=ON|OFF 73 | ## easymonitor.port.NAME.cronexpression=0/10 * * * * ? 74 | ## easymonitor.port.NAME.maxfailure=10 75 | ## easymonitor.port.NAME.cmd=/user/app/script.sh 76 | ## easymonitor.port.NAME.mail.receiver=receivermail@domain.com 77 | ## easymonitor.port.NAME.mail.sender=sendermail@domain.com 78 | ## easymonitor.port.NAME.mail.sender.passowrd=sendermail_password 79 | ## easymonitor.port.NAME.mail.sender.host=sendermail_host 80 | ## easymonitor.port.NAME.mail.sender.port=sendermail_port 81 | ## easymonitor.port.NAME.mail.sender.ssl=sendermail_ssh 82 | ## easymonitor.port.NAME.mail.sender.title=sendermail_title 83 | ## easymonitor.port.NAME.mail.sender.template=mail.tpl 84 | ## easymonitor.port.NAME.mail.sender.interval=1800 85 | ## easymonitor.port.NAME.sender.impl=userSenderClass##userSenderClass2 86 | 87 | # Example: 88 | #easymonitor.port.tomcatServer1=8080 89 | #easymonitor.port.tomcatServer1.server=localhost 90 | #easymonitor.port.tomcatServer1.cronexpression=0/3 * * * * ? 91 | #easymonitor.port.tomcatServer1.maxfailure=4 92 | #easymonitor.port.tomcatServer1.mail.receiver=yourmail@domain.com##yourmail@domain.org 93 | #easymonitor.port.tomcatServer1.mail.sender.interval=30 94 | #easymonitor.port.tomcatServer1.cmd=/home/app/tomcat/bin/startup.sh 95 | 96 | 97 | ############ Process Monitor(can override global config) 98 | ## format: 99 | ## easymonitor.process.NAME=processValue 100 | ## easymonitor.process.NAME.enable=ON|OFF 101 | ## easymonitor.process.NAME.cronexpression=0/10 * * * * ? 102 | ## easymonitor.process.NAME.maxfailure=10 103 | ## easymonitor.process.NAME.cmd=/user/app/script.sh 104 | ## easymonitor.process.NAME.mail.receiver=receivermail@domain.com 105 | ## easymonitor.process.NAME.mail.sender=sendermail@domain.com 106 | ## easymonitor.process.NAME.mail.sender.passowrd=sendermail_password 107 | ## easymonitor.process.NAME.mail.sender.host=sendermail_host 108 | ## easymonitor.process.NAME.mail.sender.port=sendermail_port 109 | ## easymonitor.process.NAME.mail.sender.ssl=sendermail_ssh 110 | ## easymonitor.process.NAME.mail.sender.title=sendermail_title 111 | ## easymonitor.process.NAME.mail.sender.template=mail.tpl 112 | ## easymonitor.process.NAME.mail.sender.interval=1800 113 | ## easymonitor.process.NAME.sender.impl=userSenderClass##userSenderClass2 114 | 115 | # Example: 116 | #easymonitor.process.tomcatServer1=tomcat 117 | #easymonitor.process.tomcatServer1.cronexpression=0/3 * * * * ? 118 | #easymonitor.process.tomcatServer1.maxfailure=4 119 | #easymonitor.process.tomcatServer1.mail.receiver=yourmail@domain.com##yourmail@domain.org 120 | #easymonitor.process.tomcatServer1.mail.sender.interval=30 121 | #easymonitor.process.tomcatServer1.cmd=/home/app/tomcat/bin/startup.sh 122 | 123 | 124 | ############ User define Monitor(can override global config) 125 | ## format: 126 | ## easymonitor.user.NAME=userValue 127 | ## easymonitor.user.NAME.validatorClass=validator.UserMonitorValidator 128 | ## easymonitor.user.NAME.enable=ON|OFF 129 | ## easymonitor.user.NAME.cronexpression=0/10 * * * * ? 130 | ## easymonitor.user.NAME.maxfailure=10 131 | ## easymonitor.user.NAME.cmd=/user/app/script.sh 132 | ## easymonitor.user.NAME.mail.receiver=receivermail@domain.com 133 | ## easymonitor.user.NAME.mail.sender=sendermail@domain.com 134 | ## easymonitor.user.NAME.mail.sender.passowrd=sendermail_password 135 | ## easymonitor.user.NAME.mail.sender.host=sendermail_host 136 | ## easymonitor.user.NAME.mail.sender.port=sendermail_port 137 | ## easymonitor.user.NAME.mail.sender.ssl=sendermail_ssh 138 | ## easymonitor.user.NAME.mail.sender.title=sendermail_title 139 | ## easymonitor.user.NAME.mail.sender.template=mail.tpl 140 | ## easymonitor.user.NAME.mail.sender.interval=1800 141 | ## easymonitor.user.NAME.sender.impl=userSenderClass##userSenderClass2 142 | 143 | # Example: 144 | #easymonitor.user.fileExistsMonitor=data.txt 145 | #easymonitor.user.fileExistsMonitor.validatorClass=user.YourFileMonitorValidator 146 | #easymonitor.user.fileExistsMonitor.cmd=/home/app/create.sh 147 | #easymonitor.user.fileExistsMonitor.cronexpression=0/5 * * * * ? 148 | #easymonitor.user.fileExistsMonitor.mail.sender.interval=30 149 | #easymonitor.user.fileExistsMonitor.mail.receiver=yourmail@domain.com##yourmail@domain.org 150 | #easymonitor.user.fileExistsMonitor.maxfailure=4 151 | #easymonitor.user.fileExistsMonitor.sender.impl=user.SMSSender##user.OtherSender -------------------------------------------------------------------------------- /easymonitor_application/log4j.properties: -------------------------------------------------------------------------------- 1 | # Logger 2 | log4j.rootLogger=INFO,file 3 | 4 | ## file 5 | log4j.appender.file=org.apache.log4j.DailyRollingFileAppender 6 | log4j.appender.file.File=easybackup.log 7 | log4j.appender.file.layout=org.apache.log4j.PatternLayout 8 | log4j.appender.file.layout.ConversionPattern= %d{yyyy MMM dd HH:mm:ss,SSS} %p - %m%n 9 | 10 | 11 | ## console 12 | #log4j.appender.console=org.apache.log4j.ConsoleAppender 13 | #log4j.appender.console.layout=org.apache.log4j.SimpleLayout 14 | 15 | -------------------------------------------------------------------------------- /easymonitor_application/readme.md: -------------------------------------------------------------------------------- 1 | # EasyMonitor Application 2 | 3 | 4 | 5 | ## 中文 6 | 7 | **EasyMonitor Application** 是开箱即用的 EasyMonitor 监控应用。按需配置您的监控服务,启动即可。 8 | 9 | 10 | ### 使用步骤 11 | 12 | 1. **配置监控服务** 13 | 14 | 参考 `easymonitor.properties` 中的示例,配置您的监控服务。 15 | 16 | 2. **运行 EasyMonitor** 17 | 18 | - **Windows**(Sometimes you must '`Run as Administrator`') 19 | 20 | ``` 21 | Start: bin/startup.bat 22 | Stop: bin/shutdown.bat 23 | ``` 24 | 25 | - **Linux** 26 | 27 | ``` 28 | Start: ./bin/startup.sh 29 | Stop: ./bin/shutdown.sh 30 | ``` 31 | 32 | 3. **可选配置** 33 | 34 | 1. **邮件模板 Mail template** 35 | 36 | 修改 '`template/mail.tpl`' 定制您的邮件提醒内容。 37 | 38 | 2. **日志 Logger** 39 | 40 | 配置 `log4j.properties` 日志输出。 41 | 42 | 43 | 44 | ## English 45 | 46 | **EasyMonitor Application** can run as application. Configure your monitoring service as needed, can be activated. 47 | 48 | ### Steps for usage 49 | 50 | 1. **Configuration monitor services** 51 | 52 | `Easymonitor.properties` the reference sample, configure your monitoring service. 53 | 54 | 2. **Run EasyMonitor** 55 | 56 | - **Windows**(Sometimes you must '`Run as Administrator`') 57 | 58 | ``` 59 | Start: startup.bat 60 | Stop: shutdown.bat 61 | ``` 62 | 63 | - **Linux** 64 | 65 | ``` 66 | Start: ./startup.sh 67 | Stop: ./shutdown.sh 68 | ``` 69 | 70 | 3. **Optional** 71 | 72 | 1. **Mail template** 73 | 74 | You can edit '`template/mail.tpl`' to customize send mail content. 75 | 76 | 2. **Logger** 77 | 78 | configure `log4j.properties` to out log. 79 | 80 | 81 | 82 | 83 | ## End 84 | 85 | -------------------------------------------------------------------------------- /easymonitor_application/shutdown.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | cd /d %~dp0 3 | echo EasyMonitor shutdown... 4 | rem jps -mlvV| findstr easymonitor.*.jar |taskkill -F -PID 4468 5 | for /f "tokens=*" %%i in ('jps -mlvV ^| findstr easymonitor.*.jar') do set value=%%i 6 | if "%value%"=="" (goto notrun ) else ( goto shutdown ) 7 | 8 | :shutdown 9 | rem echo %value% 10 | rem echo %value:~0,5% 11 | set pid=%value:~0,5% 12 | rem echo %pid% 13 | taskkill -F -PID %pid% | findstr x 14 | set value= 15 | set pid= 16 | goto end 17 | 18 | :notrun 19 | echo not runing 20 | 21 | :end 22 | echo EasyMonitor stoped. 23 | pause 24 | -------------------------------------------------------------------------------- /easymonitor_application/shutdown.sh: -------------------------------------------------------------------------------- 1 | echo 'EasyMonitor shutdown...' 2 | ps -ef|grep easymonitor.*.jar | grep -v grep |awk '{print $2}' | xargs kill -9 3 | echo 'EasyMonitor stoped.' 4 | -------------------------------------------------------------------------------- /easymonitor_application/startup.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | echo EasyMonitor starting... 3 | echo The log in easymonitor.out 4 | cd /d %~dp0 5 | java -jar easymonitor-1.5.0-RELEASE-APPLICATION.jar 6 | echo EasyMonitor started. -------------------------------------------------------------------------------- /easymonitor_application/startup.sh: -------------------------------------------------------------------------------- 1 | echo 'EasyMonitor starting...' 2 | echo 'The log in easymonitor.out' 3 | nohup java -jar easymonitor-1.5.0-RELEASE-APPLICATION.jar >/dev/null 2>&1 & 4 | echo 'EasyMonitor started.' 5 | -------------------------------------------------------------------------------- /easymonitor_application/template/mail.tpl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 11 | 12 | 13 |
14 | EasyMonitor Notice 15 |
16 | 17 |
18 |

Hello,

19 |

Your monitor service is stopped.

20 |

21 | Monitor: ${type}-${name}: ${value} 22 |

23 |

24 | Stop time: ${stoptime?datetime} 25 |

26 |

27 | Please check the services you are monitoring. 28 |

29 |
30 |
31 | EasyMonitor by easyproject.cn 32 |
33 | 34 | 35 | -------------------------------------------------------------------------------- /easymonitor_engine_framework/easymonitor-1.4.0-RELEASE-javadoc.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ushelp/EasyMonitor/e845d543389b6a985462db9afd4b0a0e3bd65e1f/easymonitor_engine_framework/easymonitor-1.4.0-RELEASE-javadoc.jar -------------------------------------------------------------------------------- /easymonitor_engine_framework/easymonitor-1.4.0-RELEASE-sources.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ushelp/EasyMonitor/e845d543389b6a985462db9afd4b0a0e3bd65e1f/easymonitor_engine_framework/easymonitor-1.4.0-RELEASE-sources.jar -------------------------------------------------------------------------------- /easymonitor_engine_framework/easymonitor-1.4.0-RELEASE.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ushelp/EasyMonitor/e845d543389b6a985462db9afd4b0a0e3bd65e1f/easymonitor_engine_framework/easymonitor-1.4.0-RELEASE.jar -------------------------------------------------------------------------------- /easymonitor_engine_framework/easymonitor.properties: -------------------------------------------------------------------------------- 1 | ######################## Global Config(Optional) 2 | 3 | # Monitor ON or OFF, default is ON 4 | easymonitor.enable=ON 5 | 6 | # Monitor trigger Cron-Expressions; default is '0/10 * * * * ?' 7 | easymonitor.cronexpression=0/10 * * * * ? 8 | 9 | # Monitor max failure count; default is 10 10 | easymonitor.maxfailure=10 11 | 12 | # Receive Error Report mail address 13 | # You can specify more than one, separated by a ## 14 | easymonitor.mail.receiver=yourmail@domain.com##youmail2@domai2.org 15 | 16 | # Send Mail Account Config 17 | # Send Mail Account 18 | easymonitor.mail.sender=sendermail@domain.com 19 | # Send Mail password 20 | easymonitor.mail.sender.passowrd=mailpassword 21 | # Send Mail SMTP host 22 | easymonitor.mail.sender.host=smtp.domain.com 23 | # Send Mail SMTP port; default is 25 24 | easymonitor.mail.sender.port=25 25 | # Send Mail Whether use SSL; default is false 26 | easymonitor.mail.sender.ssl=false 27 | # Send Mail title 28 | easymonitor.mail.sender.title=Server Error Notice- EasyMonitor 29 | # The send mail content freemarker template in template directory, default is 'mail.tpl' 30 | easymonitor.mail.sender.template=mail.tpl 31 | # When error, repeat send mail interval(seconds); default is 0, not repeat 32 | easymonitor.mail.sender.interval=0 33 | 34 | # Execute Command 35 | # You can specify more than one, separated by a ## 36 | easymonitor.cmd=/user/app/startup.sh 37 | 38 | 39 | ######################## Monitor Service Configuration 40 | 41 | ############ URL Monitor(can override global config) 42 | ## format: 43 | ## easymonitor.url.NAME=urlValue 44 | ## easymonitor.url.NAME.enable=ON|OFF 45 | ## easymonitor.url.NAME.cronexpression=0/10 * * * * ? 46 | ## easymonitor.url.NAME.maxfailure=10 47 | ## easymonitor.url.NAME.cmd=/user/app/script.sh 48 | ## easymonitor.url.NAME.mail.receiver=receivermail@domain.com 49 | ## easymonitor.url.NAME.mail.sender=sendermail@domain.com 50 | ## easymonitor.url.NAME.mail.sender.passowrd=sendermail_password 51 | ## easymonitor.url.NAME.mail.sender.host=sendermail_host 52 | ## easymonitor.url.NAME.mail.sender.port=sendermail_port 53 | ## easymonitor.url.NAME.mail.sender.ssl=sendermail_ssh 54 | ## easymonitor.url.NAME.mail.sender.title=sendermail_title 55 | ## easymonitor.url.NAME.mail.sender.template=mail.tpl 56 | ## easymonitor.url.NAME.mail.sender.interval=1800 57 | ## easymonitor.url.NAME.sender.impl=userSenderClass##userSenderClass2 58 | 59 | # Example: 60 | #easymonitor.url.tomcatServer1=http\://127.0.0.1\:8888 61 | #easymonitor.url.tomcatServer1.cronexpression=0/5 * * * * ? 62 | #easymonitor.url.tomcatServer1.maxfailure=4 63 | #easymonitor.url.tomcatServer1.mail.receiver=yourmail@domain.com##yourmail@domain.org 64 | #easymonitor.url.tomcatServer1.mail.sender.interval=30 65 | #easymonitor.url.tomcatServer1.cmd=/home/app/tomcat/bin/startup.sh 66 | 67 | 68 | ############ Port Monitor(can override global config) 69 | ## format: 70 | ## easymonitor.port.NAME=portValue 71 | ## easymonitor.port.NAME.server=IP 72 | ## easymonitor.port.NAME.enable=ON|OFF 73 | ## easymonitor.port.NAME.cronexpression=0/10 * * * * ? 74 | ## easymonitor.port.NAME.maxfailure=10 75 | ## easymonitor.port.NAME.cmd=/user/app/script.sh 76 | ## easymonitor.port.NAME.mail.receiver=receivermail@domain.com 77 | ## easymonitor.port.NAME.mail.sender=sendermail@domain.com 78 | ## easymonitor.port.NAME.mail.sender.passowrd=sendermail_password 79 | ## easymonitor.port.NAME.mail.sender.host=sendermail_host 80 | ## easymonitor.port.NAME.mail.sender.port=sendermail_port 81 | ## easymonitor.port.NAME.mail.sender.ssl=sendermail_ssh 82 | ## easymonitor.port.NAME.mail.sender.title=sendermail_title 83 | ## easymonitor.port.NAME.mail.sender.template=mail.tpl 84 | ## easymonitor.port.NAME.mail.sender.interval=1800 85 | ## easymonitor.port.NAME.sender.impl=userSenderClass##userSenderClass2 86 | 87 | # Example: 88 | #easymonitor.port.tomcatServer1=8080 89 | #easymonitor.port.tomcatServer1.server=localhost 90 | #easymonitor.port.tomcatServer1.cronexpression=0/3 * * * * ? 91 | #easymonitor.port.tomcatServer1.maxfailure=4 92 | #easymonitor.port.tomcatServer1.mail.receiver=yourmail@domain.com##yourmail@domain.org 93 | #easymonitor.port.tomcatServer1.mail.sender.interval=30 94 | #easymonitor.port.tomcatServer1.cmd=/home/app/tomcat/bin/startup.sh 95 | 96 | 97 | ############ Process Monitor(can override global config) 98 | ## format: 99 | ## easymonitor.process.NAME=processValue 100 | ## easymonitor.process.NAME.enable=ON|OFF 101 | ## easymonitor.process.NAME.cronexpression=0/10 * * * * ? 102 | ## easymonitor.process.NAME.maxfailure=10 103 | ## easymonitor.process.NAME.cmd=/user/app/script.sh 104 | ## easymonitor.process.NAME.mail.receiver=receivermail@domain.com 105 | ## easymonitor.process.NAME.mail.sender=sendermail@domain.com 106 | ## easymonitor.process.NAME.mail.sender.passowrd=sendermail_password 107 | ## easymonitor.process.NAME.mail.sender.host=sendermail_host 108 | ## easymonitor.process.NAME.mail.sender.port=sendermail_port 109 | ## easymonitor.process.NAME.mail.sender.ssl=sendermail_ssh 110 | ## easymonitor.process.NAME.mail.sender.title=sendermail_title 111 | ## easymonitor.process.NAME.mail.sender.template=mail.tpl 112 | ## easymonitor.process.NAME.mail.sender.interval=1800 113 | ## easymonitor.process.NAME.sender.impl=userSenderClass##userSenderClass2 114 | 115 | # Example: 116 | #easymonitor.process.tomcatServer1=tomcat 117 | #easymonitor.process.tomcatServer1.cronexpression=0/3 * * * * ? 118 | #easymonitor.process.tomcatServer1.maxfailure=4 119 | #easymonitor.process.tomcatServer1.mail.receiver=yourmail@domain.com##yourmail@domain.org 120 | #easymonitor.process.tomcatServer1.mail.sender.interval=30 121 | #easymonitor.process.tomcatServer1.cmd=/home/app/tomcat/bin/startup.sh 122 | 123 | 124 | ############ User define Monitor(can override global config) 125 | ## format: 126 | ## easymonitor.user.NAME=userValue 127 | ## easymonitor.user.NAME.validatorClass=validator.UserMonitorValidator 128 | ## easymonitor.user.NAME.enable=ON|OFF 129 | ## easymonitor.user.NAME.cronexpression=0/10 * * * * ? 130 | ## easymonitor.user.NAME.maxfailure=10 131 | ## easymonitor.user.NAME.cmd=/user/app/script.sh 132 | ## easymonitor.user.NAME.mail.receiver=receivermail@domain.com 133 | ## easymonitor.user.NAME.mail.sender=sendermail@domain.com 134 | ## easymonitor.user.NAME.mail.sender.passowrd=sendermail_password 135 | ## easymonitor.user.NAME.mail.sender.host=sendermail_host 136 | ## easymonitor.user.NAME.mail.sender.port=sendermail_port 137 | ## easymonitor.user.NAME.mail.sender.ssl=sendermail_ssh 138 | ## easymonitor.user.NAME.mail.sender.title=sendermail_title 139 | ## easymonitor.user.NAME.mail.sender.template=mail.tpl 140 | ## easymonitor.user.NAME.mail.sender.interval=1800 141 | ## easymonitor.user.NAME.sender.impl=userSenderClass##userSenderClass2 142 | 143 | # Example: 144 | #easymonitor.user.fileExistsMonitor=data.txt 145 | #easymonitor.user.fileExistsMonitor.validatorClass=user.YourFileMonitorValidator 146 | #easymonitor.user.fileExistsMonitor.cmd=/home/app/create.sh 147 | #easymonitor.user.fileExistsMonitor.cronexpression=0/5 * * * * ? 148 | #easymonitor.user.fileExistsMonitor.mail.sender.interval=30 149 | #easymonitor.user.fileExistsMonitor.mail.receiver=yourmail@domain.com##yourmail@domain.org 150 | #easymonitor.user.fileExistsMonitor.maxfailure=4 151 | #easymonitor.user.fileExistsMonitor.sender.impl=user.SMSSender##user.OtherSender -------------------------------------------------------------------------------- /easymonitor_engine_framework/readme.md: -------------------------------------------------------------------------------- 1 | # EasyMonitor Engine Framework 2 | 3 | 4 | 5 | ## 中文 6 | 7 | EasyMonitor 同时是一个免费开源跨平台的 Java 监控引擎框架(**Java Monitor Engine Framework**),提供统一规范的监控配置和核心调度。 8 | 9 | 您只需要开发监控实现(`MonitorValidator`)和通知发送者(`Sender`),按需配置即可。 10 | 11 | 12 | ### 使用步骤 13 | 14 | 1. **Maven dependency** 15 | 16 | ```XML 17 | 18 | cn.easyproject 19 | easymonitor 20 | 1.5.0-RELEASE 21 | 22 | ``` 23 | 24 | 2. 自定义 `MonitorValidator` 监控或 `Sender` 通知发送者实现类 25 | 26 | 3. 配置 `easymonitor.properties` 27 | 28 | 4. 启动 29 | ```JAVA 30 | public static void main(String[] args) { 31 | new EasyMonitor().start(); 32 | } 33 | ``` 34 | 35 | 36 | ### **自定义 MonitorValidator** 37 | 38 | 仅需实现 `MonitorValidator` 接口,根据判断规则返回 `ValidatorResult` 结果即可。 39 | 40 | - **MonitorValidator 监控实现示例** 41 | 42 | ```JAVA 43 | /** 44 | * User Monitor Example. 45 | * To monitor the file whether exists. 46 | */ 47 | public class FileMonitorValidator implements MonitorValidator { 48 | 49 | public ValidatorResult validate(MonitorConfiguration configuration) { 50 | // ONLY A DEMO 51 | System.out.println("file check !"); 52 | 53 | ValidatorResult result; 54 | 55 | File file=new File(configuration.getValue()); 56 | 57 | if(file.exists()){ 58 | result=ValidatorResult.VALIDATION; 59 | }else{ 60 | result=ValidatorResult.INVALIDATION; 61 | } 62 | 63 | return result; 64 | } 65 | } 66 | ``` 67 | 68 | - **ValidatorResult 验证结果枚举选项** 69 | 70 | ``` JAVA 71 | /** 72 | * 检查通过 73 | */ 74 | VALIDATION, 75 | /** 76 | * 检查未通过 77 | */ 78 | INVALIDATION, 79 | /** 80 | * 忽略本次检测结果 81 | */ 82 | IGNORE; 83 | ``` 84 | 85 | - **配置 easymonitor.user.Name 类型的自定义监控** 86 | 注意指定 `validatorClass` 配置参数。 87 | 88 | ```properties 89 | # Example: 90 | easymonitor.user.fileExistsMonitor=data.txt 91 | easymonitor.user.fileExistsMonitor.validatorClass=user.FileMonitorValidator 92 | easymonitor.user.fileExistsMonitor.cronexpression=0/5 * * * * ? 93 | easymonitor.user.fileExistsMonitor.mail.sender.interval=30 94 | easymonitor.user.fileExistsMonitor.mail.receiver=yourmail@domain.com;yourmail@domain.org 95 | easymonitor.user.fileExistsMonitor.cmd=/home/app/create.sh 96 | easymonitor.user.fileExistsMonitor.maxfailure=4 97 | ``` 98 | 99 | ### **自定义 Sender** 100 | 一个监控服务可以自定义多个 `Sender`。当监控到服务异常时,可以执行对应的 `SenderImpls` 发送提醒通知。 101 | 102 | 仅需实现 `Sender` 接口即可。 103 | 104 | - **Sender 通知发送者示例** 105 | ```JAVA 106 | /** 107 | * User Sender Example. 108 | * Send a SMS 109 | */ 110 | public class SMSSender implements Sender{ 111 | public void send(MonitorConfiguration configuration) { 112 | // ONLY A DEMO 113 | System.out.println("SMS Sending..."); 114 | System.out.println(configuration); 115 | System.out.println(GlobalMonitorConfiguration.properties); 116 | System.out.println("Send completed"); 117 | } 118 | } 119 | ``` 120 | 121 | - **配置 Sender** 122 | 指定 `sender.impl` 配置参数。 123 | 124 | ```properties 125 | # Example: 126 | easymonitor.[url|port|process|user].NAME.sender.impl=user.SMSSender;user.OtherSender 127 | ``` 128 | 129 | ### 自定义配置文件和 freemarker 配置对象 130 | 为了提供更多灵活性,EasyMonitor 允许在启动监控服务前自定义**配置文件对象 Properties File**(`easymonitor.properties`) 和邮件发送时的 **freemarker 配置对象**(`Configuration`)。 131 | 132 | ```JAVA 133 | // 自定义配置文件对象 134 | EasyMonitor.setPropertiesFile(java.io.File propertiesFile); 135 | 136 | // 自定义邮件发送的 freemarker 配置对象 137 | MailSender.setFreemarkerConfiguration(freemarker.template.Configuration configuration); 138 | ``` 139 | 140 | 示例: 141 | 142 | ```JAVA 143 | // Custom EasyMonitor initialization Parameter 144 | 145 | // 自定义配置文件对象 146 | Resource res = new ServletContextResource(sce.getServletContext(), "/easymonitor.properties"); 147 | try { 148 | // Properties File 149 | EasyMonitor.setPropertiesFile(res.getFile()); 150 | } catch (IOException e) { 151 | e.printStackTrace(); 152 | } 153 | 154 | // 自定义邮件发送的 freemarker 配置对象 155 | Configuration cfg= new Configuration(Configuration.VERSION_2_3_23); 156 | cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); 157 | cfg.setDefaultEncoding("UTF-8"); 158 | cfg.setServletContextForTemplateLoading(sce.getServletContext(), "/template"); 159 | // MailSender Configuration 160 | MailSender.setFreemarkerConfiguration(cfg); 161 | ``` 162 | 163 | ### 运行时信息获取 164 | 165 | `cn.easyproject.easymonitor.MonitorRuntime` 提供了监控运行时的信息。 166 | 167 | ``` 168 | # 监控控制 169 | start():启动 170 | stop():停止 171 | 172 | # 启动后的运行状态信息 173 | started: 是否启动 174 | allMonitorsOnStartup:所有配置的服务 175 | errorJobMonitorsOnStartup:任务启动失败的服务 176 | runningMonitorsOnStartup:正在运行的服务 177 | 178 | # 配置信息 179 | getMonitorNames():所有配置的服务名称 180 | getMonitorsConfigurations():所有监控服务配置对象 181 | getEnableMonitorsConfigurations():所有设为启用(enable=ON)的监控服务配置对象 182 | getGlobalMonitorsConfiguration():全局监控配置对象 183 | getProperties():Properties对象 184 | getPropertiesFile():Properties File 对象 185 | ``` 186 | 187 | 188 | 189 | 190 | 191 | ## English 192 | 193 | EasyMonitor is also a free open source cross-platform Java monitoring engine framework that provides standardized monitoring configuration and core scheduling. 194 | 195 | You only need to develop your own monitoring and control system ( MonitorValidator`) and notify the sender (`Sender`), on-demand can be. 196 | 197 | 198 | ### Steps for usage 199 | 200 | 1. **Maven dependency** 201 | 202 | ```XML 203 | 204 | cn.easyproject 205 | easymonitor 206 | 1.5.0-RELEASE 207 | 208 | ``` 209 | 210 | 2. Custom `Monitor Validator` monitor or` Sender` notify the sender of the implementation class 211 | 212 | 3. Configure `easymonitor.properties` 213 | 214 | 4. Start 215 | ```JAVA 216 | public static void main(String[] args) { 217 | new EasyMonitor().start(); 218 | } 219 | ``` 220 | 221 | 222 | ### Custom MonitorValidator 223 | 224 | Only implement the interface `MonitorValidator`, according to the judgment result to rule returns` ValidatorResult`. 225 | 226 | - **MonitorValidator implements example** 227 | 228 | ```JAVA 229 | /** 230 | * User Monitor Example. 231 | * To monitor the file whether exists. 232 | */ 233 | public class FileMonitorValidator implements MonitorValidator { 234 | 235 | public ValidatorResult validate(MonitorConfiguration configuration) { 236 | // ONLY A DEMO 237 | System.out.println("file check !"); 238 | 239 | ValidatorResult result; 240 | 241 | File file=new File(configuration.getValue()); 242 | 243 | if(file.exists()){ 244 | result=ValidatorResult.VALIDATION; 245 | }else{ 246 | result=ValidatorResult.INVALIDATION; 247 | } 248 | 249 | return result; 250 | } 251 | } 252 | ``` 253 | 254 | - **ValidatorResult enum items** 255 | 256 | ``` JAVA 257 | /** 258 | * Validator pass 259 | */ 260 | VALIDATION, 261 | /** 262 | * Validator not pass 263 | */ 264 | INVALIDATION, 265 | /** 266 | * Ignore this validator result 267 | */ 268 | IGNORE; 269 | ``` 270 | 271 | - **Configure easymonitor.user.Name type user custome ValidatorMonitor** 272 | Note Specifying `validatoClass` configuration parameters. 273 | 274 | ```properties 275 | # Example: 276 | easymonitor.user.fileExistsMonitor=data.txt 277 | easymonitor.user.fileExistsMonitor.validatorClass=user.FileMonitorValidator 278 | easymonitor.user.fileExistsMonitor.cronexpression=0/5 * * * * ? 279 | easymonitor.user.fileExistsMonitor.mail.sender.interval=30 280 | easymonitor.user.fileExistsMonitor.mail.receiver=yourmail@domain.com;yourmail@domain.org 281 | easymonitor.user.fileExistsMonitor.cmd=/home/app/create.sh 282 | easymonitor.user.fileExistsMonitor.maxfailure=4 283 | ``` 284 | 285 | 286 | ### Custom Sender 287 | 288 | A monitoring service can customize many `Sender`. When a monitored service exceptions, you can perform the corresponding `SenderImpls` send reminders. 289 | 290 | Only to implements `Sender` interface. 291 | 292 | - **Sender Example** 293 | ```JAVA 294 | /** 295 | * User Sender Example. 296 | * Send a SMS 297 | */ 298 | public class SMSSender implements Sender{ 299 | public void send(MonitorConfiguration configuration) { 300 | // ONLY A DEMO 301 | System.out.println("SMS Sending..."); 302 | System.out.println(configuration); 303 | System.out.println(GlobalMonitorConfiguration.properties); 304 | System.out.println("Send completed"); 305 | } 306 | } 307 | ``` 308 | 309 | - **Configure Sender** 310 | 311 | Note Specifying `sender.impl` configuration parameters. 312 | 313 | ```properties 314 | # Example: 315 | easymonitor.[url|port|process|user].NAME.sender.impl=user.SMSSender;user.OtherSender 316 | ``` 317 | 318 | ### Custom Properties File and Freemarker Configuration object 319 | To provide more flexibility, EasyMonitor permit before starting Monitor service ** custom Properties File object** ( `easyMonitor.properties`) and ** mail to send Freemarker Configuration object** (` Configuration`). 320 | 321 | 322 | ```JAVA 323 | // Custom Properties File 324 | EasyMonitor.setPropertiesFile(java.io.File propertiesFile); 325 | 326 | // Custom mail to send Freemarker Configuration object 327 | MailSender.setFreemarkerConfiguration(freemarker.template.Configuration configuration); 328 | ``` 329 | 330 | Example: 331 | 332 | ```JAVA 333 | // Custom EasyMonitor initialization Parameter 334 | 335 | // Custom Properties File 336 | Resource res = new ServletContextResource(sce.getServletContext(), "/easyMonitor.properties"); 337 | try { 338 | // Properties File 339 | EasyMonitor.setPropertiesFile(res.getFile()); 340 | } catch (IOException e) { 341 | e.printStackTrace(); 342 | } 343 | 344 | // Custom mail to send Freemarker Configuration object 345 | Configuration cfg= new Configuration(Configuration.VERSION_2_3_23); 346 | cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); 347 | cfg.setDefaultEncoding("UTF-8"); 348 | cfg.setServletContextForTemplateLoading(sce.getServletContext(), "/template"); 349 | // MailSender Configuration 350 | MailSender.setFreemarkerConfiguration(cfg); 351 | ``` 352 | 353 | ### Runtime access to information 354 | 355 | `cn.easyproject.easymonitor.MonitorRuntime` providing information Monitor runtime. 356 | 357 | ``` 358 | # Monitor controller 359 | start() 360 | stop() 361 | 362 | # Information when started 363 | started: Wheter started 364 | allMonitorsOnStartup 365 | runningMonitorsOnStartup 366 | errorJobMonitorsOnStartup 367 | 368 | # Configuration information 369 | getMonitorNames(): All configuration names 370 | getMonitorsConfigurations(): All configuration objects 371 | getEnableMonitorsConfigurations(): All enable(enable=ON) configuration objects 372 | getGlobalMonitorsConfiguration(): Global Configuration object 373 | getProperties(): Properties object 374 | getPropertiesFile(): Properties File object 375 | ``` 376 | 377 | 378 | 379 | ## End 380 | 381 | -------------------------------------------------------------------------------- /easymonitor_engine_framework/template/mail.tpl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 11 | 12 | 13 |
14 | EasyMonitor Notice 15 |
16 | 17 |
18 |

Hello,

19 |

Your monitor service is stopped.

20 |

21 | Monitor: ${type}-${name}: ${value} 22 |

23 |

24 | Stop time: ${stoptime?datetime} 25 |

26 |

27 | Please check the services you are monitoring. 28 |

29 |
30 |
31 | EasyMonitor by easyproject.cn 32 |
33 | 34 | 35 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # EasyMonitor 2 | 3 | 4 | 基于 Java 的免费开源跨平台系统运行监控服务应用及引擎框架。 5 | 6 | A free, open source, cross-platform system running monitoring service application and engine framework based on Java. 7 | 8 | 9 | ![EasyMonitor](doc/images/EasyMonitor.png) 10 | 11 | 12 | ## 中文 13 | 14 | EasyMonitor 是一个基于 Java 的免费开源跨平台系统运行监控服务应用及引擎框架。即可开箱即用(**EasyMonitor Application**),又可以作为监控引擎框架扩展(**EasyMonitor Engine Framework**)。 15 | 16 | EasyMonitor 能够为需要运行状态监控的程序场景提供一体化支持,提供集合了运行监控,通知发送,脚本执行等于功能。而这一切,仅需进行简单的配置管理即可完成。 17 | 18 | 最新版本: `1.5.0-RELEASE` 19 | 20 | 21 | [中文说明文档](doc/readme_zh_CN.md) 22 | 23 | [官方主页](http://www.easyproject.cn/easymonitor/zh-cn/index.jsp '官方主页') 24 | 25 | [留言评论](http://www.easyproject.cn/easymonitor/zh-cn/index.jsp#donation '留言评论') 26 | 27 | 如果您有更好意见,建议或想法,请联系我。 28 | 29 | 30 | ## English 31 | 32 | EasyMonitor is a free open-source Java-based, cross-platform operation monitoring system service application and engine framework. Can run as application(**EasyMonitor Application**), and can be extended as the monitoring engine framework(**EasyMonitor Engine Framework**). 33 | 34 | EasyMonitor provide support for the need to monitor the operating state of the program scene,notification, script execution is equal to function. And all this, just a simple configuration management to complete. 35 | 36 | The latest version: `1.5.0-RELEASE` 37 | 38 | [English Readme](doc/readme_en.md) 39 | 40 | [The official home page](http://www.easyproject.cn/easymonitor/en/index.jsp 'The official home page') 41 | 42 | [Comments](http://www.easyproject.cn/easymonitor/en/index.jsp#donation 'Comments') 43 | 44 | If you have more comments, suggestions or ideas, please contact me. 45 | 46 | 47 | 48 | ## Maven 49 | 50 | ```XML 51 | 52 | 53 | cn.easyproject 54 | easymonitor 55 | 1.5.0-RELEASE 56 | 57 | ``` 58 | 59 | Email: 60 | 61 | [http://www.easyproject.cn](http://www.easyproject.cn "EasyProject Home") 62 | 63 | 64 | 65 | 66 | 67 | **支付宝钱包扫一扫捐助:** 68 | 69 | 我们相信,每个人的点滴贡献,都将是推动产生更多、更好免费开源产品的一大步。 70 | 71 | **感谢慷慨捐助,以支持服务器运行和鼓励更多社区成员。** 72 | 73 | 支付宝钱包扫一扫捐助 74 | 75 | 76 | 77 | We believe that the contribution of each bit by bit, will be driven to produce more and better free and open source products a big step. 78 | 79 | **Thank you donation to support the server running and encourage more community members.** 80 | 81 | [![PayPal](http://www.easyproject.cn/images/paypaldonation5.jpg)](https://www.paypal.me/easyproject/10 "Make payments with PayPal - it's fast, free and secure!") 82 | --------------------------------------------------------------------------------