“Python自动发现Jar包以及CPU利用率”的版本间的差异
(→Python自动发现Jar包和CPU使用率) |
(→Python自动发现Jar包和CPU使用率) |
||
第1行: | 第1行: | ||
== Python自动发现Jar包和CPU使用率 == | == Python自动发现Jar包和CPU使用率 == | ||
+ | |||
在我们日常运维中,云服务器跑了一些java程序,服务器CPU利用率,系统负载就突然升高了,对于这一系列问题,阿里云或者华为云,他们会发短信提醒你,此刻的云服务器异常了,需要我们去检查,或者使用Zabbix或者Prometheus等第三方监控。 | 在我们日常运维中,云服务器跑了一些java程序,服务器CPU利用率,系统负载就突然升高了,对于这一系列问题,阿里云或者华为云,他们会发短信提醒你,此刻的云服务器异常了,需要我们去检查,或者使用Zabbix或者Prometheus等第三方监控。 | ||
'''Zabbix自动发现原理''' | '''Zabbix自动发现原理''' | ||
− | + | 通过读Zabbix的官网知道,Zabbix的自动发现有两种类型,同时也对应了两种不同的操作仿法,第一个是自动发现。另外-个是低级别的自动发现(low-level discovery )。 | |
− | |||
两者的区别如下: | 两者的区别如下: | ||
第13行: | 第13行: | ||
自动发现(discovery ):原理是按照特定的规则去发现网络上的监控主机,如FTP服务器-般使用21端口, Tomcat的端口-般为8080,所有的监控主机都可以被Zabbix功能ping通等。自动发现的前提是标准化,对于使用个性化配置的监控主机,不适合用自动发现功能。 | 自动发现(discovery ):原理是按照特定的规则去发现网络上的监控主机,如FTP服务器-般使用21端口, Tomcat的端口-般为8080,所有的监控主机都可以被Zabbix功能ping通等。自动发现的前提是标准化,对于使用个性化配置的监控主机,不适合用自动发现功能。 | ||
+ | |||
+ | |||
+ | '''我们使用Python jar.list的键值代码实现''' | ||
+ | |||
+ | |||
+ | 我们先假设我们的服务器上的java程序名称格式都是"xxx-1 .0.0.jar'",结尾,那么我们的Python代码怎么去实现找出所有符合规则的jar应用出来呢? | ||
+ | |||
+ | '''(由于教程上的代码是检测jar包,但是目前云服务器上没有启动的jar包所以检测不到任何程序,为了达到实验效果,可以更改为当前系统存在的程序比如:cnpm)''' | ||
+ | |||
+ | 代码如下jar.py: | ||
+ | |||
+ | # coding:utf-8 | ||
+ | import subprocess | ||
+ | import argparse | ||
+ | import os | ||
+ | """ | ||
+ | python jar.py -list "test" | ||
+ | """ | ||
+ | try: | ||
+ | import json | ||
+ | except ImportError: | ||
+ | import simplejson as json | ||
+ | def jarList(): | ||
+ | command = "ps -ef |grep java|grep -v grep|grep '1.0.0.jar'|awk '{print $NF}'" | ||
+ | p = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE) | ||
+ | port_list = p.stdout.read().split('\n') | ||
+ | port = [] | ||
+ | for i in port_list: | ||
+ | if len(i) != 0: | ||
+ | port += [{'{#JAVAPSS}': i}] | ||
+ | print(json.dumps({'data': port}, sort_keys=True, indent=4, separators=(',', ':'))) | ||
+ | ## | ||
+ | parser = argparse.ArgumentParser() | ||
+ | parser.add_argument("-l","--list", help="list jar process") | ||
+ | args = parser.parse_args() | ||
+ | if args.list: | ||
+ | jarList() | ||
+ | |||
+ | |||
+ | 运行结果为: | ||
+ | { | ||
+ | "data":[ | ||
+ | { | ||
+ | "{#JAVAPSS}":"report-1.0.0.jar" | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | |||
+ | |||
+ | 代码解析: | ||
+ | |||
+ | 10-13行,导入json模块,于后续的格式化输出<br> | ||
+ | 16-24行,定义jarList的函数,用于把所有的jar包列出来。其中列出jar包的原理是<br> | ||
+ | 通过调用系统shell的ps命令进行实现的。shell命令执行如下:<br> | ||
+ | [[文件:范例.jpg]] |
2020年8月8日 (六) 13:10的版本
Python自动发现Jar包和CPU使用率
在我们日常运维中,云服务器跑了一些java程序,服务器CPU利用率,系统负载就突然升高了,对于这一系列问题,阿里云或者华为云,他们会发短信提醒你,此刻的云服务器异常了,需要我们去检查,或者使用Zabbix或者Prometheus等第三方监控。
Zabbix自动发现原理
通过读Zabbix的官网知道,Zabbix的自动发现有两种类型,同时也对应了两种不同的操作仿法,第一个是自动发现。另外-个是低级别的自动发现(low-level discovery )。
两者的区别如下:
低级别发现(low-level discovery )自动发现一个监控主机(host)下同-类的监控项(如磁盘、网卡等), 并添加为监控项;而自动发现是指Zabbix通过特定的规则(如端口,SNMP等),发现网络中符合该规则的监控主机, 并添加到Zabbix中。
自动发现(discovery ):原理是按照特定的规则去发现网络上的监控主机,如FTP服务器-般使用21端口, Tomcat的端口-般为8080,所有的监控主机都可以被Zabbix功能ping通等。自动发现的前提是标准化,对于使用个性化配置的监控主机,不适合用自动发现功能。
我们使用Python jar.list的键值代码实现
我们先假设我们的服务器上的java程序名称格式都是"xxx-1 .0.0.jar'",结尾,那么我们的Python代码怎么去实现找出所有符合规则的jar应用出来呢?
(由于教程上的代码是检测jar包,但是目前云服务器上没有启动的jar包所以检测不到任何程序,为了达到实验效果,可以更改为当前系统存在的程序比如:cnpm)
代码如下jar.py:
# coding:utf-8 import subprocess import argparse import os """ python jar.py -list "test" """ try: import json except ImportError: import simplejson as json def jarList(): command = "ps -ef |grep java|grep -v grep|grep '1.0.0.jar'|awk '{print $NF}'" p = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE) port_list = p.stdout.read().split('\n') port = [] for i in port_list: if len(i) != 0: port += [{'{#JAVAPSS}': i}] print(json.dumps({'data': port}, sort_keys=True, indent=4, separators=(',', ':'))) ## parser = argparse.ArgumentParser() parser.add_argument("-l","--list", help="list jar process") args = parser.parse_args() if args.list: jarList()
运行结果为:
{ "data":[ { "{#JAVAPSS}":"report-1.0.0.jar" } ] }
代码解析:
10-13行,导入json模块,于后续的格式化输出
16-24行,定义jarList的函数,用于把所有的jar包列出来。其中列出jar包的原理是
通过调用系统shell的ps命令进行实现的。shell命令执行如下: