简介

monit是一个跨平台的用来监控Unix/linux系统的工具。
主要针对于类Unix系统,比如Linux、BSD、OSX、Solaris等

可以监控的主要内容:
服务器进程状态
HTTP/TCP状态码
服务器资源变化
文件系统变动

同时,可以针对监控的对象,根据条件设置相应的操作。
例如设定邮件报警、重启服务等等。

Monit 易于安装、轻量,但其功能强大。
是充分体现Unix思想的一个理想的监控+自动恢复的工具。
“do one thing and do it well”

注意:Monit是一个开源工具(单机),M/Monit(集中管理)是基于其的收费企业版
image.png

安装

Linux的源现已经包括了Monit的包,直接使用包管理器安装即可。

yum install monit 或 sudo apt-get install monit

源码安装:
https://bitbucket.org/tildesl...

./configure make make install

非常简单,在此不多介绍

基本命令

    monit -t # 配置文件检测
    monit # 启动monit daemon
    monit -c /var/monit/monitrc # 启动monit daemon时指定配置文件
    monit reload # 当更新了配置文件需要重载
    monit status # 查看所有服务状态
    monit status nginx # 查看nginx服务状态
    monit stop all # 停止所有服务
    monit stop nginx # 停止nginx服务
    monit start all # 启动所有服务
    monit start nginx # 启动nginx服务
    monit -V # 查看版本

配置文件样例

  • 监控系统

image.png

  • 监控进程

image.png

  • 远程服务端口拨测

image.png

页面

监控对象
image.png
对象的详细信息以及告警策略
image.png

代码结构

代码中主要的各个模块
image.png

主要数据结构

image.png

所有监控对象以service进行组织,command 表示针对该service的操作, event表示在该对象上发生的事件(例如告警事件),info为不同监控对象类型的检验(validate)结果.

Service(监控对象)有以下几种类型,同时列举出了每种对象所监控的内容:

  • 文件系统:容量,uid/gid, 权限,inode, 读写速率
  • 目录:  权限,uid/gid
  • 进程: 时间,cpu, mem, 子进程,磁盘读写等
  • 主机:  端口拨测
  • 系统:  系统的基本指标
  • Fifo:待补充 
  • 程序:  脚本返回状态
  • 网络:  link up/down, link capacity changes, bindwidth等

image.png

Runtime是运行时相关的各项配置参数,环境变量,控制参数等,包含以下内容:

  • 状态文件:id,pid,状态文件(state),control(配置文件),日志
  • 运行状态:运行中,停止,守护进程等等
  • 检查周期:检查周期,初次启动时的延迟时间
  • 系统基本:基础系统信息
  • HTTP API:HTTP设置

还有诸如"环境变量","邮箱列表"等其他众多运行时信息

Service info 是每一个检查对象的当前检验周期的状态

根据service不同的种类,又有不同的结构;
以进程(process)监控举例,包括以下:

  • 进程的各项id
  • 内存
  • cpu
  • uptime 
  • I/O
  • 等等

image.png

亮点

其短小精干的指标采集能够满足单机需要,之外,最重要的亮点在于其在监控的同时能够根据条件配置相应的操作(Aciton),
例如:
监控到某个服务在5个检验周期(cycle)挂掉,执行重启操作.

下图为另一个例子,在检测到某日志文件大于100M时,执行清理脚本.

image.png

同时,大家已经发现,为啥其配置文件还带if判定的.这也正式其神奇之处,整个配置文件经过词法分析和语法分析这种黑科技,所以实现了自定义的语法.

对应的文件是:
l.l 词法分析   使用Flex进行处理
p.y  语法分析 使用Yacc进行处理

例如以下代码中,包括了检测进程(process)的配置项解析

image.png

  • 待补充

机械猿
1 声望0 粉丝

老白学编程


« 上一篇
Numa基础