爛泥:切割nginx日誌

来源:http://www.cnblogs.com/ilanni/archive/2016/04/07/5365420.html
-Advertisement-
Play Games

本文由ilanniweb提供友情贊助,首發於爛泥行天下 想要獲得更多的文章,可以關註我的微信ilanniweb 這幾天自己看了下博客的nginx日誌,發現日誌文件發現越來越大。 因為nginx自己不會對日誌文件進行切割,所以打算通過其他方式進行切割,而且為了後續能對nginx日誌文件裡面記錄的數據進... ...


本文由ilanniweb提供友情贊助,首發於爛泥行天下

想要獲得更多的文章,可以關註我的微信ilanniweb

這幾天自己看了下博客的nginx日誌,發現日誌文件發現越來越大。

因為nginx自己不會對日誌文件進行切割,所以打算通過其他方式進行切割,而且為了後續能對nginx日誌文件裡面記錄的數據進行分析,所以打算按照天對其進行切割。

PS:本篇文章所以的操作是在centos6.5 OS 64bit上進行。

切割nginx日誌,我們可以通過兩種不同的方式進行,分別是:通過logrotate和通過shell腳本。

如果是yum方式安裝的nginx,系統預設會自動通過logrotate這個日誌管理軟體,按天進行分割。但是經過多次測試發現logrotate切割日誌不會按照自己設置的時間點進行分割,這點有點失望。

所以無論是yum方式安裝,還是源碼方式安裝,都建議使用shell腳本方式進行切割日誌。

為了更深入的學習linux系統,在此也會介紹下logrotate相關的知識點。

下麵分別對這兩種方法進行介紹下:

一、使用logrotate切割

前面說了yum或者apt-get方式安裝的nginx會自動使用logrotate這個日誌管理軟體進行切割,所以本章節我們主要介紹有關logrotate相關的知識點。

1.1 logrotate介紹

logrotate是什麼呢?它是一個linux系統日誌的管理工具。它可以切割、壓縮等其他軟體的日誌文件軟體。

logrotate是基於crontab運行的,所以這個時間點是由crontab控制的,具體可以查詢crontab的配置文件/etc/anacrontab。

我們可以通過如下命令安裝logrotate,如下:

yum -y install logrotate

clip_image001

如果是ubuntu系統,可以使用如下命令進行安裝:

apt-get -y install logrotate

clip_image002

查看logrotate的配置文件,使用如下命令:

rpm -ql logrotate

clip_image003

通過上圖,我們可以很明顯的看到logrotate的配置文件是/etc/logrotate.conf,而/etc/logrotate.d/是用於存儲其他配置文件的目錄。該目錄里的所有文件都會被主動的讀入 /etc/logrotate.conf中執行。

1.2 logrotate配置文件詳解

logrotate配置選項相對來說比較少,為了切合本篇文章,在此我們以切割nginx的配置文件為例,如下:

cat /etc/logrotate.d/nginx

/var/log/nginx/*.log {

daily

missingok

rotate 7

dateext

# compress

delaycompress

notifempty

create 640 nginx adm

sharedscripts

postrotate

[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`

endscript

}

clip_image004

在該配置文件中,每個參數作用如下:

/var/log/nginx/為nginx日誌的存儲目錄,可以根據實際情況進行修改。

daily:日誌文件將按天輪循。

weekly:日誌文件將按周輪循。

monthly:日誌文件將按月輪循。

missingok:在日誌輪循期間,任何錯誤將被忽略,例如“文件無法找到”之類的錯誤。

rotate 7:一次存儲7個日誌文件。對於第8個日誌文件,時間最久的那個日誌文件將被刪除。

dateext:定義日誌文件尾碼是日期格式,也就是切割後文件是:xxx.log-20160402.gz這樣的格式。如果該參數被註釋掉,切割出來是按數字遞增,即前面說的 xxx.log-1這種格式。

compress:在輪循任務完成後,已輪循的歸檔將使用gzip進行壓縮。

delaycompress:總是與compress選項一起用,delaycompress選項指示logrotate不要將最近的歸檔壓縮,壓縮將在下一次輪循周期進行。這在你或任何軟體仍然需要讀取最新歸檔時很有用。

notifempty:如果是空文件的話,不進行轉儲。

create 640 nginx adm:以指定的許可權和用書屬性,創建全新的日誌文件,同時logrotate也會重命名原始日誌文件。

postrotate/endscript:在所有其它指令完成後,postrotate和endscript裡面指定的命令將被執行。在這種情況下,rsyslogd進程將立即再次讀取其配置並繼續運行。註意:這兩個關鍵字必須單獨成行。

1.3 查看logrotate預設執行時間

logrotate切割時間預設是在每天的3:22。這個時間點可以通過crontab配置文件查看到。如下:

cat /etc/anacrontab

SHELL=/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

# the maximal random delay added to the base delay of the jobs

RANDOM_DELAY=45

# the jobs will be started during the following hours only

START_HOURS_RANGE=3-22

1 5 cron.daily nice run-parts /etc/cron.daily

7 25 cron.weekly nice run-parts /etc/cron.weekly

@monthly 45 cron.monthly nice run-parts /etc/cron.monthly

其中START_HOURS_RANGE參數就是配置logrotate切割的時間點。

clip_image005

如果你想在指定時間點,讓logrotate切割日誌的話,可以修改此配置文件的START_HOURS_RANGE參數。

但是經過多次實驗,我發現logrotate沒有按照我指定的時間進行切割日誌。

所以最後我還是選擇了使用shell腳本來切割nginx日誌。

二、使用shell腳本切割

使用shell腳本切割nginx日誌很簡單,shell腳本內容如下:

vim /usr/local/cut_del_logs.sh

#!/bin/bash

#初始化

LOGS_PATH=/var/log/nginx

YESTERDAY=$(date -d "yesterday" +%Y%m%d)

#按天切割日誌

mv ${LOGS_PATH}/ilanni.com.log ${LOGS_PATH}/ilanni.com_${YESTERDAY}.log

#向nginx主進程發送USR1信號,重新打開日誌文件,否則會繼續往mv後的文件寫數據的。原因在於:linux系統中,內核是根據文件描述符來找文件的。如果不這樣操作導致日誌切割失敗。

kill -USR1 `ps axu | grep "nginx: master process" | grep -v grep | awk '{print $2}'`

#刪除7天前的日誌

cd ${LOGS_PATH}

find . -mtime +7 -name "*20[1-9][3-9]*" | xargs rm -f

#或者

#find . -mtime +7 -name "ilanni.com_*" | xargs rm -f

exit 0

clip_image006

該shell腳本有兩個功能,第一個是切割nginx日誌,第二個是刪除7天之前的nginx日誌。

在切割nginx日誌的功能中,我們要註意該shell腳本命名切割的日誌是以切割時,是以前一天的時間就行命名該日誌文件的。

所以我們在把該shell腳本放在crontab中執行時,建議在每天的0點0分執行。如下:

vim /etc/crontab

0 0 * * * root /bin/sh /usr/local/cut_del_logs.sh

clip_image007

查看nginx切割的日誌文件,如下:

ll --full-time /var/log/nginx/

clip_image008

通過上圖,我們可以很明顯的看到,切割shell腳本確實按照我們設想的進行切割和命名切割日誌文件的。


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

-Advertisement-
Play Games
更多相關文章
  • 距離上次折騰已經有很長一段時間了。。。 不說這個,剛好有空閑,把這兩天折騰的 Tomcat 8 的服務配置整理出來收錄一下。 1、JDK安裝 1)檢查伺服器是否預裝了 openJdk,如果有就刪除,在這裡因為我的系統里沒有所以不多贅述。 2)到 oracle 的官網下載 JDK 安裝包,這裡我使用的 ...
  • 讓apache與mysql隨著系統自動啟動 在Linux中有一個文件/etc/rc.d/rc.local文件,其系統在啟動時會自動載入該文件,我們可以把要啟動的服務放入這個文件中即可。 添加以下代碼: ...
  • 多線程條件變數應用例子 Input_manager.h InputOpr 結構體添加 進程 ID :pthread_t t_TreadID; Makefile 添加線程庫 –lpthread LDFLAGS := -lm -lfreetype -lts –lpthread g_tTSDev = ts ...
  • zabbix是一個基於WEB界面的提供分散式系統監視以及網路監視功能的企業級的開源解決方案。 zabbix組件主要分兩個: zabbix-server和zabbix-agent。支持的監控協議有ICMP,IPMI,SNMP,HTTP以及zabbix協議(最常使用的協議用來監控各被監控端)。 收集的數 ...
  • 介紹 本章主要介紹在Linux中搭建FTP伺服器的過程,需要掌握的要點是配置文件的合理配置。 知識點 在linux中使用的FTP是vsftp FTP可以有三種登入方式分別是: 安裝FTP 使用YUM安裝 文件配置 安裝完之後在/etc/vsftpd/路徑下會存在三個配置文件。 vsftpd.conf ...
  • 配置網路 1、開啟虛擬網路 單擊左側導航的更改適配器設置: 開啟Vmware虛擬網路1與網路8 2、設置虛擬主機網路類型為:橋接模式(重要) 關閉虛擬主機,設置網路類型為橋接模式,然後啟動即可。 3、使用vi編輯器配置虛擬機網路 文件路徑:/etc/sysconfig/network-scripts... ...
  • awk數組詳解及企業實戰案例 3.列印數組: [root@nfs-server test]# awk 'BEGIN{array[1]="zhurui";array[2]="zhuzhu";for(key in array) print key,array[key]}' 1 zhurui 2 zhuz ...
  • 電腦操作系統的理論性知識 說明: 1.分頁存儲管理分為請求分頁式和非請求分頁式兩種。請求分頁是在純分頁系統的基礎上增加了請求調頁功能、頁面置換功能所形成的頁式虛擬存儲系統,每當所要訪問的頁面不在主存時,便要產生一個缺頁中斷,請求OS將所缺的頁調入主存。它和純分頁系統(非請求分頁式)相比多了虛擬存儲 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...