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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...