disk name
<code>#/usr/bin/python</code>
<code>#This script is used to discovery disk on the server</code>
<code>import</code> <code>subprocess</code>
<code>import</code> <code>json</code>
<code>args</code><code>=</code><code>"cat /proc/diskstats |grep -E '\ssd[a-z]\s|\sxvd[a-z]\s|\svd[a-z]\s'|awk '{print $3}'|sort|uniq 2>/dev/null"</code>
<code>t</code><code>=</code><code>subprocess.Popen(args,shell</code><code>=</code><code>True</code><code>,stdout</code><code>=</code><code>subprocess.PIPE).communicate()[</code><code>0</code><code>]</code>
<code> </code>
<code>disks</code><code>=</code><code>[]</code>
<code>for</code> <code>disk </code><code>in</code> <code>t.split(</code><code>'\n'</code><code>):</code>
<code> </code><code>if</code> <code>len</code><code>(disk) !</code><code>=</code> <code>0</code><code>:</code>
<code> </code><code>disks.append({</code><code>'{#DISK_NAME}'</code><code>:disk})</code>
<code>print</code> <code>json.dumps({</code><code>'data'</code><code>:disks},indent</code><code>=</code><code>4</code><code>,separators</code><code>=</code><code>(</code><code>','</code><code>,</code><code>':'</code><code>))</code>
2.監控網站通路時間
<code>#!/usr/bin/env python</code>
<code># -*- coding: utf-8 -*-</code>
<code>import</code> <code>os,sys</code>
<code>import</code> <code>time</code>
<code>import</code> <code>sys</code>
<code>import</code> <code>pycurl</code>
<code>urllist</code><code>=</code><code>[</code><code>'a.com'</code><code>,</code><code>'b.com'</code><code>,</code><code>'c.com'</code><code>,</code><code>'d.com'</code><code>,</code><code>'e.com'</code><code>]</code>
<code>class</code> <code>Test:</code>
<code> </code><code>def</code> <code>__init__(</code><code>self</code><code>):</code>
<code> </code><code>self</code><code>.contents </code><code>=</code> <code>''</code>
<code> </code><code>def</code> <code>callback(</code><code>self</code><code>,curl):</code>
<code> </code><code>self</code><code>.contents </code><code>=</code> <code>self</code><code>.contents </code><code>+</code> <code>curl</code>
<code>def</code> <code>test_gzip(url):</code>
<code> </code><code>data </code><code>=</code> <code>{}</code>
<code> </code><code>t </code><code>=</code> <code>Test()</code>
<code> </code><code>c </code><code>=</code> <code>pycurl.Curl()</code>
<code> </code><code>c.setopt(pycurl.WRITEFUNCTION,t.callback)</code>
<code> </code><code>c.setopt(pycurl.ENCODING, </code><code>'gzip'</code><code>)</code>
<code> </code><code>c.setopt(pycurl.URL,url)</code>
<code> </code><code>c.perform()</code>
<code> </code><code>data[</code><code>'HTTP_CODE'</code><code>]</code><code>=</code><code>c.getinfo(c.HTTP_CODE)</code>
<code> </code><code>data[</code><code>'NAMELOOKUP_TIME'</code><code>]</code><code>=</code><code>(c.getinfo(c.NAMELOOKUP_TIME))</code><code>*</code><code>1000</code>
<code> </code><code>data[</code><code>'CONNECT_TIME'</code><code>]</code><code>=</code><code>(c.getinfo(c.CONNECT_TIME))</code><code>*</code><code>1000</code>
<code> </code><code>data[</code><code>'PRETRANSFER_TIME'</code><code>]</code><code>=</code><code>(c.getinfo(c.PRETRANSFER_TIME))</code><code>*</code><code>1000</code>
<code> </code><code>data[</code><code>'SPEED_DOWNLOAD'</code><code>]</code><code>=</code><code>c.getinfo(c.SPEED_DOWNLOAD)</code>
<code> </code><code>return</code> <code>data</code>
<code>def</code> <code>web_name_discovery():</code>
<code> </code><code>web_list</code><code>=</code><code>[]</code>
<code> </code><code>web_dict</code><code>=</code><code>{</code><code>"data"</code><code>:</code><code>None</code><code>}</code>
<code> </code><code>for</code> <code>url </code><code>in</code> <code>urllist:</code>
<code> </code><code>url_dict</code><code>=</code><code>{}</code>
<code> </code><code>url_dict[</code><code>"{#NAME}"</code><code>]</code><code>=</code><code>url</code>
<code> </code><code>web_list.append(url_dict)</code>
<code> </code><code>web_dict[</code><code>"data"</code><code>]</code><code>=</code><code>web_list</code>
<code> </code><code>jsonStr </code><code>=</code> <code>json.dumps(web_dict, sort_keys</code><code>=</code><code>True</code><code>, indent</code><code>=</code><code>4</code><code>)</code>
<code> </code><code>return</code> <code>jsonStr</code>
<code>def</code> <code>get_web_status():</code>
<code> </code><code>data</code><code>=</code><code>test_gzip(sys.argv[</code><code>2</code><code>])</code>
<code> </code><code>return</code> <code>data[sys.argv[</code><code>3</code><code>]]</code>
<code>if</code> <code>__name__ </code><code>=</code><code>=</code> <code>'__main__'</code><code>:</code>
<code> </code><code>if</code> <code>sys.argv[</code><code>1</code><code>] </code><code>=</code><code>=</code> <code>"web_name_discovery"</code><code>:</code>
<code> </code><code>print</code> <code>web_name_discovery()</code>
<code> </code><code>elif</code> <code>sys.argv[</code><code>1</code><code>] </code><code>=</code><code>=</code> <code>"get_web_status"</code><code>:</code>
<code> </code><code>print</code> <code>get_web_status()</code>
3.輸出指定目錄tomcat名稱
<code>import</code> <code>os</code>
<code>import</code> <code>socket</code>
<code>import</code> <code>glob</code>
<code>java_names_file</code><code>=</code><code>'java_names.txt'</code>
<code>javas</code><code>=</code><code>[]</code>
<code>if</code> <code>os.path.isfile(java_names_file):</code>
<code># print 'java_names_file exists!'</code>
<code>#####</code>
<code>##### here should use % (java_names_file) instead of using the python variable java_names_file directly inside the ''' ''' quotes</code>
<code> </code><code>args</code><code>=</code><code>'''awk -F':' '{print $1':'$2}' %s'''</code> <code>%</code> <code>(java_names_file)</code>
<code> </code><code>t</code><code>=</code><code>subprocess.Popen(args,shell</code><code>=</code><code>True</code><code>,stdout</code><code>=</code><code>subprocess.PIPE).communicate()[</code><code>0</code><code>]</code>
<code>elif</code> <code>glob.glob(</code><code>'/xx/xx/*_tomcat'</code><code>) </code><code>and</code> <code>not</code> <code>os.path.isdir(</code><code>'/opt/logs/logstash'</code><code>) </code><code>and</code> <code>not</code> <code>os.path.isdir(</code><code>'/opt/app/elasticsearch/config'</code><code>):</code>
<code> </code><code>t</code><code>=</code><code>subprocess.Popen(</code><code>'cd /xx/xx && ls *_tomcat|grep _tomcat'</code><code>,shell</code><code>=</code><code>True</code><code>,stdout</code><code>=</code><code>subprocess.PIPE)</code>
<code> </code>
<code>for</code> <code>java </code><code>in</code> <code>t.stdout.readlines():</code>
<code> </code><code>if</code> <code>len</code><code>(java) !</code><code>=</code> <code>0</code><code>:</code>
<code> </code><code>javas.append({</code><code>'{#JAVA_NAME}'</code><code>:java.strip(</code><code>'\n'</code><code>).strip(</code><code>':'</code><code>)})</code>
<code>print</code> <code>json.dumps({</code><code>'data'</code><code>:javas},indent</code><code>=</code><code>4</code><code>,separators</code><code>=</code><code>(</code><code>','</code><code>,</code><code>':'</code><code>))</code>
4.port
<code>#!/usr/bin/python</code>
<code>#coding=utf-8</code>
<code>import</code> <code>commands</code>
<code>import</code> <code>os,sys </code>
<code>##########傳回指令執行結果</code>
<code>def</code> <code>getComStr(comand):</code>
<code> </code><code>try</code><code>:</code>
<code> </code><code>stat, proStr </code><code>=</code> <code>commands.getstatusoutput(comand)</code>
<code> </code><code>except</code><code>:</code>
<code> </code><code>print</code> <code>"command %s execute failed, exit"</code> <code>%</code> <code>comand</code>
<code> </code><code>#将字元串轉化成清單</code>
<code> </code><code>#proList = proStr.split("\n")</code>
<code> </code><code>return</code> <code>proStr</code>
<code> </code>
<code>##########擷取系統服務名稱和監聽端口</code>
<code>def</code> <code>filterList():</code>
<code> </code><code>tmpStr </code><code>=</code> <code>getComStr(</code><code>"netstat -tpln"</code><code>)</code>
<code> </code><code>tmpList </code><code>=</code> <code>tmpStr.split(</code><code>"\n"</code><code>)</code>
<code> </code><code>del</code> <code>tmpList[</code><code>0</code><code>:</code><code>2</code><code>]</code>
<code> </code><code>newList </code><code>=</code> <code>[]</code>
<code> </code><code>for</code> <code>i </code><code>in</code> <code>tmpList:</code>
<code> </code><code>val </code><code>=</code> <code>i.split()</code>
<code> </code><code>del</code> <code>val[</code><code>0</code><code>:</code><code>3</code><code>]</code>
<code> </code><code>del</code> <code>val[</code><code>1</code><code>:</code><code>3</code><code>]</code>
<code> </code><code>#提取端口号</code>
<code> </code><code>valTmp </code><code>=</code> <code>val[</code><code>0</code><code>].split(</code><code>":"</code><code>)</code>
<code> </code><code>val[</code><code>0</code><code>] </code><code>=</code> <code>valTmp[</code><code>1</code><code>]</code>
<code> </code><code>#提取服務名稱</code>
<code> </code><code>valTmp </code><code>=</code> <code>val[</code><code>1</code><code>].split(</code><code>"/"</code><code>)</code>
<code> </code><code>val[</code><code>1</code><code>] </code><code>=</code> <code>valTmp[</code><code>-</code><code>1</code><code>]</code>
<code> </code><code>if</code> <code>val[</code><code>1</code><code>] !</code><code>=</code> <code>'-'</code> <code>and</code> <code>val </code><code>not</code> <code>in</code> <code>newList:</code>
<code> </code><code>newList.append(val)</code>
<code> </code><code>return</code> <code>newList</code>
<code>def</code> <code>main():</code>
<code> </code><code>netInfo </code><code>=</code> <code>filterList()</code>
<code> </code><code>#格式化成适合zabbix lld的json資料</code>
<code> </code><code>json_data </code><code>=</code> <code>"{\n"</code> <code>+</code> <code>"\t"</code> <code>+</code> <code>'"data":['</code> <code>+</code> <code>"\n"</code>
<code> </code><code>#print netInfo</code>
<code> </code><code>for</code> <code>net </code><code>in</code> <code>netInfo:</code>
<code> </code><code>if</code> <code>net !</code><code>=</code> <code>netInfo[</code><code>-</code><code>1</code><code>]:</code>
<code> </code><code>json_data </code><code>=</code> <code>json_data </code><code>+</code> <code>"\t\t"</code> <code>+</code> <code>"{"</code> <code>+</code> <code>"\n"</code> <code>+</code> <code>"\t\t\t"</code> <code>+</code> <code>'"{#PPORT}":"'</code> <code>+</code> <code>str</code><code>(net[</code><code>0</code><code>]) </code><code>+</code> <code>"\</code><code>",\n"</code> <code>+</code> <code>"\t\t\t"</code> <code>+</code> <code>'"{#PNAME}":"'</code> <code>+</code> <code>str</code><code>(net[</code><code>1</code><code>]) </code><code>+</code> <code>"\</code><code>"},\n"</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>json_data </code><code>=</code> <code>json_data </code><code>+</code> <code>"\t\t"</code> <code>+</code> <code>"{"</code> <code>+</code> <code>"\n"</code> <code>+</code> <code>"\t\t\t"</code> <code>+</code> <code>'"{#PPORT}":"'</code> <code>+</code> <code>str</code><code>(net[</code><code>0</code><code>]) </code><code>+</code> <code>"\</code><code>",\n"</code> <code>+</code> <code>"\t\t\t"</code> <code>+</code> <code>'"{#PNAME}":"'</code> <code>+</code> <code>str</code><code>(net[</code><code>1</code><code>]) </code><code>+</code> <code>"\</code><code>"}]}"</code>
<code> </code><code>print</code> <code>json_data</code>
<code>if</code> <code>__name__ </code><code>=</code><code>=</code> <code>"__main__"</code><code>:</code>
<code> </code><code>main()</code>
<code>[root@xx ~]</code><code># /usr/bin/python /usr/local/zabbix/bin/ports.py</code>
<code>{</code>
<code> </code><code>"data"</code><code>:[</code>
<code> </code><code>{</code>
<code> </code><code>"{#PPORT}"</code><code>:</code><code>"10050"</code><code>,</code>
<code> </code><code>"{#PNAME}"</code><code>:</code><code>"zabbix_agentd"</code><code>},</code>
<code> </code><code>"{#PPORT}"</code><code>:</code><code>"10051"</code><code>,</code>
<code> </code><code>"{#PNAME}"</code><code>:</code><code>"zabbix_server"</code><code>},</code>
<code> </code><code>"{#PPORT}"</code><code>:</code><code>"9000"</code><code>,</code>
<code> </code><code>"{#PNAME}"</code><code>:</code><code>"php-fpm"</code><code>},</code>
<code> </code><code>"{#PPORT}"</code><code>:</code><code>"27017"</code><code>,</code>
<code> </code><code>"{#PNAME}"</code><code>:</code><code>"mongod"</code><code>},</code>
<code> </code><code>"{#PPORT}"</code><code>:</code><code>"3306"</code><code>,</code>
<code> </code><code>"{#PNAME}"</code><code>:</code><code>"mysqld"</code><code>},</code>
<code> </code><code>"{#PPORT}"</code><code>:</code><code>"6379"</code><code>,</code>
<code> </code><code>"{#PNAME}"</code><code>:</code><code>"redis-server"</code><code>},</code>
<code> </code><code>"{#PPORT}"</code><code>:</code><code>"111"</code><code>,</code>
<code> </code><code>"{#PNAME}"</code><code>:</code><code>"rpcbind"</code><code>},</code>
<code> </code><code>"{#PPORT}"</code><code>:</code><code>"80"</code><code>,</code>
<code> </code><code>"{#PNAME}"</code><code>:</code><code>"nginx"</code><code>},</code>
<code> </code><code>"{#PPORT}"</code><code>:</code><code>"8080"</code><code>,</code>
<code> </code><code>"{#PNAME}"</code><code>:</code><code>"java"</code><code>},</code>
<code> </code><code>"{#PPORT}"</code><code>:</code><code>"43088"</code><code>,</code>
<code> </code><code>"{#PNAME}"</code><code>:</code><code>"rpc.statd"</code><code>},</code>
<code> </code><code>"{#PPORT}"</code><code>:</code><code>"22"</code><code>,</code>
<code> </code><code>"{#PNAME}"</code><code>:</code><code>"sshd"</code><code>},</code>
<code> </code><code>"{#PPORT}"</code><code>:</code><code>"631"</code><code>,</code>
<code> </code><code>"{#PNAME}"</code><code>:</code><code>"cupsd"</code><code>},</code>
<code> </code><code>"{#PPORT}"</code><code>:</code><code>"3000"</code><code>,</code>
<code> </code><code>"{#PNAME}"</code><code>:</code><code>"grafana-serve"</code><code>},</code>
<code> </code><code>"{#PPORT}"</code><code>:</code><code>"4505"</code><code>,</code>
<code> </code><code>"{#PNAME}"</code><code>:</code><code>"python2.6"</code><code>},</code>
<code> </code><code>"{#PPORT}"</code><code>:</code><code>"25"</code><code>,</code>
<code> </code><code>"{#PNAME}"</code><code>:</code><code>"master"</code><code>},</code>
<code> </code><code>"{#PPORT}"</code><code>:</code><code>"4506"</code><code>,</code>
<code> </code><code>"{#PPORT}"</code><code>:</code><code>"20474"</code><code>,</code>
<code> </code><code>"{#PNAME}"</code><code>:</code><code>"java"</code><code>}]}</code>
5.監控api傳回的值
<code>args </code><code>=</code> <code>'''awk -F' ' '{print $1}' /usr/local/zabbix/scripts/warn.txt|grep -v "#"'''</code>
<code>t </code><code>=</code> <code>subprocess.Popen(args, shell</code><code>=</code><code>True</code><code>, stdout</code><code>=</code><code>subprocess.PIPE).communicate()[</code><code>0</code><code>]</code>
<code>lwarns </code><code>=</code> <code>[]</code>
<code>for</code> <code>mongo </code><code>in</code> <code>t.split(</code><code>'\n'</code><code>):</code>
<code> </code><code>if</code> <code>len</code><code>(mongo) !</code><code>=</code> <code>0</code><code>:</code>
<code> </code><code>lwarns.append({</code><code>'{#WARN_HOST}'</code><code>: mongo})</code>
<code>print</code> <code>json.dumps({</code><code>'data'</code><code>: lwarns}, indent</code><code>=</code><code>4</code><code>, separators</code><code>=</code><code>(</code><code>','</code><code>, </code><code>':'</code><code>))</code>
<code>import</code> <code>urllib2,sys</code>
<code>if</code> <code>len</code><code>(sys.argv) </code><code>=</code><code>=</code> <code>2</code><code>:</code>
<code> </code><code>argv1 </code><code>=</code> <code>sys.argv[</code><code>1</code><code>]</code>
<code>def</code> <code>http_get():</code>
<code> </code><code>url </code><code>=</code> <code>argv1 </code><code># 頁面的位址</code>
<code> </code><code>response </code><code>=</code> <code>urllib2.urlopen(url) </code><code># 調用urllib2向伺服器發送get請求</code>
<code> </code><code>return</code> <code>response.read() </code><code># 擷取伺服器傳回的頁面資訊</code>
<code>ret </code><code>=</code> <code>http_get()</code>
<code>retj</code><code>=</code><code>json.loads(ret)</code>
<code>if</code> <code>retj[</code><code>'action'</code><code>] </code><code>=</code><code>=</code> <code>"NONE"</code><code>:</code>
<code> </code><code>print</code> <code>0</code>
<code>elif</code> <code>retj[</code><code>'action'</code><code>] </code><code>=</code><code>=</code> <code>"DEBUG"</code><code>:</code>
<code>else</code><code>:</code>
<code> </code><code>print</code> <code>1</code>
6.tcp 應用端口
<code>[root@xx zabbix_agentd.conf.d]</code><code># cat tcp_services.conf </code>
<code>UserParameter</code><code>=</code><code>tcp_services, </code><code>/</code><code>usr</code><code>/</code><code>bin</code><code>/</code><code>python </code><code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>zabbix</code><code>/</code><code>bin</code><code>/</code><code>tcp_services.py</code>
<code> </code><code>t</code><code>=</code><code>subprocess.Popen(</code><code>'cd /xx/xx && ls *|grep _tomcat'</code><code>,shell</code><code>=</code><code>True</code><code>,stdout</code><code>=</code><code>subprocess.PIPE)</code>
<code> </code><code>S</code><code>=</code><code>java.strip(</code><code>'\n'</code><code>).strip(</code><code>':'</code><code>)</code>
<code> </code><code>args</code><code>=</code><code>"cat /xx/xx/%s/conf/server.xml|grep port|sed -n '2p'|awk '{print $2}'|awk -F '=' '{print $2}'|tr -d '\"'"</code> <code>%</code> <code>S</code>
<code> </code><code>port</code><code>=</code><code>subprocess.Popen(args,shell</code><code>=</code><code>True</code><code>,stdout</code><code>=</code><code>subprocess.PIPE).communicate()[</code><code>0</code><code>].strip(</code><code>'\n'</code><code>)</code>
<code> </code><code>STR1</code><code>=</code><code>{</code><code>'{#PROCNAME}'</code><code>:S}</code>
<code> </code><code>STR2</code><code>=</code><code>{</code><code>'{#PORT}'</code><code>:port}</code>
<code> </code><code>STR3</code><code>=</code><code>dict</code><code>(STR1, </code><code>*</code><code>*</code><code>STR2)</code>
<code> </code><code>javas.append(STR3)</code>
<code>[root@xx zabbix_agentd.conf.d]</code><code># /usr/bin/python /usr/local/zabbix/bin/tcp_services.py</code>
<code> </code><code>"{#PORT}"</code><code>:</code><code>"80"</code><code>,</code>
<code> </code><code>"{#PROCNAME}"</code><code>:</code><code>"dubbo_tomcat"</code>
<code> </code><code>}</code>
<code> </code><code>]</code>
<code>}</code>
本文轉自 liqius 51CTO部落格,原文連結:http://blog.51cto.com/szgb17/1969150,如需轉載請自行聯系原作者