1. 程式人生 > >shell 處理將動態解析的日誌檔案

shell 處理將動態解析的日誌檔案

有時候,我們需要對一些程式的日誌檔案進行資料分析,如果是我們自己處理和分析的情況下一般是使用程式讀取對應日誌檔案按照對應規則儲存到資料庫然後再進行分析。
如果我們直接到日誌檔案進行分析,我們沒有辦法記錄以及分析過的。因為日誌檔案是隨時在增加的。但是我們程式讀取到和處理一次時,沒有辦法確定是否有新的日誌追加到裡面。
那麼如果直接讀取第一行後刪除第一行後再寫入檔案中。這樣會造成日誌丟失,所以這個方法是不可行的。那麼既然直接讀取不可行,就想其他的辦法。在日誌檔案中我們都有一些習慣或者對應規則按照天拆分。也就是每當一天結束後,對應那天的日誌檔案會按照規則新生成一個檔案,而不是當前正在使用的日誌檔案(老司機懂,新司機請自行腦補)

根據這個思路我們就讀取備份的日誌檔案,這樣就不會在當前日誌造成丟失了。但是考慮到日誌分析對按照天來讀取,這樣資料更新太慢不好,那麼就想法指定週期讀取如5分鐘一次,10分鐘一次,30分鐘一次。。。。

具體看對應業務對資料更新速度要求,這樣一來我們就可以實現去用程式動態解析日誌檔案了。按照指定週期拆分檔案,大部分程式都有自己的配置規則,根據實際程式來定,這裡舉例說明nginx 沒有自己的拆分規則。需要藉助其他工具來拆分。
在linux 中可以使用logrotate 來實現 似乎logrotate 中最小單位是天所以這裡還是很推薦的一種方案,如果業務量大,一天的日誌很可能上G

logrotate 不可以實現那麼還是我們自己動手吧

#!/bin/bash
# 遍歷目錄下所有檔案
function listPath(){
        for file in `ls $1`
        do
                if [ -d $1"/"$file ]; then
             listPath $1$file/
        else
                    path=$1$file
                        end=${path: -4}
                        if [ "$end" == ".log" ]; then
                                dologFile $path
fi fi done } # 處理日誌檔案 function dologFile(){ if [ -s $1 ]; then time=$(date +%Y%m%d-%H%M%S) echo $1 $time mv $1 $1-$time fi } # 重新載入nginx 日誌 function loadNginx(){ echo "loadNginx" /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true echo "end load" } # 刪除過期檔案 function delOverdueFile(){ find $INIT_PATH -mtime +7 -name "*.*" | xargs rm -f } INIT_PATH="/var/log/nginx/log/" listPath $INIT_PATH

上面命令即可實現對應拆分方法。
這裡解釋一下#重新載入nginx 日誌方法的作用。因為linux 中是按照檔案的描述來確定檔案的,所以如果我們直接mv 過去對應程式會mv 後的檔案中追加,所以我們必須重新載入一次對應程式,來重新定位日誌檔案。

上面這個命令在部分程式裡面都實現了,只需要配置好規則就行,如果沒有就可以使用上面命令來實現。

這裡命令寫好了,就得想辦法讓這個命令定期執行 這裡使用crontab 來實現如果沒有安裝這個軟體請自行安裝
安裝好後

crontab -e

然後輸入

*/5 * * * * /etc/nginx/nginxlog.sh

這裡寫圖片描述

然後儲存就好了,這裡需要提醒java quartz 的老司機這裡的cron 表示式是精確到分鐘而是秒,所以當儲存儲存的時候請注意表示式書寫正確沒有

這裡不清楚cron 表示式的可以自行腦補一下。

這樣就完成日誌檔案安裝指定週期分割了。然後就是這些程式去掃描對應檔案進行分析了

相關推薦

shell 處理動態解析日誌檔案

有時候,我們需要對一些程式的日誌檔案進行資料分析,如果是我們自己處理和分析的情況下一般是使用程式讀取對應日誌檔案按照對應規則儲存到資料庫然後再進行分析。 如果我們直接到日誌檔案進行分析,我們沒有辦法記錄以及分析過的。因為日誌檔案是隨時在增加的。但是我們程式讀取

shell實現動態ip修改為靜態ip,靜態ip修改為其它靜態ip

linux 用shell修改ip (1) 將動態ip修改為靜態ip的思路 ① 修改ip之前,先備份ifcfg-eth0文件 ② 進入網卡配置目錄 /etc/sysconfig/network-scripts/ifcfg-eth0 ③ 修改BOOTPROTO=static ④ 修

shell實現動態ip修改為靜態ip,靜態ip修改為其它靜態ip

 shell實現將動態ip修改為靜態ip,靜態ip修改為其它靜態ip (1) 將動態ip修改為靜態ip的思路    ① 修改ip之前,先備份ifcfg-eth0檔案    ②  進入網絡卡配置目錄  /etc/sysconfi

web伺服器日誌檔案中的IP地址轉換為主機名

