0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

監(jiān)控服務(wù)器資源利用率的客戶端腳本

麥辣雞腿堡 ? 來源:CSDN博客 ? 作者:jerry-89 ? 2023-01-22 16:04 ? 次閱讀

客戶端腳本:

端腳本:

- - coding:utf-8 - -

import io

import os

import sys

import time

import datetime

import socket

import commands

import logging

from logging import handlers

import psutil

import struct

import fcntl

if sys.getdefaultencoding() != 'utf-8':

reload(sys)

sys.setdefaultencoding('utf-8')

class Logger(object):

level_relations = {

'debug': logging.DEBUG,

'info': logging.INFO,

'warning': logging.WARNING,

'error': logging.ERROR,

'crit': logging.CRITICAL

} # 日志級別關(guān)系映射

def init (self,logname, level='info', when='D', backCount=10, fmt='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'):

CURRENT_DIR = os.path.dirname(file)

LOG_FILE = os.path.abspath(os.path.join(CURRENT_DIR, logname))

self.logger = logging.getLogger(LOG_FILE)

format_str = logging.Formatter(fmt) # 設(shè)置日志格式

self.logger.setLevel(self.level_relations.get(level)) # 設(shè)置日志級別

sh = logging.StreamHandler() # 往屏幕上輸出

sh.setFormatter(format_str) # 設(shè)置屏幕上顯示的格式

th = handlers.TimedRotatingFileHandler(

filename=LOG_FILE, when=when, backupCount=backCount, encoding='utf-8') # 往文件里寫入#指定間隔時間自動生成文件的處理器

#實例化TimedRotatingFileHandler

#interval是時間間隔,backupCount是備份文件的個數(shù),如果超過這個個數(shù),就會自動刪除,when是間隔的時間單位,單位有以下幾種:

S 秒

M 分

H 小時、

D 天、

W 每星期(interval==0時代表星期一)

midnight 每天凌晨

th.setFormatter(format_str) # 設(shè)置文件里寫入的格式

#self.logger.addHandler(sh) # 把對象加到logger里

if not self.logger.handlers:

self.logger.addHandler(th)

class clientMonitor(object):

#獲取指定網(wǎng)卡ip

def getIpAddress(self,dev):

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

a = s.fileno()

b = 0x8915

c = struct.pack('256s', dev[:15])

res = fcntl.ioctl(a, b, c)[20:24]

return socket.inet_ntoa(res)

#獲取網(wǎng)絡(luò)的使用情況 ,取的是eth0的發(fā)送和收取的總字節(jié)數(shù)

#readNetInfo('eth0')

def readNetInfo(self,dev):

f = open('/proc/net/dev')

lines = f.readlines()

f.close()

res = {'in':0, 'out':0}

for line in lines:

if line.lstrip().startswith(dev):

for centos

line = line.replace(':', ' ')

items = line.split()

res['in'] = long(items[1])#/1024

res['out'] = long(items[len(items)/2 + 1])#/1024

return res

def readNetInfo_new(self,dev):

res = {'in':0, 'out':0}

res['in'] = psutil.net_io_counters(pernic=True).get(dev).bytes_recv

res['out'] = psutil.net_io_counters(pernic=True).get(dev).bytes_sent

return res

#磁盤使用率,path:磁盤路徑

def disk_stat(self,path):

hd={}

disk = os.statvfs(path)

percent = (disk.f_blocks - disk.f_bfree) * 100 / (disk.f_blocks -disk.f_bfree + disk.f_bavail) + 1

return percent

def net_loop(self,dev):

#end = {'in':0, 'out':0}

res = self.readNetInfo_new(dev)

#推遲執(zhí)行的秒數(shù)

time.sleep(2)

#new_recv,new_send = get_net_data()

new_res = self.readNetInfo_new(dev)

recv_data = (new_res['in']-res['in'])/1024/1024

send_data = (new_res['out']-res['out'])/1024/1024

print ("recv_data: %s M, send_data: %s M"%(recv_data, send_data))

return recv_data,send_data

def processcheck(self,cmd):

#cmd='ps -aux | sort -k3nr | head -1'

(status,output) = commands.getstatusoutput(cmd)

#Pid= output.split(' ')[6]

log.logger.info('資源占用top:\\n'+output)

#查看占用內(nèi)存最高的進(jìn)程的PID

#ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head

#ps -aux | sort -k4nr | head -1 ,-k3 cpu占用最高,-k4 內(nèi)存占用最高

#root 14668 1.9 0.0 90504 3256 ? Ss 4月23 2811:48 /sbin/rngd -f

#索引:-k3 b.split(' ')[6] 28進(jìn)程路徑(/sbin/rngd)

#索引:-k4 b.split(' ')[4]

if name == " main ":

#10分鐘執(zhí)行一次,數(shù)據(jù)上報到服務(wù)端,服務(wù)端負(fù)責(zé)報警

#需要修改的參數(shù):custom,deviceType,netName

custom ='test'

deviceType ='客戶端服務(wù)器'

#網(wǎng)卡名稱

netName = 'ens3f0'

log = Logger('socketclient.logs')

log.logger.info("----start----")

info=clientMonitor()

locatIp = info.getIpAddress(netName)

recv_data,send_data = info.net_loop(netName)

cpuinfo = psutil.cpu_percent(1)

#svmem(total=67268558848, available=32022245376, percent=52.4, used=34601009152, free=29655695360, active=17274105856, inactive=2927910912, buffers=10100736, cached=3001753600, shared=298610688, slab=11243315200)

svmem = psutil.virtual_memory()

meminfo = svmem[2]

disk_root = info.disk_stat('/')

disk_appslog = info.disk_stat('/appslog')

disk_bigdata = info.disk_stat('/bigdata')

#如果CPU或內(nèi)存的占用率大于80%,將占用CPU或內(nèi)存資源最多的進(jìn)程找出來

issendmsg =1

if(cpuinfo>80 or meminfo>80 or disk_root>80 or disk_appslog>80 or disk_bigdata>80 or recv_data>3000 or send_data>3000):

#發(fā)送預(yù)警郵件

sendmsg=locatIp +' 服務(wù)器資源占用高!請檢查!\\n'

sendmsg += "CPU占用:"+str(cpuinfo)+'\\n'

sendmsg += "內(nèi)存占用:"+str(meminfo)+'\\n'

sendmsg += "/目錄占用:"+str(disk_root)+'\\n'

sendmsg += "/appslog目錄占用:"+str(disk_appslog)+'\\n'

sendmsg += "/bigdata目錄占用:"+str(disk_bigdata)+'\\n'

sendmsg += "網(wǎng)卡接收流量:"+str(recv_data)+'M,發(fā)送流量 '+str(send_data)+'M \\n'

#sendmsg += "網(wǎng)卡10秒發(fā)送流量:"+str(send_data)+'\\n'

log.logger.info(sendmsg)

if cpuinfo>80 :

info.processcheck('ps -aux | sort -k3nr | head -10')

if meminfo>80 :

info.processcheck('ps -aux | sort -k4nr | head -10')

issendmsg = 1

else:

#log.logger.info(locatIp+" 正常")

log.logger.info("CPU使用率:"+str(cpuinfo))

log.logger.info("內(nèi)存使用率:"+str(meminfo))

log.logger.info("/目錄使用率:"+str(disk_root))

log.logger.info("/appslog使用率:"+str(disk_appslog))

log.logger.info("/bigdata使用率:"+str(disk_bigdata))

log.logger.info("網(wǎng)卡接收和發(fā)送情況:接收"+str(recv_data) +"M, 發(fā)送 "+str(send_data)+"M")

#Id,custom,deviceType,IP,cpu,mem,disk_root,disk_appslog,disk_bigdata,networkRecv,networkSend,uploadTime,temp2,temp3,temp4

msg = '1'+'|'+custom+'|'+deviceType+'|'+locatIp+'|'+str(cpuinfo)+'|'+str(meminfo)+'|'+str(disk_root)+'|'+str(disk_appslog)+'|'+str(disk_bigdata)+'|'+str(recv_data)+'|'+str(send_data)+'|'+time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

if issendmsg ==1:

ip_port = ('IP',port)

sk = socket.socket()

sk.connect(ip_port)

sk.sendall(msg)

data = sk.recv(1024)

if data=='1':

log.logger.info("本地預(yù)警信息傳輸成功!")

else:

log.logger.info("本地預(yù)警信息傳輸失??!")

sk.sendall('exit')

sk.close()

原文鏈接:https://blog.csdn.net/eagle89/article/details/128579002

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 監(jiān)控
    +關(guān)注

    關(guān)注

    6

    文章

    2162

    瀏覽量

    55041
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    8958

    瀏覽量

    85081
收藏 人收藏

    評論

    相關(guān)推薦

    TCP視頻服務(wù)器&客戶端 - 版本LabVIEW 2012

    ;客戶端功能:顯示服務(wù)器采集到的視頻,實時調(diào)整服務(wù)器采集視頻的分辨率。客戶端需要輸入服務(wù)器端的ip地址和端口號。以這兩個程序為基礎(chǔ),可以加個
    發(fā)表于 01-22 14:22

    一個服務(wù)器,多個客戶端,怎么向指定的客戶端發(fā)數(shù)據(jù)

    我用labview做服務(wù)器,單片機(jī)做客戶端,客戶端幾百個,怎么區(qū)分客戶端,給指定的客戶發(fā)發(fā)數(shù)據(jù)
    發(fā)表于 06-01 09:26

    求助:labview服務(wù)器如何實時訪問客戶端

    畢設(shè)瓶頸,大佬們,怎么設(shè)計程序,服務(wù)器可以每秒訪問一次客戶端,讀取客戶端的數(shù)據(jù)?寫入電子表格控件可以能插入局部變量嗎?跪謝。
    發(fā)表于 05-14 10:14

    labview-TCP多客戶端服務(wù)器

    labview-TCP多客戶端服務(wù)器一個服務(wù)器上位機(jī),多個下位機(jī)客戶端
    發(fā)表于 03-26 16:58

    如何同時開啟服務(wù)器模式和客戶端模式?

    如題,UCOSII或者FreeRtos下使用LWIP如何同時開啟服務(wù)器模式和客戶端模式,我這幾天弄了下,單獨跑其中一個,都好好的,但是同時跑,客戶端連接上了,服務(wù)器就不行了,誰知道這要
    發(fā)表于 10-31 03:05

    監(jiān)控系統(tǒng)客戶端服務(wù)端設(shè)計

    項目開發(fā)報告1 項目簡介1.1 概述1.2 開發(fā)環(huán)境1.3 其他支持1.4 應(yīng)用界面1.4.1 服務(wù)器端1.4.2 客戶端1.5 程序使用2 項目開發(fā)2.1 搭建基于實驗平臺數(shù)據(jù)庫2.1.1 數(shù)據(jù)庫
    發(fā)表于 12-21 07:02

    客戶端模式是什么?服務(wù)器模式又是什么呢

    客戶端模式是什么?服務(wù)器模式又是什么呢?怎樣去編寫一種服務(wù)器模式程序呢?
    發(fā)表于 02-22 07:44

    通訊貓MQTT服務(wù)器在線客戶端的問題

    我在網(wǎng)上找一個通訊貓MQTT服務(wù)器在線客戶端。我有點糊涂,到底是服務(wù)器,還是客戶端??梢赃B上,也可以發(fā)數(shù)據(jù),就是不知道跟誰連。我從上面下了個WIN32
    發(fā)表于 11-19 12:17

    計算機(jī)的客戶端服務(wù)器

    計算機(jī)的客戶端服務(wù)器 一般說來,互聯(lián)網(wǎng)上的所有計算機(jī)可以分成兩種類型:服務(wù)器客戶端。向其他計算機(jī)提供服務(wù)(如Web
    發(fā)表于 08-05 08:57 ?1826次閱讀

    專家談如何提高服務(wù)器利用率

    專家談如何提高服務(wù)器利用率  如今,數(shù)據(jù)中心節(jié)能已成為熱點話題,為減少功耗,各大廠商紛紛推出相應(yīng)產(chǎn)品和解決方案。近日,Microsoft的utility
    發(fā)表于 01-27 11:46 ?725次閱讀

    客戶端服務(wù)器和網(wǎng)絡(luò)技術(shù)

    基于服務(wù)器的計算代表著一種應(yīng)用程序部署方法。 對以下基于服務(wù)器的計算環(huán)境而言,瘦客戶端是理想的客戶端設(shè)備: 借助 Windows 2000 或 Windows Server 2003
    發(fā)表于 07-02 16:46 ?17次下載
    瘦<b class='flag-5'>客戶端</b>的<b class='flag-5'>服務(wù)器</b>和網(wǎng)絡(luò)技術(shù)

    CoolpyCould客戶端

    一款開源的物聯(lián)網(wǎng)服務(wù)器平臺,利用nodejs寫成,此文件是CoolpyCould客戶端
    發(fā)表于 11-06 17:00 ?18次下載

    監(jiān)控服務(wù)器資源利用率服務(wù)端腳本

    其主要目的是:基于 Python 編程語言來監(jiān)控服務(wù)器的 CPU、內(nèi)存、/目錄、/appslog、/bigdata目錄使用率以及網(wǎng)卡接收和發(fā)送情況。 該腳本部署場景分為:
    的頭像 發(fā)表于 01-22 16:02 ?684次閱讀

    利用Python寫了一個監(jiān)控服務(wù)器資源利用率腳本!

    研究了一個腳本,其主要目的是:基于 Python 編程語言來監(jiān)控服務(wù)器的 CPU、內(nèi)存、/目錄、/appslog、/bigdata目錄使用率以及網(wǎng)卡接收和發(fā)送情況。
    的頭像 發(fā)表于 01-29 15:08 ?652次閱讀

    服務(wù)器Server和客戶端Client的區(qū)別

    例如在使用TCP通訊建立連接時采用客戶端服務(wù)器模式,這種模式又常常被稱為主從式架構(gòu),簡稱為C/S結(jié)構(gòu),屬于一種網(wǎng)絡(luò)通訊架構(gòu),將通訊的雙方以客戶端(Client )與服務(wù)器 (Serve
    的頭像 發(fā)表于 09-06 16:13 ?1302次閱讀
    <b class='flag-5'>服務(wù)器</b>Server和<b class='flag-5'>客戶端</b>Client的區(qū)別