monit-日志监控工具

发布时间:2026/9/11 18:26:18
monit-日志监控工具 前段时间CTO下达了一个brief需要搭建monit日志监控应用匹配日志中的异常信息自动发送邮件/微信告警。具体的要求如下1.监控***项目的各个应用nginx的日志匹配到错误时发送告警2.监控***项目的各个应用NGINX的日志匹配到错误时发送告警3.搭建mmonit的商业版本dashboard开放到内网可以访问于是开始了我的monit搭建和使用。首先简单介绍下monit的特点:Monit是一款功能非常丰富的进程、文件、目录和设备的监测软件适用于Linux/Unix平台。 它可以自动修复那些已经停止运作的程序,特使适合处理那些由于多种原因导致的软件错误同时Monit 包含一个内嵌的 HTTP(S) Web 界面你可以使用浏览器方便地查看 Monit 所监视的服务器使用轻量级的日志监控工具monit对日志中的异常进行实时报警。 monit是一个Linux系统的管理和监控工具文件监控是包含的功能之一。日志告警的需求定期监控日志文件如每个3s一次 检查日志文件是否有匹配某些关键词的内容如 error, warning, exception 每次只做增量检查满足检查条件时发送告警; 告警条件可以排除某些条件减少误报 避免泛洪式告警每一个周期的检查即使命中多行也只发送一次告警告警中把当前周期检查到的匹配内容全部发出 告警同时发送到邮件以及实时IM如Slack在centos7下安装monit也特别简单。yum -y install monit需要注意的是CentOS 可能需要安装epel源才能有这个软件包所以这里加入一个epel源。# cat /etc/yum.repos.d/epel.repo[epel]nameExtra Packages for Enterprise Linux 7 - $basearch#baseurlhttp://download.fedoraproject.org/pub/epel/7/$basearchmirrorlisthttps://mirrors.fedoraproject.org/metalink?repoepel-7arch$basearchfailovermethodpriorityenabled1gpgcheck1gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7[epel-debuginfo]nameExtra Packages for Enterprise Linux 7 - $basearch - Debug#baseurlhttp://download.fedoraproject.org/pub/epel/7/$basearch/debugmirrorlisthttps://mirrors.fedoraproject.org/metalink?repoepel-debug-7arch$basearchfailovermethodpriorityenabled0gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7gpgcheck1[epel-source]nameExtra Packages for Enterprise Linux 7 - $basearch - Source#baseurlhttp://download.fedoraproject.org/pub/epel/7/SRPMSmirrorlisthttps://mirrors.fedoraproject.org/metalink?repoepel-source-7arch$basearchfailovermethodpriorityenabled0gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7gpgcheck1Debian可以直接apt-get install -y monit接下来看一下yum 装完软件包之后有哪些文件# rpm -ql monit/etc/logrotate.d/monit/etc/monit.d/etc/monit.d/logging/etc/monitrc/usr/bin/monit/usr/lib/systemd/system/monit.service/usr/share/doc/monit-5.14/usr/share/doc/monit-5.14/COPYING/usr/share/doc/monit-5.14/README/usr/share/man/man1/monit.1.gz/var/log/monit.log查看默认配置文件# vim /etc/monitrcsetdaemon 120# 默认每隔两分钟检测一次setlogfile syslog facility log_daemon#默认monit日志为syslogsetidfile/var/.monit.id#设置Monit监控项目的唯一id文件位置默认在$HOME/.monit.idsetstatefile/var/.monit.state#默认存储每个周期内monitorinig 状态的文件setmailserver mail.bar.baz,# 默认的主邮件服务器mailserver 支持格式为SET MAILSERVER hostname|ip-address [PORT number] [USERNAME string] [PASSWORD string] [using SSLAUTO|SSLV2|SSLV3|TLSV1|TLSV11|TLSV12] [CERTMD5 checksum], ...[with TIMEOUT X SECONDS][using HOSTNAMEhostname]例如:setmailserver smtp.gmail.com port 587 usernameuserdomain.compasswordpasswordusing tlsv1 with timeout 30 secondsseteventqueue#默认当邮件服务器不可用时使用eventqueue存储报警事件basedir/var/monitslots 100#限制队列大小setmail-format{from: monitfoo.barreply-to: supportdomain.comsubject: $SERVICE $EVENT at $DATEmessage: Monit $ACTION $SERVICE at $DATE on $HOST: $DESCRIPTION.Yours sincerely,monit}setalert sysadmfoo.bar# receive all alertssethttpd port 2812 and# 引用monit自己封装的web server来监控monit的监控项目状态use address localhost# only accept connection from localhostallow localhost# allow localhost to connect to the server andallow admin:monit# require user admin with password monitallow monit# allow users of group monit to connect (rw)allow usersreadonly# allow users of group users to connect readonlyinclude/etc/monit.d/*下面看下我实际使用到的实例# cat /etc/monitrcset daemon 15 # check services at 2-minute intervalsset logfile /var/log/monit.logset idfile /var/.monit.idset statefile /var/.monit.stateset mailserver smtp.bsitt.cnusername bs_monitorbsitt.cn password *****with timeout 15 secondsset eventqueuebasedir /var/monit # set the base directory where events will be storedslots 100 # optionally limit the queue sizeset mail-format {from: bs_monitorbsitt.cnsubject: Monit Alert -- Host $HOST s $SERVICE $DESCRIPTIONmessage:Date: $DATEAction: $ACTIONHost: $HOSTDescription:Host $HOST s $SERVICE $DESCRIPTION$EVENT Service $SERVICE$DESCRIPTION}#set alert 821903919qq.com # receive all alerts#set alert 1683804030qq.comset alert pmp.operatingboldseas.comset httpd port 2812 andallow localhostallow 116.90.**.**allow 116.90.**.**# allow 192.168.3.0/24allow boldseas:boldseasinclude /etc/monit.d/*这里需要注意的是上面配置的邮件服务server需要用到用户名密码认证能力强的同学可以内网搭建一个邮件系统觉得麻烦的同学可以用腾讯邮箱或者126...balabala最后一项include /etc/monit.d/* 是定义监控项目配置文件放置的位置我们需要监控哪些项目其配置文件就可以放在这里下面是各个monit.d下的配置# cat /etc/monit.d/pmp_web.confcheck file nginx_pmpweb_error_log with path /data/logs/nginx/pmp_web_error.logignore match ^monitif match (warning|error) then alert# cat /etc/monit.d/nginx.conf#check file nginxlog with path /data/tengine/logs/access.logcheck file nginx_error_log with path /data/tengine/logs/error.logignore match ^monitif match (warn|error) then alert配置文件有了接下来检测一下语法对不对呢[rootPMP-DB pmpuser]# monit -tControl file syntax OK启动monit[rootPMP-DB pmpuser]# systemctl restart monit注意如果你的系统里有防火墙这里需要添加防火墙规则monit的配置文件中有一个自带的web server用来监控monit里面的监控项目的状态有个默认端口2812如果没修改的话就添加2812端口的规则如果修改了就添加你修改后的端口防火墙规则monit默认2812端口规则# vim /etc/sysconfig/iptables-A INPUT -p tcp --dport 2812 -j ACCEPT记得重启iptables接下来在浏览器里测试访问monit的状态http://192.168.3.5:11111/输入配置文件中的账号和密码username password尽情enjoy吧附带一张monit 日志报警邮件