使用monit搭建一个监控系统

2023-11-02 07:00

本文主要是介绍使用monit搭建一个监控系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

使用monit搭建一个监控系统

北京马哥教育发表于北京马哥教育订阅

356

在这篇文章中:

  • 马哥linux运维 | 最专业的linux培训机构
    • 1 监控进程
    • 2 监控文件系统或者监控设备
    • 3 监控文件
    • 4 监控program
    • 5 监控主机

马哥linux运维 | 最专业的linux培训机构


上周用monit搭建或者说定制了一个监控系统,来监控服务器发生事情。当然了主要是监控异常,因为我们的产品属于服务器类型,很多进程都daemon,要不停的运行。我们搭建监控目的不过是出现问题能够及时的知道,平时可从web UI上看到整个系统的状况,同时它本身要轻量级,不要影响性能。当然了类似的产品很多了,比如Ganglia,我在老科长波哥曾经搭建过一个Ganglia系统监控科室十几台服务器,让我很是崇拜。本文重点介绍monit。

1620

monit是一个可以监控系统,进程,文件系统,目录,设备的监控软件,可以自动唤起那些异常退出的进程,还可定制你想监控的东西。同时monit提供了内置的WEB UI的功能,可以一目了然地了解监控项的情况。其中正常项为绿色,异常项为红色,很方便的告警,另外,monit还提供了发邮件通知的功能,对于紧急的异常情况可以发送邮件到指定邮箱。比如发生了coredump,发生了DB corrupt,daemon进程异常重启,可以第一时间邮件通知到管理员,呵呵很强大吧。片汤话我们不多讲,讲讲怎么用monit搭建一个监控系统。 monit是一个很轻量级的程序,只需要一个可执行程序monit,一个配置文件monitrc即可工作,当然了我们还是要讲讲安装过程: Ubuntu系统下,安装一如既往的方便:

sudo agt-get install monit

CentOS系统下也是一样

yum install monit

我比较喜欢源码安装,原因是我喜欢看下源码:

wget http://mmonit.com/monit/dist/monit-5.5.tar.gztar zxvf monit-5.5.tar.gzcd monit-5.5./configure --prefix=/usr make make install

注意configure的时候可能会报错:

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 anduse address localhost # only accept connection from localhostallow localhost # allow localhost to connect to the server andallow 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 anduse 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监控系统如下所示:

1620

此时还比较单薄,啥东西也没有,我们继续讲如何配置monitrc。

set daemon 60

这个比较简单,多久检测一次。我们监控条目有若干,我们不能时时刻刻都做一遍检查,那就成了死循环了,对系统性能损耗太大了。60秒表示每60秒检查一次配置文件里面配置的监控项。这个好理解不多说。

set logfile /var/log/monit.log

这个配置项表示monit进程本身的log记录在/var/log/monit.log。

1620

在web UI上也可以查看monit的log。点击monit首页的runnning,

1620

进入monit running status页面,然后点击最右下角的的view log。这个也不多说了。

1620

我们讲述发mail的配置:

set mailserver xxx.xx.xxx.xxx port 25 with timeout 15 secondsset mail-format {from: BETA_SERVER_128@trend.comsubject: 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如下图所示:

1620

发Mail问题解决之后,我们就能专注于定制我们自己需要的监控项了。

============================华丽的分割线=========================================

1 监控进程

比如我们服务器上有Apache,我们要监控Apache的情况,如果Apache异常重启,需要Mail通知。

check process apache with pidfile /var/run/httpd.pidstart 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_abcif changed pid then alert

我们新增了监控进程,看下WEB UI的变化:

1620

点击apache,可以看详细情形,这里就不赘述了。

2 监控文件系统或者监控设备

我们一般有存放数据的分区,也有存放日志的分区,如果日志分区使用空间到了90%,我们认为这是出了问题了,我们要注意这种事件的发生:

check device VAR_LOG with path /var/logif space usage > 85% then alertcheck filesystem tmpfs with path /varif space usage > 80% then alert

上述语句表明tmpfs 挂载在/var目录下,如果空间使用了80%,表明出现了异常,需要发mail通知到管理员。 新增了文件系统监控项后,UI上会增加如下显示:

1620

点击tmpfs 或者VAR_LOG可以进入二层页面看下文件系统的详细信息,我也不赘述了。

3 监控文件

monit也可监控某个文件,监控文件的属性,比如我们的文件permission 是700,如果发生变化则发邮件通知:

check file monit_target with path /var/log/monit_targetif failed permission 700 then alertif size > 1000 MB then exec "/usr/local/bin/rotate /var/log/monit_target

假如我们关注的事情发生了,我们需要执行自己的脚本,可以用 then exec “your_action”的方式处理。

4 监控program

有很多的情况,不好归类,比如,我的系统里面如果产生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/shcorefile_num=`ls /home/manu/core/core* 2>/dev/null| wc -l`if [ $corefile_num -eq 0 ]thenexit 0elseexit 1fi

我们前面一直没提到,如果监控项为异常,WEB UI该项为红色,否则,该项为绿色。我们现在看下监控program之COREDUMP_EXIST:

1620

因为我们有coredump文件,所以该项为红色。

5 监控主机

我们还可以监控其他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

Linux

举报

7

分享

  • dd78159afdcd9d8c58b146aab2b25d4586f.jpg

     

  •  
  •  
  •  

扫描二维码

 

北京马哥教育

1632 篇文章105 人订阅

订阅专栏

  • 傻瓜式配置mutt
  • shell脚本学习材料
  • 数据分析≠Hadoop+NoSQL,不妨先看完善现有技术的10条捷径
  • 64位CentOS6安装MySQL-5.7.13-linux-glibc2.5-x86_64.tar.gz
  • IBM技术专家教你“懒惰”Linux管理员的10个关键技巧

 

转载于:https://my.oschina.net/u/3367404/blog/3038116

这篇关于使用monit搭建一个监控系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/328924

相关文章

使用Python实现高效的端口扫描器

《使用Python实现高效的端口扫描器》在网络安全领域,端口扫描是一项基本而重要的技能,通过端口扫描,可以发现目标主机上开放的服务和端口,这对于安全评估、渗透测试等有着不可忽视的作用,本文将介绍如何使... 目录1. 端口扫描的基本原理2. 使用python实现端口扫描2.1 安装必要的库2.2 编写端口扫

使用Python实现操作mongodb详解

《使用Python实现操作mongodb详解》这篇文章主要为大家详细介绍了使用Python实现操作mongodb的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、示例二、常用指令三、遇到的问题一、示例from pymongo import MongoClientf

SQL Server使用SELECT INTO实现表备份的代码示例

《SQLServer使用SELECTINTO实现表备份的代码示例》在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误,在SQLServer中,可以使用SELECTINT... 在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误。在 SQL Server 中,可以使用 SE

使用Python合并 Excel单元格指定行列或单元格范围

《使用Python合并Excel单元格指定行列或单元格范围》合并Excel单元格是Excel数据处理和表格设计中的一项常用操作,本文将介绍如何通过Python合并Excel中的指定行列或单... 目录python Excel库安装Python合并Excel 中的指定行Python合并Excel 中的指定列P

浅析Rust多线程中如何安全的使用变量

《浅析Rust多线程中如何安全的使用变量》这篇文章主要为大家详细介绍了Rust如何在线程的闭包中安全的使用变量,包括共享变量和修改变量,文中的示例代码讲解详细,有需要的小伙伴可以参考下... 目录1. 向线程传递变量2. 多线程共享变量引用3. 多线程中修改变量4. 总结在Rust语言中,一个既引人入胜又可

golang1.23版本之前 Timer Reset方法无法正确使用

《golang1.23版本之前TimerReset方法无法正确使用》在Go1.23之前,使用`time.Reset`函数时需要先调用`Stop`并明确从timer的channel中抽取出东西,以避... 目录golang1.23 之前 Reset ​到底有什么问题golang1.23 之前到底应该如何正确的

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

详解Vue如何使用xlsx库导出Excel文件

《详解Vue如何使用xlsx库导出Excel文件》第三方库xlsx提供了强大的功能来处理Excel文件,它可以简化导出Excel文件这个过程,本文将为大家详细介绍一下它的具体使用,需要的小伙伴可以了解... 目录1. 安装依赖2. 创建vue组件3. 解释代码在Vue.js项目中导出Excel文件,使用第三

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni