- 论坛徽章:
- 0
|
系统centos6.8
Python2.7.13
问题:我写了一个监控服务器性能的模块,在另外一个模块使用任务框架,同时import监控模块,但很多时候模块不打印日志,对logging这块不是很理解,请大神帮忙指导下,谢谢!
host模块代码:
from SSH_D import ssh
import logging,time
import threading
from logging.config import fileConfig
import ConfigParser
fileConfig('../conf/logging.conf',disable_existing_loggers=0)
logger = logging.getLogger()
conf_read = ConfigParser.ConfigParser()
conf_read.read("../conf/config_host.ini")
class host_status(ssh):
def cpu(self, cmd):
'''
:param cmd: vmstat 1 5 |sed -n '3,$p'|awk '{x = x + $15} END {print x/5}' |awk -F. '{print $1}'
:return: cpu utilization ratio
'''
threshold = int(conf_read.get("DEFAULT","cpu"))
use_ratio = 100 - float(self.get_reponse(cmd)[1].read().decode().strip())
# use_ratio = '%.3f' % (use_ratio)
if use_ratio > threshold:
logger.warning("%s : cpu used - %s%%" % (self.host, use_ratio))
else:
logger.info("%s : cpu used - %s%%" % (self.host, use_ratio))
def disk(self, cmd):
'''
:param cmd: df -h|sed '1d'|awk '{print $NF,$(NF-1)}'
:return: disk utilization ratio list
'''
threshold = int(conf_read.get("DEFAULT","disk"))
for l in self.get_reponse(cmd)[1].read().decode().strip().split("\n"):
k, v = l.split()
v = int(v.replace("%", ""))
if v > threshold:
logger.warning("%s : filesystem %s used - %s%%" % (self.host, k, v))
else:
logger.info("%s : filesystem %s used - %s%%" % (self.host, k, v))
def mem(self, cmd):
'''
:param cmd: free -m|grep 'buffers/cache'|awk '{print ($3/($3+$4))*100}'
:return: memory utilization ratio
'''
threshold = int(conf_read.get("DEFAULT","mem"))
use_ratio = float(self.get_reponse(cmd)[1].read().decode().strip())
if use_ratio > threshold:
logger.warning("%s : mem use - %s%%" % (self.host, use_ratio))
else:
logger.info("%s : mem used - %s%%" % (self.host, use_ratio))
def iowait(self, cmd):
'''
:param cmd: iostat|grep -A 1 'avg-cpu'|grep -v 'avg-cpu'|awk '{print $4}'
:return: the percentage of time that the CPU or CPUs were idle during which the system had an outstanding disk I/O request.
'''
threshold = int(conf_read.get("DEFAULT","iowait"))
use_ratio = float(self.get_reponse(cmd)[1].read().decode().strip())
if use_ratio > threshold:
logger.warning("%s iowait - %s%%" % (self.host, use_ratio))
else:
logger.info("%s iowait - %s%%" % (self.host, use_ratio))
def ioutil(self, cmd):
'''
:param cmd: iostat -xndk|grep -A 1 'Device'|grep -v 'Device'|awk '{print $1, $NF}'
:return:
'''
threshold = int(conf_read.get("DEFAULT","ioutil"))
for l in self.get_reponse(cmd)[1].read().decode().strip().split("\n"):
k, v = l.split()
v = float(v)
if v > threshold:
logger.warning("%s - %s ioutil - %s%%" % (self.host, k, v))
else:
logger.info("%s - %s ioutil - %s%%" % (self.host, k, v))
def run_thread(self):
cmd_cpu = "vmstat 1 5 |sed -n '3,$p'|awk '{x = x + $15} END {print x/5}' |awk -F. '{print $1}'"
cmd_disk = "df -h|sed '1d'|awk '{print $NF,$(NF-1)}'"
cmd_mem = "free -m|grep 'buffers/cache'|awk '{print ($3/($3+$4))*100}'"
cmd_iowait = "iostat|grep -A 1 'avg-cpu'|grep -v 'avg-cpu'|awk '{print $4}'"
cmd_ioutil = "iostat -xndk|grep -A 1 'Device'|grep -v 'Device'|awk '{print $1, $NF}'"
jobs = [threading.Thread(target=self.cpu, name='cpu', args=(cmd_cpu,)),
threading.Thread(target=self.disk, name='disk', args=(cmd_disk,)),
threading.Thread(target=self.mem, name='mem', args=(cmd_mem,)),
threading.Thread(target=self.iowait, name='iowait', args=(cmd_iowait,)),
threading.Thread(target=self.ioutil, name='ioutil', args=(cmd_ioutil,))]
for job in jobs:
job.start()
job.join()
调用host模块的job管理模块:
import ConfigParser
import logging
from logging.config import fileConfig
from HOST import host_status
from apscheduler.schedulers.blocking import BlockingScheduler
from NetMonitor import clientip
from MySQLMonitor import db
from Process import process
from PageCheck import pageCheck
fileConfig('../conf/logging.conf',disable_existing_loggers=0)
logger = logging.getLogger()
def host_job():
'''host status'''
# Read configuration
conf_read = ConfigParser.ConfigParser()
conf_read.read("../conf/config_host.ini")
if len(conf_read.sections()):
# process pool
num = len(conf_read.sections())
# Multi process handle
for section in conf_read.sections():
# every server in configuration
if len(conf_read.options(section)):
server = host_status(conf_read.get(section,"host"),
conf_read.getint(section,"port"),
conf_read.get(section,"user"),
conf_read.get(section,"password"))
server.run_thread()
系统启动接口模块:
from JOB_Run import job_Scheduler
import logging,sys
from logging.config import fileConfig
# log
fileConfig('../conf/logging.conf',disable_existing_loggers=0)
logger = logging.getLogger()
# add job scheduler
job_name=sys.argv[1]
job_Scheduler(job_name)
现在使用 python27 ../MonApp/startup_job.py host_job >> /dev/null 2>&1 &启动,手动执行可以打印日志,如果系统BlockingScheduler调用则不能打印模块
|
|