91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

監控服務器資源利用率的服務端腳本

麥辣雞腿堡 ? 來源:CSDN博客 ? 作者:jerry-89 ? 2023-01-22 16:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

其主要目的是:基于 Python 編程語言來監控服務器的 CPU、內存、/目錄、/appslog、/bigdata目錄使用率以及網卡接收和發送情況。

該腳本部署場景分為:服務端和客戶端。

服務端:一臺固定 IP 地址的服務器

客戶端:N 臺指定固定 IP 地址的服務器

服務端腳本:

- - coding:utf-8 - -

import io

import os

import sys

import logging

from logging import handlers

import MySQLdb

import smtplib

from email.mime.text import MIMEText

from email.header import Header

from email.utils import formataddr

import requests, json

import datetime

import time

import shutil,re

import uuid

import socket

import SocketServer

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

} # 日志級別關系映射

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) # 設置日志格式

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

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

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

th = handlers.TimedRotatingFileHandler(

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

#實例化TimedRotatingFileHandler

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

S 秒

M 分

H 小時、

D 天、

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

midnight 每天凌晨

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

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

if not self.logger.handlers:

self.logger.addHandler(th)

class Analysis(object):

def buildMsg(self,msg):

print('構造預警信息'+str(msg))

icount = 0

if(float(msg[4]) > 90):

icount+=1

CPU ="> CPU預警:使用率高于90%,使用"+str(msg[4])+"% \\n"

else:

CPU=""

if(float(msg[5]) > 90):

icount+=1

mem ="> 內存預警:使用率高于90%,使用"+str(msg[5])+"% \\n"

else:

mem=""

if(float(msg[6]) > 85):

icount+=1

disk_root ="> 磁盤根目錄預警:使用率高于85%,使用"+str(msg[6])+"% \\n"

else:

disk_root=""

if(float(msg[7]) > 85):

icount+=1

disk_appslog ="> 業務磁盤預警:使用率高于85%,使用"+str(msg[7])+"% \\n"

else:

disk_appslog=""

if(float(msg[8]) > 3000):

icount+=1

networkRecv ="> 網卡10秒內接收數據預警:接收數據大于4000M,接收"+str(msg[8])+"M \\n"

else:

networkRecv=""

if(float(msg[9]) > 3000):

icount+=1

networkSend ="> 網卡10秒內發送數據預警:發送數據大于4000M,發送"+str(msg[9])+"M \\n"

else:

networkSend=""

s= alarmName+"\\n"+msg[2]+":" +msg[3]+"\\n" +CPU+mem+disk_root+disk_appslog+networkRecv+networkSend

#print(s)

log.logger.info('預警信息:'+s)

#發送預警
   if(icount>0):
       #發送預警郵件、企業微信
       if mailconf ==1:
           self.send_mail(s,msg[3])
       if wxconf ==1:
           self.send_WX(s)

def send_mail(self,content,ip):

smtpserver = 'smtp.163.com'

mail_user="xxx@163.com"

mail_pass="passwordxxx"

mail_res=["xxx@163.com","xxx@163.com","xxx@163.com","xxx@163.com","xxx@163.com","xxx@163.com","xxx@163.com"]

sub = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

msg = MIMEText( sub + "\\n"+content, _subtype='plain',_charset='utf-8')

msg['Subject'] = Header(alarmName+':'+ip, 'utf-8' )

#msg['From'] = Header("系統預警", 'utf-8')

msg['From'] = formataddr(pair=('設備預警', mail_user))

msg['To'] = ', '.join(mail_res)

smtp = smtplib.SMTP()

smtp.connect(smtpserver)

smtp.starttls()

smtp.login(mail_user, mail_pass)

smtp.sendmail(mail_user, mail_res, msg.as_string())

smtp.quit()

def send_WX(self,msg):

headers = {"Content-Type": "text/plain"}

#s="服務器預警:{},驗證碼{}".format({str(printCode)},{str(verifyCode)})

data = {

"msgtype": "text",

"text": {

"content": msg,

}

}

r = requests.post(

url='企業微信機器人地址(需要根據實際機器人地址配置)',

headers=headers, json=data)

print(r.text)

def Write_to_Mysql_alarm(self,valuelist):

#log = Logger('all.log',level='debug')

#業務監控:id,project,tpye,exceptiontype,details(xx,大數據,無es進程/es集群不健康,)

try:

db = MySQLdb.connect("xxx", "xxx", "xxx", "xxx", charset='utf8' )

log.logger.info("數據庫連接成功")

except:

log.logger.info("數據庫連接失敗")

創建游標

cursor = db.cursor()

uid = uuid.uuid1()

result=0

sql =''

try:

sql = 'insert into test_serverresourcealarm values (%s, %s, %s, %s,%s, %s, %s, %s, %s, %s, %s, %s, %s,%s)'

#val = (str(uid),valuelist[1], valuelist[2], valuelist[3], valuelist[4],valuelist[5], valuelist[6],'',valuelist[7], valuelist[8],valuelist[9],valuelist[10],'','','')

val = (str(uid),valuelist[2], valuelist[3], valuelist[4], valuelist[5],valuelist[6], valuelist[7],'',valuelist[8], valuelist[9],valuelist[10],'','','')

cursor.execute(sql,val)

db.commit()

log.logger.error('設備預警信息已入庫!')

#發送企業微信預警信息

self.buildMsg(valuelist)

except:

into = sys.exc_info()

#log.logger.error('插入數據失敗!')

log.logger.error('設備預警信息入庫失敗!'+str(into))

result=0

#str = self.obj_to_string(sys.exc_info(), self)

print('error',into)

# 關閉游標
   db.close()
   return result

def Write_to_Mysql_temp(self,valuelist):

打開數據庫連接

#db = MySQLdb.connect("xxx", "xxx", "xxx", "xxx", charset='utf8' )

try:

db = MySQLdb.connect("xxx", "xxx", "xxx", "xxx", charset='utf8' )

log.logger.info("數據庫連接成功")

except:

log.logger.info("數據庫連接失敗")

使用cursor()方法獲取操作游標

cursor = db.cursor()

uid = uuid.uuid1()

result=0

try:

sql = 'insert into test_serverresourcetemp values (%s, %s, %s, %s,%s, %s, %s, %s, %s, %s, %s, %s, %s,%s)'

val = (str(uid),valuelist[2], valuelist[3], valuelist[4], valuelist[5],valuelist[6], valuelist[7],'',valuelist[8], valuelist[9],valuelist[10],'','','')

cursor.execute(sql,val)

db.commit()

result=1

log.logger.info("臨時表sql執行狀態:"+str(result))

except:

into = sys.exc_info()

result = 0

print(into)

log.logger.info('臨時表sql執行失敗: '+str(into))

關閉數據庫連接

db.close()
   return result

class MyServer(SocketServer.BaseRequestHandler):

def handle(self):

conn = self.request

log.logger.info('... connected from {}'.format(self.client_address))

#print('1多線程監控')

Flag = True

while Flag:

data = conn.recv(1024)

#print(data)

if len(data)>10:

log.logger.info('接收到的客戶端數據:'+data)

conn.sendall('1')

sub = data.strip('\\n')

str = sub.split('|')

#print(str)

a = Analysis()

#報警信息入庫,#將監控數據寫入臨時表中test_serverresourcetemp_lty

result = a.Write_to_Mysql_temp(str)

if(float(str[4])>90 or float(str[5])>90 or float(str[6])>85 or float(str[7])>85 or float(str[8])>3000 or float(str[9])>3000):

result1 = a.Write_to_Mysql_alarm(str)

#result = 1

if result == 0:

log.logger.info('預警信息入庫失敗!')

else:

log.logger.info('預警信息入庫完成!')

#發送預警郵件、企業微信

#a.buildMsg(str)

if data =='exit':
           log.logger.info('... connecte end ...')
           Flag = False

if name == " main ":

#每分鐘執行一次

log = Logger('socketservice.logs')

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

alarmName ='服務器資源預警'

#是否開啟郵件報警,1為開啟,0為關閉

mailconf =1

#是否開啟企業微信報警,1為開啟,0為關閉

wxconf =0

server = SocketServer.ThreadingTCPServer(('IP',port),MyServer)

server.serve_forever()

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 監控
    +關注

    關注

    6

    文章

    2320

    瀏覽量

    57631
  • 服務器
    +關注

    關注

    13

    文章

    9797

    瀏覽量

    88044
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    TCP服務端測試工具

    本帖最后由 小子個 于 2024-3-20 22:58 編輯 該TCP服務端工具可以理解為 “TCP服務端” 或者 “服務器” ,目的是幫助大家在沒有服務器的情況下,完成客戶
    發表于 06-29 09:22

    服務端視角看高并發難題

    `所謂服務器大流量高并發指的是:在同時或極短時間內,有大量的請求到達服務端,每個請求都需要服務端耗費資源進行處理,并做出相應的反饋。 從服務端
    發表于 11-02 15:11

    監控系統客戶服務端設計

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

    openEuler 資源利用率提升之道 01:概論

    存在共峰資源不足的問題,該問題會導致部分業務服務質量(QoS)受損。如何在提升資源利用率之后,保障業務 QoS 不受損是技術上的關鍵挑戰。此外,云上業務的多樣性和復雜性進一步加大了保障
    發表于 07-06 09:54

    ARM服務器準備如何解決服務端渲染的問題

    針對云手機、視頻流云游戲行業,ARM服務器準備如何解決服務端渲染的問題?目前的狀況了解,PCIE顯卡對安卓游戲的支持還不夠成熟
    發表于 09-13 14:58

    服務器端腳本與動態網頁設計,下載

    服務器端腳本與動態網頁設計 1. 了解服務器端腳本和動態網頁的有關概念 ; 2. 了解ASP、PHP的基本語法和基本功能 ; 3. 熟練掌握JSP的基本語法和基本
    發表于 04-28 16:44 ?0次下載

    專家談如何提高服務器利用率

    專家談如何提高服務器利用率  如今,數據中心節能已成為熱點話題,為減少功耗,各大廠商紛紛推出相應產品和解決方案。近日,Microsoft的utility
    發表于 01-27 11:46 ?810次閱讀

    如何監控服務器性能?

    (CPU) 和內存 每當服務器性能下降時,通常會懷疑服務器CPU利用率和內存資源。如果您的服務器的CPU使
    的頭像 發表于 07-19 16:01 ?6578次閱讀

    監控服務器資源利用率的客戶腳本

    客戶腳本腳本: - - coding:utf-8 - - import io import os import sys import time import datetime
    的頭像 發表于 01-22 16:04 ?999次閱讀

    利用Python寫了一個監控服務器資源利用率腳本

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

    在遠程服務器上搭建一個OpenVPN服務端

    應公司要求需要在一臺遠程服務器上搭建一個OpenVPN服務端,在公司本地服務器上搭建一個OpenVPN客戶,實現公司內網可以訪問遠程服務器
    的頭像 發表于 05-26 15:03 ?9850次閱讀
    在遠程<b class='flag-5'>服務器</b>上搭建一個OpenVPN<b class='flag-5'>服務端</b>

    恒訊科技全面解析:如何有效降低服務器CPU利用率

    降低服務器CPU利用率是一個涉及監控、診斷和優化的全面過程。以下是一些有效的方法: 1、監控CPU使用率: 使用工具如top, htop,
    的頭像 發表于 05-10 17:24 ?1122次閱讀

    服務端測試和客戶測試區別在哪

    服務端測試和客戶測試是軟件開發過程中的兩個重要環節,它們分別針對服務器端和客戶的軟件進行測試。本文將詳細介紹服務端測試和客戶
    的頭像 發表于 05-30 15:27 ?4610次閱讀

    服務端測試是web測試嗎為什么

    服務端測試和Web測試是兩個不同的概念,但它們在軟件開發和測試過程中是相互關聯的。本文將詳細解釋這兩個概念以及它們之間的關系。 服務端測試 服務端測試主要關注服務器端的軟件組件,這些組
    的頭像 發表于 05-30 15:30 ?1196次閱讀

    服務端測試包括什么類型

    服務端測試是確保軟件系統在服務器端正常運行和滿足性能要求的重要環節。本文將詳細介紹服務端測試的類型、方法和最佳實踐。 1. 服務端測試的定義 服務端
    的頭像 發表于 05-30 16:03 ?1721次閱讀
    主站蜘蛛池模板: 2018天天干夜夜操 | 男人j进人女人j 的视频 | 99精品视频免费 | 夜夜春夜夜夜夜猛噜噜噜噜噜 | 精品四虎免费观看国产高清午夜 | 教官的好爽好深h片段 | 97人人模人人揉人人捏 | 俺去久久 | 欧美网站黄| 午夜肉伦伦影院 | 日日噜噜噜噜人人爽亚洲精品 | 99久免费精品视频在线观看2 | 久久精品夜色国产 | 午夜影院一区二区三区 | 四虎在线影院 | 精品一区二区三区免费爱 | 一级免费片 | 求av网站| 久久成人综合 | 天天干天天爽天天射 | 国产papa| h国产| 嫩草影院入口一二三免费 | 黄色网址视频在线播放 | 波多野结衣在线网站 | 国产va免费精品观看 | 免费a级毛片出奶水 | 四虎影视亚洲精品 | 一级美女视频 | 午夜丁香影院 | 丁香五月情 | www.夜夜| 日韩久久精品视频 | 五月婷婷电影 | 日韩欧美亚洲一区 | 国产黄大片在线观看 | 四虎综合九九色九九综合色 | 国内精品久久久久影院免费 | 狠狠干夜夜操 | 性欧美处 | 亚洲国产成人久久一区久久 |