最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python和shell監(jiān)控linux服務(wù)器的詳細(xì)代碼

 更新時(shí)間:2018年06月22日 17:12:53   作者:Allen-X  
這篇文章主要為大家介紹了使用python和shell監(jiān)控linux服務(wù)器的詳細(xì)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了python和shell監(jiān)控linux服務(wù)器的具體代碼,供大家參考,具體內(nèi)容如下

1、 shell監(jiān)控負(fù)載

監(jiān)控原理:使用uptime來獲取負(fù)載的信息,然后通過字符串截取的方式來獲取load值來獲取單個(gè)核心的負(fù)載,在將負(fù)載與閾值比較確定是否報(bào)警。

loard_monitor.sh腳本:

#!/bin/bash
#使用uptime命令監(jiān)控linux系統(tǒng)負(fù)載變化

#提取本服務(wù)器的IP地址信息
IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`

#抓取cpu的總核數(shù)
cpu_num=`grep -c 'model name' /proc/cpuinfo`

#抓取當(dāng)前系統(tǒng)15分鐘的平均負(fù)載值
load_15=`uptime | awk '{print $NF}'`

#計(jì)算當(dāng)前系統(tǒng)單個(gè)核心15分鐘的平均負(fù)載值,結(jié)果小于1.0時(shí)前面?zhèn)€位數(shù)補(bǔ)0。
average_load=`echo "scale=2;a=$load_15/$cpu_num;if(length(a)==scale(a)) print 0;print a" | bc`

#取上面平均負(fù)載值的個(gè)位整數(shù)
average_int=`echo $average_load | cut -f 1 -d "."`


#當(dāng)單個(gè)核心15分鐘的平均負(fù)載值大于等于1.0(即個(gè)位整數(shù)大于0) ,直接發(fā)郵件告警
if (($average_int > 0)); then
   python /opt/monitor/monitor.py "服務(wù)器15分鐘的系統(tǒng)單個(gè)核心平均負(fù)載為$average_load,超過警戒值1.0,請立即處理?。?!"

fi

2、python監(jiān)控,并郵件報(bào)警,同時(shí)記錄JVM等相關(guān)參數(shù)

原理:使用crontab定時(shí)任務(wù)來執(zhí)行python腳本,在腳本中來調(diào)用shell命令或jvm命令獲取信息,最終使用python發(fā)送監(jiān)控郵件。

monitor.py

#!/usr/bin/env Python
# coding=utf-8
"""
配合crontab來定時(shí)的讀取服務(wù)器的部分信息
1、top信息
2、JVM實(shí)例信息
3、GC信息
組裝成html發(fā)送郵件
"""

import smtplib
import os
import socket
import fcntl
import struct
import time
import sys
from email.mime.text import MIMEText

# 獲取本機(jī)ip和名稱
def get_ip_address(ifname):
  s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  return socket.inet_ntoa(fcntl.ioctl(
    s.fileno(),
    0x8915, # SIOCGIFADDR
    struct.pack('256s', ifname[:15])
  )[20:24])


# 郵件發(fā)動(dòng)方法
def send_mail(to_list, sub, content): # to_list:收件人;sub:主題;content:郵件內(nèi)容
  me = mail_title + "<" + mail_user + "@" + mail_postfix + ">" # 這里的hello可以任意設(shè)置,收到信后,將按照設(shè)置顯示
  msg = MIMEText(content, _subtype='html', _charset='utf-8') # 創(chuàng)建一個(gè)實(shí)例,這里設(shè)置為html格式郵件
  msg['Subject'] = sub # 設(shè)置主題
  msg['From'] = me
  msg['To'] = ";".join(to_list)
  try:
    s = smtplib.SMTP()
    s.connect(mail_host) # 連接smtp服務(wù)器
    s.login(mail_user, mail_pass) # 登陸服務(wù)器
    s.sendmail(me, to_list, msg.as_string()) # 發(fā)送郵件
    s.close()
    return True
  except Exception, e:
    print str(e)
    return False


# 根據(jù)shell命令返回一個(gè)list 文本
def get_text_sh(bash_sh):
  result = os.popen(bash_sh).read()
  return result.split("\n")


# top信息的獲取
bash_top = "top -bn 1 | head -5 "
top_arr_txt = get_text_sh(bash_top)
# 服務(wù)器的JVM的pid 并去掉空格
bash_pid = "/usr/local/java/bin/jps | grep 'Bootstrap' | awk '{print $1}'"
jvm_pid = os.popen(bash_pid).read().strip()

# 獲取JVM中存活得對象
bash_jmap = "/usr/local/java/bin/jmap -histo:live " + jvm_pid + " | head -13 "
jvm_instance_arr = get_text_sh(bash_jmap)

# JVM堆信息
bash_jmap_heap = "/usr/local/java/bin/jmap -heap " + jvm_pid
jvm_heap_arr = get_text_sh(bash_jmap_heap)

# gc統(tǒng)計(jì),采樣時(shí)間間隔為250ms,采樣數(shù)為4
bash_gc = "/usr/local/java/bin/jstat -gc " + jvm_pid + " 250 4 "
jvm_gc_arr = get_text_sh(bash_gc)

# JVM線程快照
bash_jvm_thread = "jstack -l " + jvm_pid
jvm_thread_arr = get_text_sh(bash_jvm_thread)

# 獲取本機(jī)名稱和IP
server_name = socket.getfqdn(socket.gethostname())
# 內(nèi)網(wǎng)IP
inner_ip = get_ip_address("lo")
# 公網(wǎng)IP
out_ip = get_ip_address("eth0")

# 郵件接收者
mailto_list = ["yourname@company.com"]
# 設(shè)置服務(wù)器
mail_host = "smtp.xxx.com"
# 用戶名
mail_user = "server_monitor"
# 動(dòng)態(tài)客戶端口令
mail_pass = "#######"
# 發(fā)件箱的后綴
mail_postfix = "163.com"
# 標(biāo)題名稱
mail_title = "ServerMonitor"
# 標(biāo)題時(shí)間
mail_time = time.strftime("%Y-%m-%d %X", time.localtime(time.time()))
# 郵件主題
mail_sub = "【監(jiān)控郵件】服務(wù)器(" + server_name + ")--IP(" + out_ip + ")--時(shí)間(" + mail_time + ")"
# 目錄導(dǎo)航
mail_catalog = "<ul>" \
        "<li><a href = '#top'>服務(wù)器top信息</a></li>" \
        "<li><a href = '#instance'>JVM存活實(shí)例</a></li>" \
        "<li><a href = '#gc'>GC情況</a></li>" \
        "<li><a href = '#heap'>JVM堆信息</a></li>" \
        "<li><a href = '#thread'>JVM線程快照及鎖</a></li>" \
        "</ul>"
# 報(bào)警內(nèi)容
mail_context = "<h2><font color='red'>" + sys.argv[1] + "</font></h2>"
# 郵件正文
mail_context += mail_catalog + "<h3><a name = 'top'>服務(wù)器top信息:</a></h3><hr>"

# 處理top信息
for line in top_arr_txt:
  mail_context += "<pre>" + line + "</pre>"

mail_context += "<h3><a name = 'instance'>JVM存活實(shí)例10:</a></h3><hr>"

# 處理jvm,并將標(biāo)簽退換掉
for line in jvm_instance_arr:
  # 并將標(biāo)簽符號替換成html的符號
  mail_context += "<pre>" + line.replace("<", "&lt;").replace(">", "&gt;") + "</pre>"

mail_context += "<h3><a name = 'gc'>GC情況 采樣時(shí)間間隔為250ms,采樣數(shù)為4:</a></h3><hr>"

# 處理gc信息
for line in jvm_gc_arr:
  # 并將標(biāo)簽符號替換成html的符號
  mail_context += "<pre>" + line + "</pre>"

mail_context += "<h3><a name = 'heap'>JVM堆信息:</a></h3><hr>"

# 處理heap信息
for line in jvm_heap_arr:
  # 并將標(biāo)簽符號替換成html的符號
  mail_context += "<pre>" + line + "</pre>"

mail_context += "<h3><a name = 'thread'>JVM線程快照及鎖情況:</a></h3><hr>"

# 處理JVM線程快照及鎖情況
for line in jvm_thread_arr:
  # 并將標(biāo)簽符號替換成html的符號
  mail_context += "<pre>" + line + "</pre>"

mail_context += "<pre>線程快照過大,暫時(shí)未提供顯示,如有需要請聯(lián)系<a href = 'yourname'>your</pre>"
# 入口
if __name__ == '__main__':
  if send_mail(mailto_list, mail_sub, mail_context):
    print "發(fā)送成功"
  else:
    print "發(fā)送失敗"

3、crontab定時(shí)任務(wù)

#開始設(shè)置定時(shí)任務(wù)
crontab -e
#15分鐘執(zhí)行一次
0,15,30,45 * * * * python /opt/monitor/monitor.py 2>&1
#查看任務(wù)
crontab -l

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Pytorch深度學(xué)習(xí)經(jīng)典卷積神經(jīng)網(wǎng)絡(luò)resnet模塊訓(xùn)練

    Pytorch深度學(xué)習(xí)經(jīng)典卷積神經(jīng)網(wǎng)絡(luò)resnet模塊訓(xùn)練

    這篇文章主要介紹了Pytorch深度學(xué)習(xí)經(jīng)典卷積神經(jīng)網(wǎng)絡(luò)resnet模塊訓(xùn)練,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Python中查找字符串之間差異位置

    Python中查找字符串之間差異位置

    本文主要介紹了Python中查找兩個(gè)字符串之間的差異位置,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 使用Kivy將python程序打包為apk文件

    使用Kivy將python程序打包為apk文件

    本文給大家分享的是使用Kivy將python程序打包為apk文件的方法,包括安裝步驟及相關(guān)代碼,有需要的小伙伴可以參考下
    2017-07-07
  • 深入淺析ImageMagick命令執(zhí)行漏洞

    深入淺析ImageMagick命令執(zhí)行漏洞

    ImageMagick是一個(gè)功能強(qiáng)大的開源圖形處理軟件,可以用來讀、寫和處理超過90種的圖片文件,包括流行的JPEG、GIF、 PNG、PDF以及PhotoCD等格式。接下來通過本文給大家淺析ImageMagick命令執(zhí)行漏洞的知識,一起看看吧
    2016-10-10
  • Python創(chuàng)建增量目錄的代碼實(shí)例

    Python創(chuàng)建增量目錄的代碼實(shí)例

    這篇文章主要給大家介紹了關(guān)于Python創(chuàng)建增量目錄的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-11-11
  • python簡單判斷序列是否為空的方法

    python簡單判斷序列是否為空的方法

    這篇文章主要介紹了python簡單判斷序列是否為空的方法,可通過if語句實(shí)現(xiàn)簡單的判斷功能,需要的朋友可以參考下
    2015-06-06
  • python多進(jìn)程下實(shí)現(xiàn)日志記錄按時(shí)間分割

    python多進(jìn)程下實(shí)現(xiàn)日志記錄按時(shí)間分割

    這篇文章主要為大家詳細(xì)介紹了python多進(jìn)程下實(shí)現(xiàn)日志記錄按時(shí)間分割,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • pandas DataFrame 數(shù)據(jù)選取,修改,切片的實(shí)現(xiàn)

    pandas DataFrame 數(shù)據(jù)選取,修改,切片的實(shí)現(xiàn)

    這篇文章主要介紹了pandas DataFrame 數(shù)據(jù)選取,修改,切片的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Python中的pprint模塊

    Python中的pprint模塊

    本文介紹了 Python中的pprint模塊,pprint模塊包含一個(gè)“美觀打印機(jī)”,用于生成數(shù)據(jù)結(jié)構(gòu)的一個(gè)美觀的視圖。格式化工具會(huì)生成數(shù)據(jù)結(jié)構(gòu)的一些表示,不僅能夠由解釋器正確地解析,還便于人閱讀。輸出會(huì)盡可能放在一行上,分解為多行時(shí)會(huì)縮進(jìn),想了解具體內(nèi)容請參考下文
    2021-11-11
  • Pandas merge合并操作的實(shí)現(xiàn)

    Pandas merge合并操作的實(shí)現(xiàn)

    Pandas的merge()函數(shù)用于合并兩個(gè)DataFrame數(shù)據(jù)表,本文就來介紹一下Pandas merge合并操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12

最新評論

武鸣县| 新兴县| 哈尔滨市| 宁强县| 临猗县| 南投市| 方城县| 丰原市| 班戈县| 剑阁县| 平昌县| 蒙阴县| 若尔盖县| 上高县| 大宁县| 泾川县| 轮台县| 河津市| 彝良县| 精河县| 上蔡县| 德清县| 高平市| 天峻县| 石门县| 南汇区| 兴文县| 松阳县| 当雄县| 内丘县| 新晃| 台中市| 长丰县| 浪卡子县| 福泉市| 康平县| 崇义县| 兰坪| 巴林右旗| 平安县| 莱阳市|