• 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 日志报警邮件

  • 相关阅读:
    leetcode 137
    leetcode 134
    133. Clone Graph
    leetcode 131
    leetcode 130
    mac uwsgi ssl issue handler
    leetcode 85 Maximal Rectangle golang
    leetcode 84 golang
    leetcode 61
    C# 后台实现一次上传多个文件
  • 原文地址:https://www.cnblogs.com/xuexiaohun/p/6293121.html
Copyright © 2020-2023  润新知