python實時處理log文件腳本

来源:http://www.cnblogs.com/tony-d/archive/2016/11/21/6084119.html
-Advertisement-
Play Games

這個Python腳本是用來對實時文件的內容監控,比如 Error 或者 time out 欄位都可以進行自定義;算是我的第一個真正的Python腳本,自己感覺還是比較臃腫,不過打算放到blog上記錄一下(還是初學者,大神們勿噴哈),真心希望博友們能夠再指點一下(現在記錄每次的文件大小值是輸出到了一個 ...


這個Python腳本是用來對實時文件的內容監控,比如 Error 或者 time out 欄位都可以進行自定義;算是我的第一個真正的Python腳本,自己感覺還是比較臃腫,不過打算放到blog上記錄一下(還是初學者,大神們勿噴哈),真心希望博友們能夠再指點一下(現在記錄每次的文件大小值是輸出到了一個文件中,並且裡面還嵌套了有shell命令,這些我認為都是可以優化掉的吧,只是現在我還不知道怎麼做);告警是基於zabbix,自定義的模板是120s執行一次

  

#!/usr/local/bin/python3.5
###Destription: 實時讀取log信息
###Author:      Danny Deng
###Datetime:    2016-11-17
import re,time,subprocess,os,linecache
###############定義log文件
file_name = "/var/log/mongodb/mongodb.log"
file_number = "/usr/local/zabbix_agent/number.txt"
j = int(0)
seek = int(0)
###############判斷文件是否存在---判斷number是否存在---判斷number size 與 filesize
###############定義一個函數,遍歷文件
def readline():
###############if判斷 seek是否大於0,大於則賦值,否則初始為0
    while True:
###############定義文件,根據seek值進行每行讀取,每次tell賦值給seek
        with open(file_name,'r') as f:
            global seek
            #seek = seek
            f.seek(seek)
            data = f.readline()
            if  data:
                seek = f.tell()
                yield data
            else:
###############Python變數轉換為shell變數
                global file_number
                os.environ['seek'] = str(seek)
                os.environ['file_number'] = str(file_number)
###############記錄上一次執行後的seek值,下次執行直接讀取
                os.system('echo $seek > $file_number')
                os.system('chown zabbix.zabbix $file_number')
                return
###############定義函數,find特定字元串從每行數據中
def func_for():
    j = int(0)
    for i in readline():
        f_find = re.findall(r"error", i,flags=re.IGNORECASE)
        if "error" in f_find:
            j += 1
###############沒有輸出0,有值輸出出現error匹配到的次數值
    try:
        print(j)
    except NameError:
        print(int("0"))
###############判斷文件是否存在
if os.path.isfile(file_name):
###############判斷存儲seek的文件是否存在
    if os.path.isfile(file_number):
###############存在時,讀取其seek值
        seek_number = int(linecache.getline(file_number, 1))
###############如果有值判斷seek值與現在文件大小值,大於說明log文件已重新生成,重置seek值為0
        if os.path.getsize(file_name) >= seek_number and seek_number > 0:
            seek = seek_number
            func_for()
        else:
            seek = int(0)
            func_for()
###############如果存儲seek值的文件不存在,新建並出示seek值為0
    else:
        os.environ['file_number'] = str(file_number)
        os.system('echo 0 > $file_number')
        os.system('chown zabbix.zabbix $file_number')
        func_for()
###############文件不存在 報錯
else:
    print("Error")
    quit()

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 利用 async & await 進行非同步 IO 操作 可以使用非同步函數訪問文件。使用非同步功能,可以調用非同步方法,而不使用回調或拆分您在多個方法或 lambda 表達式中的代碼。 若要使同步代碼非同步,則調用非同步方法而不是一個同步方法並添加幾個關鍵字到代碼中。 對文件操作使用非同步特性: 非同步特性有利於 ...
  • asp.net mvc 中 一種簡單的 URL 重寫 Intro 在項目中想增加一個公告的功能,但是又不想直接用預設帶的那種路由,感覺好low逼,想弄成那種偽靜態化的路由 (別問我為什麼不直接靜態化,當時就是只想做成偽靜態化以後可能會做成完全靜態化),至於為什麼做偽靜態化或靜態化可以自行百度或參考本 ...
  • SmtpClient類 允許應用程式使用簡單郵件傳輸協議 (SMTP) 發送電子郵件。 命名空間:system.net.mail 屬性 ClientCertificates:指定應使用哪個證書來建立安全套接字層(SSL)連接 Credentials:獲取或設置用來對發件人進行身份驗證的憑證 Deli ...
  • 上一篇介紹了Aries列表數據表格的格式化處理及行內編輯,本篇介紹DataGrid的主鍵操作區相關內容,詳情如下... ...
  • 參考資料: .edmx 文件概述(實體框架) ...
  • 一個技術汪的開源夢 —— 目錄 微軟的 ASP.Net Core 強化了 Nuget 的使用,所有的 .Net Core 組件均有 Nuget 管理,所以有必要探討一下 .Net Core 組件製作 Nuget 包和發佈。 之前 .Net Framework 程式集打包 Nuget 有以下方法: 1 ...
  • 很多時候使用svn,我們需要切換svn賬號,但是由於之前的賬號已經選擇了記住密碼,那麼我們應該如何刪除svn密碼來切換新的svn賬號呢? 其實很簡單,svn賬號密碼信息保存在電腦某一文件中,我們只要刪除該文件,下次登錄即可切換賬號 具體文件路徑如下:C:\Users\XXX\AppData\Roam ...
  • 今日問題: 有兩個類,Test類在Nov2016.use01包中,Ques1121類在Nov2016包中,在它的main方法中實例化了一個Test對象,並調用它的getString()方法,請問上面的程式編譯可以通過嗎?(點擊以下“【Java每日一題】20161121”查看20161118問題解析) ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...