“Python自动发现Jar包以及CPU利用率”的版本间的差异

来自CloudWiki
跳转至: 导航搜索
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 )。
通过读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命令执行如下:
范例.jpg