在CentOS 8上安装Monit监视系统
Monit是用于管理和监视Unix系统的小型开源实用程序。
Monit会进行自动维护和修复,并可以在错误情况下执行有意义的因果操作。
Monit被设计为自治系统,不依赖于插件或者任何特殊的库来运行。
相反,它可以直接使用,并且可以利用系统上已经存在的现有基础结构。
例如,Monit可以轻松地与init,upstart或者systemd集成,并且可以使用现有的运行级脚本来管理服务。
系统监视工具必须是非侵入性的,一旦安装,我们应该可以将其忘却。
也就是说,直到sshd或者postfix在托管服务器上消失。
发生这种情况时,很高兴知道我们已经安装了此额外的安全性和保护层,只需等待几秒钟,Monit就会重新启动sshd守护程序。
资料来源:Monit主页
我们可以将Monit用于以下用途:
Monit通过以下方式显示其实力:主动监视:Monit可以在发生错误情况时采取措施,例如:如果sendmail没有运行,Monit可以自动重新启动sendmail或者apache使用过多的资源(例如,如果正在进行DoS攻击),Monit可以停止或者重新启动apache并向我们发送警报消息。
系统监视:可以使用Monit监视localhost上的常规系统资源,例如总体CPU使用率,内存和平均负载。
进程监视:可以使用Monit监视守护进程或者在localhost上运行的类似程序。
Monit对监视守护进程特别有用,例如在系统启动时从/etc/init/Files,目录和文件系统监视启动的进程:我们还可以使用Monit监视localhost上的文件,目录和文件系统。
Monit可以监视这些项目的更改,例如时间戳更改,校验和更改或者大小更改。
出于安全原因,这也很有用–我们可以监视不应更改的文件的md5或者sha1校验和,并在需要更改时获得警报或者执行操作。
在某些时候,类似于cron,但是除此之外,我们可以测试程序的退出值并执行操作,或者如果退出值指示错误,则发送警报。
云和主机:监视与本地localhost上的各种服务器的网络连接或者在远程主机上。
支持TCP,UDP和Unix域套接字。
网络测试可以在协议级别执行; Monit具有针对主要Internet协议(例如HTTP,SMTP等)的内置测试。
系统要求
内存和磁盘空间:至少需要1 MB的RAM和大约500KB的可用磁盘空间。
我们可能需要更多的RAM,具体取决于Monit应监视的服务数量。
ANSI-C编译器和构建系统:我们将需要安装ANSI-C99编译器来构建Monit。
建议使用自由软件基金会(FSF)的GNU C编译器(GCC)。
另外,PATH必须包含基本的构建工具,例如make。
安装Monit
希望对这个工具有足够的了解,我们可以继续在服务器中进行设置,这样我们就可以亲眼看到一旦开始在幕后工作所产生的好处。
我们将获取代码并通过epel-repository安装它。
步骤1:更新并安装必要的软件包
在享受Monit带来的乐趣之前,我们将通过安装以下重要软件包来确保已满足所有依赖性。
sudo dnf -y update sudo dnf -y install zlib-devel pam-devel openssl-devel libtool bison flex autoconf gcc make git epel-release
步骤2:安装Monit
在解决了我们需要的依赖项和应用程序之后,让我们通过提取存储库并通过DNF安装它来充分利用我们的存储库。
sudo dnf -y install monit
启动监控
启动Monit就像运行一个命令一样简单。
如下所示。
$sudo monit ###You should see the message below in the end### New Monit id: a447ea6daa8857bcf3c5089d0d225e83 Stored in '/root/.monit.id' Starting Monit 5.26.0 daemon with http interface at [localhost]:2812
查找Monit的状态
启动Monit后,我们可以通过运行status命令来了解运行情况,如下所示:
$sudo monit status Monit 5.26.0 uptime: 1m System 'master' status OK monitoring status Monitored monitoring mode active on reboot start load average [0.00] [0.00] [0.00] cpu 0.0%us 0.0%sy 0.0%wa memory usage 306.4 MB [17.4%] swap usage 0 B [0.0%] uptime 1h 59m boot time Wed, 30 Sep 2017 17:53:25 data collected Wed, 30 Sep 2017 19:51:59
下面共享了随附的屏幕截图,以使图片更清晰。
我们还可以使Monit能够在服务器重新启动时启动
$sudo systemctl enable --now monit $sudo systemctl status monit ● monit.service - Pro-active monitoring utility for unix systems Loaded: loaded (/usr/lib/systemd/system/monit.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2017-09-30 20:27:05 UTC; 2min 4s ago Main PID: 83433 (monit) Tasks: 2 (limit: 11070) Memory: 960.0K CGroup: /system.slice/monit.service └─83433 /usr/bin/monit -I
步骤3:Monit配置
如我们所料,Monit带有一个配置,使我们可以微调配置并添加我们需要监视的内容。
Monit将使用/etc/monitrc目录中的monitrc控制文件进行配置。
该文件已设置为启动Monit的http服务器,因此我们可以从浏览器的舒适度中了解一些有趣的东西。
在下面的代码段中查找该部分,并将IP从localhost更改为0.0.0.0,这将使我们可以从可以访问服务器的所有IP访问Web界面。
sudo vim /etc/monitrc set httpd port 2812 #use address localhost => only accept connection from localhost (drop if you use M/Monit) use address 0.0.0.0 allow 0.0.0.0/0 allow admin:monit
完成编辑后,不要忘记打开端口2812.
也重新启动监视服务。
sudo firewall-cmd --permanent --add-port=2812/tcp sudo firewall-cmd --reload sudo systemctl restart monit
启动监视后,将浏览器指向http://[IP-or-FQDN]:2812,并在出现提示时使用用户名" admin"和密码" monit"登录。
随后将出现以下页面。
第一次登录
步骤4:添加服务以监控Monit
一旦运行了Monit,如果不添加我们感兴趣的服务以使其在发生故障时进行监视和重新启动,它将对我们没有好处。
我们将使用Nginx Server进行测试。
因此,让我们安装它,然后添加将监视其状态的配置。
sudo dnf install -y nginx sudo systemctl start nginx
Nginx现在可以通过我们可爱的监视Monit进行监视了。
为了启用该功能,我们将在/etc/monit.d目录中添加以下配置,该配置可以保存正在监视的各种服务的配置文件。
$sudo vim /etc/monit.d/nginx-monitor check process nginx with pidfile /run/nginx.pid start program "/usr/bin/systemctl start nginx.service" stop program "/usr/bin/systemctl stop nginx.service" if failed port 80 protocol http then restart
如果我们想检查配置文件中的语法是否正确,Monit会为我们提供该功能。
只需运行以下命令:
$sudo monit -t Control file syntax OK
我们可能已经猜到了,我们必须为其重新加载Monit以适应新的配置。
这很简单:
$sudo monit reload Reinitializing monit daemon
然后我们可以检查它的状态
sudo monit status
下面的屏幕快照显示,我们刚刚添加的新服务(nginx)已被注册,其状态当前为" Ok"。
Web界面还可以向我们显示其中正在监视的内容
其他服务(例如sshd,httpd,syslogd,postfix等)可以以相同的方式添加到/etc/monit.d/目录中的自己的文件中。
步骤5:对Monit进行测试
为了确认Monit可以正常工作,我们将有意停止Nginx服务器,然后等待它是否会尝试并成功重启它。
默认情况下,Monit每隔30秒检查一次服务。
我们可以在配置文件(/etc/monitrc)中更改此值以适合要求。
在文件中查找" set daemon 30"行,并将数字(以秒为单位)更改为更多或者更少。
因此,让我们停止Nginx
sudo systemctl stop nginx
然后检查Monit日志以观察它的作用。
$sudo tail -f /var/log/messages Sep 30 21:12:55 master systemd[1]: Stopping The nginx HTTP and reverse proxy server... Sep 30 21:12:55 master systemd[1]: Stopped The nginx HTTP and reverse proxy server. Sep 30 21:13:24 master monit[85789]: 'nginx' process is not running Sep 30 21:13:24 master monit[85789]: 'nginx' trying to restart Sep 30 21:13:24 master monit[85789]: 'nginx' start: '/usr/bin/systemctl start nginx.service' Sep 30 21:13:24 master systemd[1]: Starting The nginx HTTP and reverse proxy server... Sep 30 21:13:24 master nginx[85809]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok Sep 30 21:13:24 master nginx[85809]: nginx: configuration file /etc/nginx/nginx.conf test is successful Sep 30 21:13:24 master systemd[1]: Started The nginx HTTP and reverse proxy server. Sep 30 21:13:54 master monit[85789]: 'nginx' process is running with pid 85812
确认Nginx已启动
● nginx.service - The nginx HTTP and reverse proxy server Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled) Active: active (running) since Wed 2017-09-30 21:13:24 UTC; 2min 42s ago Process: 85811 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS) Process: 85809 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS) Process: 85807 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS) Main PID: 85812 (nginx) Tasks: 3 (limit: 11070) Memory: 5.3M CGroup: /system.slice/nginx.service ├─85812 nginx: master process /usr/sbin/nginx ├─85813 nginx: worker process └─85814 nginx: worker process
Monit通过在配置时间内重新启动Nginx证明运行良好。
这可能非常有用,尤其是在没有明确原因的情况下服务不断关闭的情况下。
Monit将在这种时候充分支持我们。
我们可以配置更多功能,以便在打开Monit包装时会发现它们。
我们可以从Monit上找到更多信息