Monit 工具实战和源码介绍

简介

monit是一个跨平台的用来监控Unix/linux系统的工具。

主要针对于类Unix系统,比如Linux、BSD、OSX、Solaris等

可以监控的主要内容:

服务器进程状态

HTTP/TCP状态码

服务器资源变化

文件系统变动

同时,可以针对监控的对象,根据条件设置相应的操作。

例如设定邮件报警、重启服务等等。

Monit易于安装、轻量,但其功能强大。

是充分体现Unix思想的一个理想的监控+自动恢复的工具。

“do one thing and do it well”

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

安装

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

yum install monit 或sudo apt-get install monit

./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 # 查看版本

配置文件样例

  • 监控系统

  • 监控进程

  • 远程服务端口拨测

页面

监控对象

对象的详细信息以及告警策略

代码结构

代码中主要的各个模块

主要数据结构

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

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

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

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

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

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

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

根据service不同的种类,又有不同的结构;

以进程(process)监控举例,包括以下:

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

亮点

其短小精干的指标采集能够满足单机需要,之外,最重要的亮点在于其在监控的同时能够根据条件配置相应的操作(Aciton),

例如:

监控到某个服务在5个检验周期(cycle)挂掉,执行重启操作.

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

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

对应的文件是:

l.l 词法分析使用Flex进行处理

p.y 语法分析 使用Yacc进行处理

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

  • 待补充
我来评几句
登录后评论

已发表评论数()

相关站点

热门文章