當前位置:
首頁 > 最新 > Zabbix低級發現監控supervisor管理的進程

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設置和前一篇郵件報警類似.


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 運維講堂 的精彩文章:

Cobbler與Django結合

TAG:運維講堂 |