需求:將log檔案中的ip地址轉換為主機名 日誌檔案的格式如下: 10.100.122.132 - [17/Jun/2013:22:53:58] "GET /bgs/greenbg.gif HTTP 1.1" 200 50 10.100.122.133 - [17/Jun

loadrunner之 學習六:結果寫入日誌檔案

學習六:將結果寫入日誌檔案 1.指令碼實現 首先根據網上找到的內容跟著進行指令碼實現,程式碼如下: //定義要寫入的日誌,開啟檔案 char *filename = "d:\\lr_script\\test001.log"; long file_st

解決poi檔案匯入java.lang.NullPointerException異常的處理方法(解析excel檔案的時候表格中間或結束行出現空行)

Row titleRow = sheet.getRow(0);//標題行 for(int i=1;i<rowCount;i++){//遍歷行,略過標題行,從第二行開始 Row row = sheet.getRow(i); //跳過空行

linux shell指令碼定時清理tomcat日誌檔案(初稿)

清理日誌的shell指令碼 ------------------------------------------------------------------------------------------------ #!/bin/bash tomcatnum=2 #清

處理檔名存入.txt檔案

1.新建一個文字文件,命名並更改字尾為PicToTxt.bat儲存,檔案內容如下: @echo   off dir *.png /B> img.txt exit 注意:dir *.png /B&

Linux之C語言中如何丟擲異常或異常寫入日誌檔案

Linux中用C語言寫系統日誌__________________________________________________________________________________________________Author:冀博Time :2011/11/24

loadrunner測試介面,結果寫入日誌檔案

Action()中使用web_custom_request()方法傳送請求或者F1檢視web_custom_request的使用技巧Action() { web_custom_request( "court_user", //這個是給請求起個名稱,在樹形圖中顯示,不影

LOG4J debug等日誌檔案資訊同時列印到控制檯

如果希望將debug、info等寫入日誌檔案的資訊同時列印到控制檯, 需要在log4j中配置控制檯,並且在為log4j.rootLogger賦值時,最後一個新增控制檯資訊, 我目前的配置結果如下: log4j.rootLogger=debug,infofile,errorlogfile,D,stdout

zabbix3.0.4通過自定義shell指令碼新增對關鍵日誌檔案的監控

zabbix新增對自定義無規則日誌檔案的監控 專案背景及思路: zabbix自帶有針對日誌檔案的監控,自帶的監控只能監控到指定檔案或者正則匹配的固定日誌檔案,但當需要監控的檔名沒有規律的時候自帶監控就不適用了此次需要監控關鍵的esb企業匯流排系統日誌,當tail -f es

shell處理日誌檔案常用命令

學會用shell分析日誌只要一上午!!! 很多地方分享了日誌分析的shell指令碼,但是基本沒說每個命令符的具體含義,學習成本還是很高,在這裡總結下,方便大家快速入門。 1、在Windows下的使用者要使用shell命令符的話請先安裝cygwin,安裝方法自

Shell自動化壓縮處理日誌檔案指令碼程式

Shell處理日誌,自動保留30天的日誌,如果超過14天的日誌就自動壓縮為gz格式儲存下來,這樣可以節省磁

Shell執行腳本裏的變量打印到指定日誌文件

並且 xxx bsp amp 定位 min 打印 指定 日誌信息 首先需要定位獲取任務的運行日誌或者報錯信息,才能定位問題。 通過shell調用有些腳本的話,日誌信息會打印在shell裏。不過也有用戶在shell裏調用正常,但是到crontab調用的時候就出錯並且沒日誌了。

Shell腳本動態分析maillog日誌,把惡意IP用防火墻禁止

"shell腳本" "maillog" 用Shell腳本動態分析maillog日誌,把惡意IP用防火墻禁止系統環境:Centos 6.5 x64 Postfix郵件系統裝好後,發現maillog中太多“SASL LOGIN authentication fai

python flask 解析配置檔案與寫日誌

test.conf   [kafka]kafka_sys_topic = test-sys-infokafka_sys_group = test-consumer-groupzookeeper_server = 192.168.1.1:2181,192.168.1.2:2181,192.168.1

shell指令碼限制日誌檔案大小和行數

背景: 專案server在後端持續執行,日誌檔案不斷變大,需及時進行清空。 解決方案:編輯sh指令碼,指定時間間隔輪詢;將超出限制的日誌檔案,先備份,再清空原日誌檔案內容。 清空日誌檔案內容的方法有:             1

shell處理檔案,和lua計算求和

寫本篇文章的主要目的是為了把剛剛理解的知識進行系統的整理,以備以後的複習和學習。 要求:是使用mysql匯出一系列資料。把他們相同的key的值進行累加。mysql就不做介紹了。使用mysql得到的資料大概如下: 該資料存在檔案result中 id     &nb

網上搜集的處理gif動態圖的程式碼打包成jar

將網上搜集的處理gif動態圖的程式碼打包成jar 將網上搜集的處理gif的程式碼打包成jar,專案結構如下 建立類AnimatedGifEncoder package gifdecoder; import java.awt.Color; import java.awt.Gra