-
配置文件基础概念
-
顺序加载
- ~/.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>
-
用途
- 这个可以用于监控安全问题
- 文件系统监控: 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 : 不同的服务之间有依赖.
- 这个到用的时候, 再查吧.