导图社区 Monit知识梳理
这是一篇关于Monit知识梳理的思维导图,主要内容有配置文件基础概念、基本参数、Email 通知参数等。
编辑于2022-12-08 10:10:33 浙江省Monit
配置文件基础概念
顺序加载
~/.monitrc : 用户级别
/etc/monitrc : 系统级别
@sysconfdir@/monitrc : 这个通过 Source 安装可执行, 但 apt 我也不知道在哪
./monitrc : 命令执行的 "目录级别"
文件权限检查
安全问题
权限控制在 0700 : u=xrw,g=,o= (用户可读写)
特定语言 DSL
配合英语的关键字
'if', 'and', 'with(in)', 'has', 'us(ing|e)', 'on(ly)', 'then', 'for', 'of'
这些关键字有时候还真难记住. 其是让配置文件可读了, 但不同的人写出来格式都会不一样, 团队的时候还不好适应
三种类型文件
无 check 包裹的外围 "set xxx" 这个是全局变量
全局 include , 用于将内容切分到不同文件中
文件内的 check 包括块
这个是最小单元块
这里就代表了 Monit 能够监控几大类的功能
可监控类型
进程监控: CHECK PROCESS <unique name> <PIDFILE <path> | MATCHING <regex>>
1. 指定 PID 文件类
2. 正则匹配进程名字类
可用 monit procmatch <regx> 来测试
用途
这个应该是使用最多的, 保证进程的安全
程序/脚本监控: CHECK PROGRAM <unique name> PATH <executable file> [TIMEOUT <number> SECONDS]
1. executable file 文件的绝度路径
2. 脚本执行的超时时间, 默认 300s
用途
如果加上 cron 的语法, 就可以管理后端任务了
进程/程序
文件监控: CHECK FILE <unique name> PATH <path>
用途
这个可以用于监控安全问题
但如果一个有经验的黑客, 一上来先查看 top 命令检查进程. 看到有 monit 然后将其关闭, 那还查个啥子.
文件系统监控: CHECK FILESYSTEM <unique name> PATH <path>
文件夹监控: CHECK DIRECTORY <unique name> PATH <path>
文件类
服务器监控: CHECK HOST <unique name> ADDRESS <host address>
网络监控: CHECK NETWORK <unique name> <ADDRESS <ipaddress> | INTERFACE <name>>
网络类
??? CHECK FIFO <unique name> PATH <path>
基本参数
logfile : 日志信息输出
默认: set logfile = /var/log/monit.log
也可制成 syslog 语法
daemon : 最基础的 monit poll 信息的间隔时间
默认 set daemon 120
数字单位为 秒
init : 让 monit 进程从 /sbin/init 下启动
这个是用来解决 monit 自身启动的问题
让 Linux init 进程管理他, 重启自启动 monit
也可让 crontab 定时启动一次. (init 将 crontab 启动了)
在 Ubuntu 下 apt-get 安装, 会自动注册 System V 的 init 脚本到 /etc/init.d 下
ssl : 我不太理解, 这里的 SSL 是只什么? 而且这里有一大波的参数
http 后台服务器
这是非常重要的配置, 但默认是关闭的
需要将其打开
1. monit cli 也需要这里提供后端信息支持
2. 拥有前端 http 协议访问 web 页面
3. 安全考虑可以监听本地端口. (localhost 或 127.0.0.1)
SET HTTPD PORT <number> [ADDRESS <hostname | IP-address>] [SSL <ENABLE | DISABLE>] [PEMFILE <path>] [CLIENTPEMFILE <path>] [ALLOWSELFCERTIFICATION] [SIGNATURE <ENABLE | DISABLE>] ALLOW <user:password | IP-address | IP-range>+
核心参数
port number : 指定监听的端口, 默认 2812
hostname | ip-address : 监听的 ip 地址. 经常被用成: user address localhost [use 语义词]
allow
账户类
user:passwd
@aaa PAM
网络地址
192.123.291.29 : ip 地址
129.298.19.0/255.255.255.0 : 网段
开启用户密码登陆例子
set httpd port 2812 use address 0.0.0.0 # 使用了 use 语义词, 监听全 ip allow localhost # 必须让本地能够连接 allow wyatt:616 # 远程访问需要验证用户密码
Email 通知参数
set mail-format : 要 email 模板, 不能每次都输入一大堆 Email 发送元信息
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 }
重要参数
from: 现在的邮件服务器都不允许随意填写
reply-to: noreply@abc.com 也是邮件服务器所限制
subject: 邮件 title 模板
可用的 $NAME 变量
$EVENT : A string describing the event that occurred. $SERVICE : The service name $DATE : The current time and date (RFC 822 date style). $HOST : The name of the host Monit is running on $ACTION : The name of the action which was done by Monit. $DESCRIPTION : The description of the error condition
message: 固定的模板格式
简单的例子
set mail-format { from: noreply@comany.com reply-to: noreply@comany.com subject: $SERVICE emit $EVENT at $DATE message: Monit $ACTION $SERVICE at $DATE on $HOST: $DESCRIPTION. Yours sincerely, monit }
set mailserver : 通过配置邮件服务器将 Email 发出去
SET MAILSERVER <hostname|ip-address> [PORT number] [USERNAME string] [PASSWORD string] [using SSL [with options {...}] [CERTIFICATE CHECKSUM [MD5|SHA1] <hash>], ... [with TIMEOUT X SECONDS] [using HOSTNAME hostname]
重要参数
ip-address: stmp 地址
port 端口
587 TLS
465 SSL
25 默认
username, password 登陆的账号密码
using ssl, 现在基本邮件服务器都使用 ssl
Gmail 例子
set mailserver smtp.gmail.com port 587 username "MYUSER" password "MYPASSWORD" using tlsv12
alert <email> : 具体通知那个 Email
SET ALERT mail-address [[NOT] {event, ...}] [REMINDER cycles]
重要参数
email-address: 具体的 email 地址. 猜测是可以 , 连接多个
reminder cycles
monit 在不停的 poll interval 的时候, 只在服务 fail 和 恢复 这两个节点各发一封邮件, 避免重复反复
但如果 poll interval 循环多了还没有启动, 还是需要知道的. 而 x cycles 则为, 失败了后, 每个几个轮训再发一次邮件
在 check 包括内
要发送, 添加 alert 指令
alert <email> 为在 block 内生效的 email 地址
不要发送, 添加 noalert <email>
注意, 就这个参数使用了 {} 大括号
Service Test : 这个很重要, 服务器测试
这个有一大批的测试情况
因为写成了 DSL
又因为情况很多
而且类型也多
常用类型
Resource Testing : 资源测试 - 系统的硬盘, 内存啊等等
total cpu
total memory
memory
cpu
cpu([user|system|wait])
swap
children
loadavg([1min|5min|15min])
服务公用参数
Service Method: 动作方法: - 通过 check xxxx 的 block 只要检查什么 - 这里解决做什么动作
<START | STOP | RESTART> [PROGRAM] = "program" [[AS] UID <number | string>] [[AS] GID <number | string>] [[WITH] TIMEOUT <number> SECOND(S)]
check program
需要以 #! 开头指定执行应用
#! /usr/sh
#! /usr/bin/ruby
...
需要 755 可执行权限
restart
可独自设置 restart 命令
如果没设, 则先 stop 再 start
Service Poll Time: block 内 interval 在 monit 的整个 daemon 周期之上的 pool interval
用途
在 program 一类最有应用场景
每个一段时间跑一次检查脚本
当然, 也可一定程度代替 crontab
这个尽量不使用, 能够使用 cron 代替则代替, 除非真有特定的场景需要这个处理.
group 分组
就用于分组后过滤 启动/停止用的
group waytt
monit mode
active
这个是默认
这个是我们想要
这个才会主动修复错误
passive
这个不会修复错误
manual
Restart Limit : 有限制的重启服务 当能够根据触发条件重启服务, 但你总不希 望服务每个 10s 这种极端情况重启吧?
这个到用的时候, 再查吧.
Service Dependencies : 不同的服务之间有依赖.
这个到用的时候, 再查吧.