1. 程式人生 > >python解析日誌並郵件告警

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)