356linux
上周用monit搭建或者说定制了一个监控系统,来监控服务器发生事情。固然了主要是监控异常,由于咱们的产品属于服务器类型,不少进程都daemon,要不停的运行。咱们搭建监控目的不过是出现问题可以及时的知道,平时可从web UI上看到整个系统的情况,同时它自己要轻量级,不要影响性能。固然了相似的产品不少了,好比Ganglia,我在老科长波哥曾经搭建过一个Ganglia系统监控科室十几台服务器,让我非常崇拜。本文重点介绍monit。web
monit是一个能够监控系统,进程,文件系统,目录,设备的监控软件,能够自动唤起那些异常退出的进程,还可定制你想监控的东西。同时monit提供了内置的WEB UI的功能,能够一目了然地了解监控项的状况。其中正常项为绿色,异常项为红色,很方便的告警,另外,monit还提供了发邮件通知的功能,对于紧急的异常状况能够发送邮件到指定邮箱。好比发生了coredump,发生了DB corrupt,daemon进程异常重启,能够第一时间邮件通知到管理员,呵呵很强大吧。片汤话咱们很少讲,讲讲怎么用monit搭建一个监控系统。 monit是一个很轻量级的程序,只须要一个可执行程序monit,一个配置文件monitrc便可工做,固然了咱们仍是要讲讲安装过程: Ubuntu系统下,安装一如既往的方便:chrome
sudo agt-get install monit
CentOS系统下也是同样shell
yum install monit
我比较喜欢源码安装,缘由是我喜欢看下源码:apache
wget http://mmonit.com/monit/dist/monit-5.5.tar.gz tar zxvf monit-5.5.tar.gz cd monit-5.5 ./configure --prefix=/usr make make install
注意configure的时候可能会报错:ubuntu
checking for pam_start in -lpam... no configure: error: PAM enabled but headers or library not found, install the PAM development support or run configure --without-pam
固然了你能够加上–without-pam这个选项绕过这个问题,这个问题在Ubuntu下的解决办法是:浏览器
apt-get install libpam0g-dev
这个问题事后,再次执行./configure又会出现SSL的报错:服务器
checking for SSL library directory... Not found Couldn't find your SSL library files. Use --with-ssl-lib-dir option to fix this problem or disable the SSL support with --without-ssl
解决办法是:微信
sudo apt-get install libssl-dev
安装了libssl以后,configure仍然报错,缘由是它找不到libssl.so,你能够手工搜索libssl.so的位置,而后用 –with-ssl-lib-dir告知configure。 好比在个人ubuntu下:
root@manu:/usr/lib/i386-linux-gnu# find / -name libssl.so /usr/lib/i386-linux-gnu/libssl.so
那么能够执行:
./configure --prefix=/usr --with-ssl-lib-dir=/usr/lib/i386-linux-gnu/
OK,configure以后,能够执行make 和 make install 了。make install以后,将源码路径下的配置文件monitrc拷贝到/etc目录下:
mv monitrc /etc/monitrc chown root:root /etc/monitrc chmod 0700 /etc/monitrc
这些事情作好以后,monit就安装完毕了。咱们尝试启动monit
root@manu:~/code/c/classical/monit-5.5# monit monit: generated unique Monit id 66c0021758d07ecffedadfa0bf5f768d and stored to '/root/.monit.id' Starting monit daemon with http interface at [localhost:2812]
前文讲过,monit内置了一个http,能够经过browser查看,咱们先看下monitrc配置文件的http相关配置:
set httpd port 2812 and use address localhost # only accept connection from localhost allow localhost # allow localhost to connect to the server and allow admin:monit # require user 'admin' with password 'monit' allow @monit # allow users of group 'monit' to connect (rw) allow @users readonly # allow users of group 'users' to connect readonly
这部份内容是http相关的配置,port 2812是端口号,localhost是访问IP,allow localhost表示只容许本机访问,用户名密码是:admin/monit。这不太符合咱们的需求,好比咱们不可能每次都在服务器上用浏览器查看服务器的状态,这太假了,若是咱们有闲情逸致登上服务器,何须要咱们的监控系统。咱们将此处的配置改成
set httpd port 2812 and use address 10.64.74.99 allow 0.0.0.0/0.0.0.0 allow manu:manu
咱们能够用chrome浏览器输入 http://10.64.74.99:2812去查看输出。第三行的意思是咱们容许任何机器登陆咱们UI,访问咱们monit的数据,第四行表示登陆须要用户名和密码:manu/manu。此时咱们的monit监控系统以下所示:
此时还比较单薄,啥东西也没有,咱们继续讲如何配置monitrc。
set daemon 60
这个比较简单,多久检测一次。咱们监控条目有若干,咱们不能时时刻刻都作一遍检查,那就成了死循环了,对系统性能损耗太大了。60秒表示每60秒检查一次配置文件里面配置的监控项。这个好理解很少说。
set logfile /var/log/monit.log
这个配置项表示monit进程自己的log记录在/var/log/monit.log。
在web UI上也能够查看monit的log。点击monit首页的runnning,
进入monit running status页面,而后点击最右下角的的view log。这个也很少说了。
咱们讲述发mail的配置:
set mailserver xxx.xx.xxx.xxx port 25 with timeout 15 seconds set mail-format { from: BETA_SERVER_128@trend.com subject: monit alert -- $EVENT $SERVICE message: $EVENT Service $SERVICE Date: $DATE Action: $ACTION Host: $HOST Description: $DESCRIPTION Your faithful employee, bean } set alert xxxx@trendmicro.com.cn # receive all alerts 设置收件人
有不少人发不出邮件的关键不在monit程序,而在于没有一个SMTP Server,帮助你转发Mail,用所谓的163 或者google的SMTP Server始终没有成功过。我开始也是发不出Mail,后来有了一个不须要用户名密码的SMTP Server以后,天然就能发出邮件通知了。如何搭建一个SMTP Server这是另一个话题了,我按下不表。我用的是咱们公司内部的一个SMTP Server。收到的Mail以下图所示:
发Mail问题解决以后,咱们就能专一于定制咱们本身须要的监控项了。
============================华丽的分割线=========================================
好比咱们服务器上有Apache,咱们要监控Apache的状况,若是Apache异常重启,须要Mail通知。
check process apache with pidfile /var/run/httpd.pid start program = "/etc/init.d/rcWebServer.sh start https" stop program = "/etc/init.d/rcWebServer.sh stop https" if changed pid then alert
全部进程类的监控是一类,以check process abc打头,其中with pidfile是指进程的PID记录在/var/run/httpd.pid。咱们知道apache的PID记录在/var/run/httpd.pid之中,monit经过这个pid文件就能够明白,咱们要求它监控那个进程了。 没有PID文件的进程咋办? 这是个好问题,毕竟大多数的进程都是没有PID文件的。好比你的进程叫作test_abc,是你经过./test_abc叫起的进程,如何告诉monit我要监控这个进程。monit提供了新的方法。MATCHING,就是进程cmdline匹配到了test_abc,我就监控这个进程,监控项叫test_abc
check process test_abc with MATCHING test_abc if changed pid then alert
咱们新增了监控进程,看下WEB UI的变化:
点击apache,能够看详细情形,这里就不赘述了。
咱们通常有存放数据的分区,也有存放日志的分区,若是日志分区使用空间到了90%,咱们认为这是出了问题了,咱们要注意这种事件的发生:
check device VAR_LOG with path /var/log if space usage > 85% then alert check filesystem tmpfs with path /var if space usage > 80% then alert
上述语句代表tmpfs 挂载在/var目录下,若是空间使用了80%,代表出现了异常,须要发mail通知到管理员。 新增了文件系统监控项后,UI上会增长以下显示:
点击tmpfs 或者VAR_LOG能够进入二层页面看下文件系统的详细信息,我也不赘述了。
monit也可监控某个文件,监控文件的属性,好比咱们的文件permission 是700,若是发生变化则发邮件通知:
check file monit_target with path /var/log/monit_target if failed permission 700 then alert if size > 1000 MB then exec "/usr/local/bin/rotate /var/log/monit_target
假如咱们关注的事情发生了,咱们须要执行本身的脚本,能够用 then exec “your_action”的方式处理。
有不少的状况,很差归类,好比,个人系统里面若是产生coredump,我但愿能够检测到,同时在WEB UI上显示而且给我发Mail。我能够本身写个查看有没有coredump的脚本,告诉monit系统,我期待的结果,若是执行脚本与我期待的结果不一样,那么表示本监控项出了异常
check program COREDUMP_EXIST with path "/var/log/tool/coredump_exist.sh" if status != 0 then alert #告诉monit 咱们期待结果是0 ,若是返回值不是 0 ,那么表示出了异常 #!/bin/sh corefile_num=`ls /home/manu/core/core* 2>/dev/null| wc -l` if [ $corefile_num -eq 0 ] then exit 0 else exit 1 fi
咱们前面一直没提到,若是监控项为异常,WEB UI该项为红色,不然,该项为绿色。咱们如今看下监控program之COREDUMP_EXIST:
由于咱们有coredump文件,因此该项为红色。
咱们还能够监控其余host,好比咱们可见ping某台host,若是屡次没有回应,那么邮件通知我
check host my_brother with address XX.XX.XX.XX if failed icmp type echo count 3 with timeout 3 seconds then alert
介绍了不少用法,可是挂一漏万,终极的学习方法仍是看手册 http://mmonit.com/monit/documentation/monit.html#connection_testing。这个基本介绍的很详细,我遇到的一些问题,也是从这里找的答案。
原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)
原文发表时间:2015-02-15
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一块儿分享。
发表于 2018-05-02
分享
扫描二维码
1632 篇文章105 人订阅
订阅专栏