python解析日誌並郵件告警
#!/usr/bin/env python
# coding=gbk
from os.path import getsize
import sys
import re
import time
import datetime
import os
from re import compile,IGNORECASE
import smtplib
from email.MIMEText import MIMEText
import socket
reload(sys)
sys.setdefaultencoding('gbk')
##日誌檔案
log = r'tomcat.log'
##每次執行後的位置,保證不重複統計
last_position_logfile = r'pos.txt'
##獲取儲存的位置
def get_last_position(file):
data = open(file,'r')
last_position = data.readline()
if last_position:
last_position = int(last_position)
else:
last_position = 0
data.close()
return last_position
##儲存上次讀寫後的位置
def write_this_position (file,last_position):
data = open(file,'w')
data.write(str(last_position))
data.close()
##獲取主機ip
def getIpaddr():
myname = socket.getfqdn(socket.gethostname())
myaddr = socket.gethostbyname(myname)
return myaddr
##解析日誌檔案
def anlysis_log(file):
##設定超時告警閾值
timeout_count_threshold=5
msg_result={}
currentTime=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
ip = getIpaddr()
data = open(file,'r')
last_position = get_last_position(last_position_logfile)
this_position = getsize(log)
##快速定位位置
if this_position < last_position:
data.seek(0)
elif this_position == last_position:
exit()
elif this_position > last_position:
data.seek(last_position)
##迴圈讀取日誌行
for line in data.readlines():
##正則匹配
match=re.search(r'(ASClient)(.*)(elapsed=\d{5})(.*)(method=.*)(.*)(servicename=.*),',line)
if ( not match ):
pass
else:
msg_method=match.group(5).split(',')[0].split('=')[1]
msg_service=match.group(7).split(',')[0].split('=')[1]
if msg_service not in msg_result:
msg_result[msg_service]={'timeout_total':0}
if msg_method not in msg_result[msg_service]:
msg_result[msg_service][msg_method]={'timeout':0}
msg_result[msg_service]['timeout_total']+=1
msg_result[msg_service][msg_method]['timeout']+=1
for (k,v) in msg_result.items():
if ( (k=='test') and v['timeout_total']>timeout_count_threshold ):
msg_report=''
for (x,y) in v.items():
if(x != 'timeout_total'):
pp=' %s [超時次數:%s],'% (x,y['timeout'])
msg_report=msg_report+pp
content='%s超時次數為%s, IP:%s'%(k.upper(),v['timeout_total'],ip)
sendmail('IP:%s, %s呼叫超時次數為:%s, 超時閥值為10秒, 具體的method如下:<br>%s'%(ip,k,v['timeout_total'],msg_report.replace(',','<br>')),'[報警]系統%s超時'%k.upper())
##把當前位置儲存到檔案
write_this_position(last_position_logfile,data.tell())
data.close()
print time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
def sendmail(content,subject):
url = r"smtp.163.com"
sender = '[email protected]'
receivers = ['[email protected]']
msg = MIMEText(content,'html','gbk')
msg['Subject'] = subject
msg['To'] = ",".join(receivers)
conn = smtplib.SMTP(url,25)
conn.sendmail(sender,receivers,msg.as_string())
conn.close()
anlysis_log(log)
相關推薦
python解析日誌並郵件告警
#!/usr/bin/env python # coding=gbk from os.path import getsize import sys import re import time import datetime import os from re i
python指令碼監控logstash程序並郵件告警
supervisor雖然也能拉起來logstash程序,但是有時候supervisor也會掛,也有時會拉不起,就算拉起來了也沒有郵件告警功能 ,所以編寫一個python指令碼監控所有伺服器,以下程式碼只列舉了一臺伺服器,需要更多伺服器在列表裡面新增就行! (日誌採集過程中連續幾天資
Zabbix 3.0部署安裝 配置OS自動發現 自動新增 並郵件告警
簡單說明: 依據《CentOS7實驗機模板搭建部署》克隆實驗機192.168.77.210,部署Zabbix 3.0 LTS 配置郵件告警功能,配置自動發現功能,配置action對發現的主機自動監控並郵件告警 部署安裝Zabbix 3.0 LTS: # 主機名和hosts解析
zabbix自定義監控mysql主從狀態,並做郵件告警
指定 def brush stat 群組 root -a utf-8 動作 通過zabbix自定義監控mysql主從狀態,並做郵件告警 分析: mysql主要是通過主從來提供安全性
Python 提取數據庫(Postgresql)並郵件發送
listdir host 不錯 寫入excel lena .com remove name mtp 剛入門python,發現確實是一個不錯的語言。業務部門要求將將某一個數據庫中的表,定期發送到相關部門人員郵箱。其實整個業務需求很簡單,實現起來也不難。但是由於剛入門pytho
Java實現獲取伺服器日誌並進行處理解析
一、伺服器登陸公鑰祕鑰設定 步驟如下: 1、本機生成私鑰公鑰檔案 本機進入到.ssh目錄下,c:/Users/**/.ssh, 在該目錄下執行 $ ssh-keygen -t rsa 然後一路回車即可。 說明:如果原先./ssh目錄下有id_rsa id_rsa.
zabbix自定義監控mysql主從狀態,並做郵件告警(詳細解說)
通過zabbix自定義監控mysql主從狀態,並做郵件告警 分析: mysql主要是通過主從來提供安全性,一個完整的主從體系,就應該包括資料同步、開啟二進位制日誌、全備、還有對Slave_IO_Running和Slave_SQL_Running兩個執行緒的實時監測,並做告警,而zabb
python解析Nginx訪問日誌
環境說明 python3+ pip install geoip2==2.9.0 nginx日誌配置成json格式,配置如下: log_format json_log '{ "time": "$time_local", '
深入學習Python解析並解密PDF檔案內容的方法
前面學習瞭解析PDF文件,並寫入文件的知識,那篇文章的名字為深入學習Python解析並讀取PDF檔案內容的方法。 但是最近出現了一個新問題,就是上面使用pdfminer這個庫只能解析正常的PDF內容,然而在實際情況中,公司的一些文件可能是加密的,那麼如何處理加密的PDF檔案,就是本文學習的重點。
Zabbix3.4 python指令碼郵件告警
一、概述及環境要求 1、概述 zabbix監控也起到重要作用,以下是使用python指令碼傳送告警郵件配置方法。之前使用過sendemail郵件報警但是發現郵件主題為中文時候會出現亂碼的問題。 2、環境安裝要求 Zabbix軟體版本:zabbix3.4 作業系統
Python解析csv檔案並將結果寫入bat檔案
第二次感覺有很大進步,對列表使用慢慢熟悉,繼續加油。 #!/usr/bin/python # -*- coding: UTF-8 -*- import os import csv import codecs
shell實現篩選Nginx訪問日誌超多閾值郵件告警
指令碼思路: 1.統計一個小時內ip前十的訪問日誌,擷取前10個; 2.判斷ip訪問的次數,大於1000輸出到臨時檔案中 3.郵件告警; 詳細程式碼如下: #!/bin/bash #function:analysis the nginx log file and count sp
Shell實現監控MySQL Slave狀態並通過郵件告警
SHELL實現監控mysql Slave 狀態並通過郵件告警 實現思路: 1.使用直接檢視mysql status獲取Slave相關引數值,進行判斷; 2.當延遲超過一定時間就發郵件進行告警; 3.Crontab裡面,每三十分鐘跑一次 詳細程式碼如下: #!/bin/bash #cr
Python解析csv檔案並生成解析的bat檔案
import os import csv import codecs import re import sys from copy import deepcopy print ‘Run:’,sys.argv[0] ##注意對應,需要增刪只需增刪csvTitle、team
python 指令碼監控url返回碼並郵件報警
#coding=utf-8 import requests import smtplib from smtplib import SMTP_SSL from email.mime.text import MIMEText #定義一個發郵件函式 def mail(sub,co
Zabbix3.2郵件告警python指令碼
Zabbix自動化監控QQ交流群:9888359 歡迎喜歡交流的朋友加入! 一、概述及環境要求 1、概述 zabbix監控也起到重要作用,以下是使用python指令碼傳送告警郵件配置方法。之前使用過sendemail郵件報警但是發現郵件主題為中文時候會出現亂碼的問題。 2、
python生成每日報表資料(Excel)並郵件傳送
邏輯比較簡單 ,直接上程式碼 定時傳送直接使用了win伺服器的定時任務來定時執行指令碼 #coding:utf-8 from __future__ import division import pymssql,sys,datetime,xlwt import sm
python 解析excel資料並插入資料庫(可執行)
背景:應業務要求需要不定期將一些excel資料匯入到線上資料庫run.py實現如下:#encoding=utf-8import xlrdfrom configparser import ConfigParserimport pymysqlimport systry:book
Python解析頭條視訊真實播放地址並自動下載
我們檢視央視網新聞這個大V的主頁 本人對於Python學習建立了一個小小的學習圈子,為各位提供了一個平臺,大家一起來討論學習Python。歡迎各位到來Python學習群:960410445一起討論視訊分享學習。Python是未來的發展方向,正在挑戰我們的分析能力及對世界的認知方式,
Python解析xml檔案並修改後儲存 demo
前情提要: 需要對底層的引數檔案(xml格式)進行讀取,並將前端下發的資料覆蓋原資料,並儲存。 下發引數格式:JSON 程式碼呈現: from xml.dom import minidom targetPath=os.path.join(path,targetfile)