监控的层级我认为可分为四个层次:硬件层、操作系统层、应用程序层、业务层。
对于应用程序的监控,首先需要判断应用进程是否存在,端口是否可连接,以NFS服务为例,可监控如下项目:
监控项 | 键值 | 类型 |
nfsd TCP端口监控 | net.tcp.listen[2049] | Zabbix 客户端 |
nfsd UDP端口监控 | net.udp.listen[2049] | Zabbix 客户端 |
nfsd进程监控(NFS守护进程) | proc.num[nfsd,root] | Zabbix 客户端 |
portmap TCP端口监控 | net.tcp.listen[111] | Zabbix 客户端 |
portmap UDP端口监控 | net.udp.listen[111] | Zabbix 客户端 |
rpc.mountd进程监控(RPC安装守护进程) | proc.num[rpc.mountd,root] | Zabbix 客户端 |
rpcbind进程监控(端口映射) | proc.num[rpcbind,root] | Zabbix 客户端 |
配置相应的触发器如下:
名称 | 表达式 |
nfsd TCP端口2049非监听状态 | {NFS Service Monitor:net.tcp.listen[2049].max(#2)}=0 |
nfsd UDP端口2049非监听状态 | {NFS Service Monitor:net.udp.listen[2049].max(#2)}=0 |
nfsd进程异常 | {NFS Service Monitor:proc.num[nfsd,root].max(#2)}=0 |
portmap TCP端口111非监听状态 | {NFS Service Monitor:net.tcp.listen[111].max(#2)}=0 |
portmap UDP端口111非监听状态 | {NFS Service Monitor:net.udp.listen[111].max(#2)}=0 |
rpc.mountd进程异常 | {NFS Service Monitor:proc.num[rpc.mountd,root].max(#2)}=0 |
rpcbind进程异常 | {NFS Service Monitor:proc.num[rpcbind,root].max(#2)}=0 |
(对于web监控,我们可使用zabbix的”web监测“功能,判断http状态码或者直接测试登录流程。)
当然,进程存在并不真意味着服务正常,程序故障,通常从日志中先反映出来,可使用zabbix中的”zabbix客户端(主动式)”类型监控项
log[file,<regexp>,<encoding>,<maxlines>,<mode>,<output>,<maxdelay>]
监控日志关键字,如“warning”、“error”等。
当然最直接的方法是直接通过测试业务流程来监控,这又是另一个层面的问题了。