Zabbix低級發現監控supervisor管理的進程
Supervisor對與我們來說不陌生,因為它可以方便我們管理開發的agent,那麼這些agent如何讓zabbix監控到呢?今天就給大家演示下,我這邊採用zabbix低級發現功能來自動的將其supervisor管理的agent做佔用內存和進程數監控(在這裡我演示的是針對apache/nginx/crond這三款常用的進程做例子的,大家可以依據自己的情況來改寫).
OS:Centos6.10
Zabbix:3.4.11
安裝supervisor supervisor-quick
pip install supervisor supervisor-quick
創建目錄
mkdir /etc/supervisord.d/
mkdir /var/log/supervisord/
修改limits.conf配置文件
vi /etc/security/limits.conf
* - nofile 655360
root- nofile 655360
修改supervisord.conf配置文件
vi /etc/supervisord.conf
[unix_http_server]
file=/var/run/supervisor.sock ; (the path to the socketfile)
[supervisord]
logfile=syslog ; (main logfile;default $CWD/supervisord.log)
loglevel=info ; (loglevel;default info; others: debug,warn,trace)
pidfile=/run/supervisord.pid ; (supervisord pidfile;defaultsupervisord.pid)
nodaemon=false ; (start inforeground if true;default false)
minfds=655360 ; (min. availstartup file descriptors;default 1024)
minprocs=655360 ; (min. availprocess descriptors;default 200)
nocleanup=false
umask=022
user=root
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL for a unix socket
[rpcinterface:supervisor]
supervisor.rpcinterface_factory =supervisor.rpcinterface:make_main_rpcinterface
[ctlplugin:quick]
supervisor.ctl_factory =supervisor_quick:make_quick_controllerplugin
[include]
files = /etc/supervisord.d/*.ini
supervisor管理apache配置
[root@zabbix-agent ~]# more /etc/supervisord.d/httpd.ini
[program:httpd]
command=/usr/sbin/httpd -DFOREGROUND
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/supervisord/httpd_stdout.log
stderr_logfile=/var/log/supervisord/httpd_stderr.log
supervisor管理nginx配置
[root@zabbix-agent supervisord.d]# more nginx.ini
[program:nginx]
command=/usr/sbin/nginx -g "daemon off;"
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/supervisord/nginx_stdout.log
stderr_logfile=/var/log/supervisord/nginx_stderr.log
supervisor管理crond配置:
[root@zabbix-agent supervisord.d]# more crond.ini
[program:crond]
command=/etc/init.d/crond start
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/supervisord/crond_stdout.log
stderr_logfile=/var/log/supervisord/crond_stderr.log
supervisor啟動
[root@zabbix-agent ~]# /usr/bin/supervisord-c /etc/supervisord.conf
[root@zabbix-agent ~]# supervisorctl status
crond RUNNING pid 18663, uptime 0:00:07
httpd RUNNING pid 18664, uptime 0:00:07
nginx RUNNING pid 18665, uptime 0:00:04
zabbix agent端配置(因我的zabbixagent端是我通過fpm打包定製到/usr/local/zabbix目錄下的,所以目錄可能與各位不一樣,但不影響配置):
腳本2個(/usr/local/zabbix/scripts):
1.processstatus.py(2個作用,1個是進程佔用物理內存,1個是有多少個進程)
#!/usr/bin/env python
#Author:jacky
import sys
import re
import subprocess
process_name=sys.argv[1]
try:
flag=sys.argv[2]
except:
flag=""
result=subprocess.Popen("top-bn1",shell=True,stdout=subprocess.PIPE)
def process_mem(process_name):
p_mem=0
lines=line.strip()
if lines:
p_v=lines.split()
if p_v[-1] == process_name:
p_mem+=int(p_v[5])
if p_mem:
return p_mem
else:
return ""
def process_num(process_num):
p_nums=0
lines=line.strip()
if lines:
p_v=lines.split()
if p_v[-1] == process_name:
p_nums+=1
if p_nums:
return p_nums
else:
return ""
if __name__=="__main__":
if flag=="num":
print process_num(process_name)
else:
print process_mem(process_name)
python processstatus.py httpd num
9
python processstatus.py httpd
24424
2.check_supervisor.py
#!/usr/bin/env python
#Author:jacky
import sys
import re
import json
import subprocess
process_names=[]
discovery_supervisor_process={}
discovery_supervisor_process["data"]=[]
def discovery():
result=subprocess.Popen("sudo supervisorctlstatus",shell=True,stdout=subprocess.PIPE)
lines=line.strip()
if lines:
p_n=lines.split()
process_names.append(p_n[0])
for p_name in process_names:
discovery_supervisor_process["data"].append({"{#PROCESS}":p_name})
return discovery_supervisor_process
if __name__ =="__main__":
if len(sys.argv) == 2:
if sys.argv[1]=="discovery":
print json.dumps(discovery(),indent=4)
else:
print "USAGE:%s discovery"%sys.argv[0]
else:
print "USAGE:%s discovery"%sys.argv[0]
用與輸出如下內容:
{
"data": [
{
"{#PROCESS}": "crond"
},
{
"{#PROCESS}": "httpd"
},
{
"{#PROCESS}": "nginx"
}
]
}注意:
腳本的許可權755,屬用戶zabbix與組zabbix
配置文件2個(/usr/local/zabbix/etc/zabbix_agentd.conf.d)
userparameter_supervisor.conf
#UserParameter=supervisor[*],(sudo supervisorctl status"$1"|grep RUNNING|wc -l)
UserParameter=supervisor.discovery,/usr/local/zabbix/scripts/check_supervisor.py discovery
userparameter_process.conf
UserParameter=process.discovery[*],/etc/zabbix/scripts/processstatus.py $1 $2
注意:
需要設置sudo
1.注釋#Defaults requiretty
2.添加: zabbixALL=NOPASSWD: /usr/bin/supervisorctl status
Zabbix server端測試
[root@localhost ~]# zabbix_get -s192.168.214.12 -p 10050 -k "supervisor.discovery"
{
"data": [
{
"{#PROCESS}": "crond"
},
{
"{#PROCESS}": "httpd"
},
{
"{#PROCESS}": "nginx"
}
]
}
[root@localhost ~]# zabbix_get -s192.168.214.12 -p 10050 -k "process.discovery[httpd,num]"
9
下面就是在zabbix gui上的配置了.
1.創建一個空模板(名字:Supervisor_Template_Low_Discovery,操作過程略):
2.在此模板的Discovery上創建低級發現.
再在Process Monitor規則的Item prototypes上創建監控元素.
結果:
再在Process Monitor規則的Graph上創建圖像
結果:
最後將其模板link到被監控機,過幾分鐘便可以看到了。
最新數據
好了,監控到此結束.對與trigger與action設置和前一篇郵件報警類似.


TAG:運維講堂 |