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]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
 
[epel-debuginfo]
name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch/debug
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1
 
[epel-source]
name=Extra Packages for Enterprise Linux 7 - $basearch - Source
#baseurl=http://download.fedoraproject.org/pub/epel/7/SRPMS
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1
Debian可以直接: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/monitrc
set  daemon  120            # 默認每隔兩分鍾檢測一次
set  logfile syslog facility log_daemon   #默認monit日志為syslog
set  idfile  /var/ .monit. id   #設置Monit監控項目的唯一id文件位置,默認在$HOME/.monit.id
set  statefile  /var/ .monit.state      #默認存儲每個周期內monitorinig 狀態的文件
set  mailserver 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 HOSTNAME  hostname ]
例如:
set  mailserver smtp.gmail.com port 587 username  "user@domain.com"  password  "password"  using tlsv1 with timeout 30 seconds
 
 
set  eventqueue          #默認當郵件服務器不可用時使用eventqueue存儲報警事件
      basedir  /var/monit  
      slots 100             #限制隊列大小
 
set  mail- format  {
       from: monit@foo.bar
         reply-to: support@domain.com
        subject: $SERVICE $EVENT at $DATE
       message: Monit $ACTION $SERVICE at $DATE on $HOST: $DESCRIPTION.
             Yours sincerely,
             monit
  }
 
 
set  alert sysadm@foo.bar                        # receive all alerts
 
 
set  httpd port 2812 and      # 引用monit自己封裝的web server來監控monit的監控項目狀態;
      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
 
include  /etc/monit .d/*
 
下面看下我實際使用到的實例:

# cat /etc/monitrc
set daemon 15 # check services at 2-minute intervals
set logfile /var/log/monit.log
set idfile /var/.monit.id
set statefile /var/.monit.state
set mailserver smtp.bsitt.cn
username "bs_monitor@bsitt.cn" password "*****"
with timeout 15 seconds
set eventqueue
basedir /var/monit # set the base directory where events will be stored
slots 100 # optionally limit the queue size
set mail-format {
from: bs_monitor@bsitt.cn
subject: Monit Alert -- Host $HOST 's $SERVICE $DESCRIPTION
message:
Date: $DATE
Action: $ACTION
Host: $HOST
Description:
Host $HOST 's $SERVICE $DESCRIPTION
$EVENT Service $SERVICE
$DESCRIPTION
}
#set alert 821903919@qq.com # receive all alerts
#set alert 1683804030@qq.com
set alert pmp.operating@boldseas.com
set httpd port 2812 and
allow localhost
allow 116.90.**.**
allow 116.90.**.**
# allow 192.168.3.0/24
allow boldseas:boldseas
include /etc/monit.d/*

這里需要注意的是,上面配置的郵件服務server需要用到用戶名密碼認證,能力強的同學可以內網搭建一個郵件系統,覺得麻煩的同學可以用騰訊郵箱或者126...balabala

最后一項include /etc/monit.d/* 是定義監控項目配置文件放置的位置;我們需要監控哪些項目其配置文件就可以放在這里

下面是各個monit.d下的配置

# cat /etc/monit.d/pmp_web.conf
check file nginx_pmpweb_error_log with path /data/logs/nginx/pmp_web_error.log
ignore match "^monit"

if match "(warning|error)" then alert

# cat /etc/monit.d/nginx.conf
#check file nginxlog with path /data/tengine/logs/access.log
check file nginx_error_log with path /data/tengine/logs/error.log
ignore match "^monit"

if match "(warn|error)" then alert

配置文件有了,接下來檢測一下語法對不對呢:

[root@PMP-DB pmpuser]# monit -t
Control file syntax OK

啟動monit:

[root@PMP-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

wKioL1PxoIuSD8gMAALNGbGQ0ZA788.jpg

盡情enjoy吧!

 附帶一張monit 日志報警郵件

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM