站長資訊網
        最全最豐富的資訊網站

        Linux常用運維服務 – Nginx與Tomcat日志切割

        一 、Nginx-Tomcat 等常用服務日志分析

        在實際生產中,我們知道哪些應用的日志會自動分割嗎?哪些應用日志需要我們通過服務進行定時分割?接下來我們來看看。

        對比的標準

        • 是否會自動切割 ?
        • 重啟是否會自動分割 ?

        Nginx 日志

        日志名稱 日志描述 是否自動切割 是否需要定時切割
        access.log Nginx 訪問日志
        error.log Nginx 錯誤日志

        如果需要單獨配置網站日志的話需要在 server 模塊添加access_log logs/djx.log ;

        Tomcat日志

        日志名稱 日志描述 是否自動切割 是否需要定時切割
        catalina.out Tomcat 運行時日志和輸出到控制臺日志(應用)
        catalina.2019-04-28.log Tomcat本身運行的日志,主要是啟動和暫停的。
        localhost_access_log.2019-04-28.txt 訪問 Tomcat 的日志,請求時間和資源,狀態碼都有記錄
        localhost.2019-04-28.log 應用初始化(listener, filter, servlet)未處理的異常最后被 Tomcat 捕獲而輸出的日志
        host-manager.2019-04-28.log 放 Tomcat 的自帶的 Host Manager項目的日志信息的
        manager.2019-04-28.log Tomcat 自帶 Manager項目專有的日志文件

        Tomcat 的日志比較特別和有意思,我也是認真看了看才發現其中的奧秘。

        畫重點了

        Tomcat 的 catalina.out 日志是 不會自動切割的,所以我們需要對它進行定時切割,重啟 Tomcat 也是不會自動切割的。

        其它的日志 Tomcat 是會進行自動切割的,但是會遵循這樣的一個規則:日志隔天切割,有日志才切割,重啟會切割:

        • 日志隔天切割 :含義是 日志在24.00分才會進行切割,如果 00:00:10 產生了當天的第一條日志,那么就進行切割。
        • 有日志才切割 :含義是 如果滿足了隔天的要求,但是第二天一直沒有產生日志,那么就會直到第二天第一條日志產生時才進行切割。
        • 重啟切割 : 含義是 如果上面的條件都不滿足,就是到了第二天,但是一條日志一直都沒有產生,那么在重啟Tomcat 時是會進行切割的。

        上面內容有點繞,我們舉幾個示例理解下。

        示例1:

         Tomcat 在 2019 年 4 月28號15.30分啟動的,有日志文件 catalina.2019-04-28.log 等。2019 年 4月29號的第一條日志在 2019 年 4月29號9.30分。那么日志切割在什么時候?    ?       日志切割是在  2019 年 4月29號9.30分。

        示例2:

         Tomcat 在 2019 年 4 月28號10.30分啟動的,有日志文件 catalina.2019-04-28.log 等。在 2019 年 4月29號3.30分重啟了 Tomcat  ,但是在重啟前,Tomcat 在2019 年 4月29號3.30分當天是沒有產生日志的,但在  2019 年 4月29號 3.50 產生了日志。問在什么時候切割了日志?    ?       Tomcat   重啟時就進行了切割。

        MongoDB 日志

        MongoDB 的日志我們平時是關注的比較少,但是我們這邊還是做下記錄。

        MongoDB 的日志是否切割取決于 MongoDB 的配置參數。

        logRotate= rename/reopen      #3.0.0版中的新功能。可以取值為 rename 或 reopen:          rename 重命名日志文件。每次重啟都會重命名日志文件。          reopen 按照典型的 Linux/Unix 日志循環行為關閉并重新打開日志文件。使用 reopen 使用的             Linux/Unix logrotate的工具時,以避免日志的丟失。          如果指定 reopen,則還必須使用 logappend  logappend= true # 當 MongoDB 實例重新啟動時,將新的日志內容添加到現有日志文件的末尾。如果沒有此選項,MongoDB 將備份現有日志并創建新文件。

        但是,MongoDB 的日志默認是不會進行切割的(如果不重啟的話)。

        MongoDB 日志切割 見文章 :MongoDB 日志切割三種方式

        Redis 日志

        Redis 日志默認也是不切割的, 重啟也不切割。 Redis 日志在實際環境中我們也是建議進行切割的,切割頻率可以降低。我看到有的 Redis 日志達到 1G,運行了2年,那么我們進行查找日志就比較不方便的,所以建議 Redis 的日志也進行切割。

        二 、日志切割服務 logrotate

        我們通常會去尋找對應的日志切割服務,但是我們不知道系統默認已經默認帶了一個日志的切割服務 logrotate。像我們系統的日志 /var/log/cron/var/log/maillog/var/log/messages等等這些都是通過 logrotate 來進行切割的,我們可以在文件 /etc/logrotate.d/syslog 看到具體的配置。logrotate 可以每天或者每個月按周期對日志進行自動切割和壓縮,以及通過郵件發送。logrotate 的自動切割是 通過 crond 來運行任務的。

        logrotate 官方鏈接

        logrotate 命令以及選項

        logrotate [OPTION...] <configfile>   -d, --debug  # 僅僅是測試,并不做任何東西。在測試配置文件是否正確的時候可以使用。   -f, --force  # 指定配置文件   -m, --mail=command # 指定發送郵件的命令,替代 /bin/mail   -s, --state=statefile # 指定狀態文件的路徑 ,默認路徑是 /var/lib/logrotate.status 。   -v, --verbose  # 顯示 logrotate 分割信息   -l, --log=STRING # 指定日志文件的路徑   --version # 顯示版本信息

        logrotate 配置文件路徑

        logrotate 配置文件的位置 位于/etc/logrotate.conf

        logrotate 用戶配置文件位于 /etc/logrotate.d/

        logrotate 的執行狀態文件/var/lib/logrotate.status

        logrotate 配置文件的參數:

        compress # 是否通過gzip壓縮轉儲以后的日志文件,如xxx.log-20131216.gz ;如果不需要壓縮,注釋掉就行  compresscmd # 指定壓縮的命令,默認 gzip  uncompresscmd # 用于解壓縮的日志文件的命令 默認是 gunzip  compressext  # 啟用壓縮的擴展名,默認 gzip 的擴展名就是 .gz。  copy  # 制作日志文件的副本,與create選項互斥。  copytruncate # 用于還在打開中的日志文件,把當前日志備份并截斷;是先拷貝再清空的方式,拷貝和清空之間有一個時間差,可能會丟失部分日志數據。與create選項互斥。  create mode owner group # 在切割后,創建新的日志文件,并指定數據的權限和所有者和所屬組。  dateext    # 這個參數很重要!就是切割后的日志文件以當前日期YYYYMMDD為格式結尾,如xxx.log-20131216這樣,如果注釋掉,切割出來是按數字遞增,即前面說的 xxx.log-1這種格式  dateformat format_string # 指定日志文件后綴日期格式  ifempty # 表示即使是空文件也要選擇,該選項是默認值。與 notifempty 相反  notifempty  # 當日志文件為空時,不進行輪轉,與 ifempty 相反  mailfirst  #  當配置了郵件地址,指定發送最新的文件  maillast  # 當配置了郵件地址,指定發送最舊的文件,(默認設置)  rotate count  # 日志保留的次數, 如果該參數不寫的話,默認就是刪除之前所有的文件日志。比如切割了200次,那么只保留最新的180次日志,并刪除舊的20次日志。如果配置文件指定的是 daily,那每天切割一次日志,就意味著保留180天日志。  maxage count # 刪除早于 count 天的日志,如果配置了 mail 則通過郵件發送。  daily   # 每天 切割  weekly  # 每周運行一次,通常在每周的第一天。  monthly      # 每月運行一次切割,通常會在該月的第一天。  yearly   # 如果當前年份與上一次年份不相同,就會進行切割  nocompress   # 不進行壓縮。   size size  # 日志文件達到多大就切割  olddir dir  # 切割后存放的目錄  start count  #  當沒有指定日期后綴,將數字作為后綴內容,默認是從 1 開始 。可以指定其他數字開始。  missingok   # 如果日志丟失,不報錯繼續滾動下一個日志  mail  112@163.com # 該參數與 rotate 是有關聯的,當超過 rotate 指定次數,文件不是刪除,而是通過郵件發送到指定位置。  prerotate       # 在logrotate轉儲之前需要執行的指令  postrotate      # 在logrotate轉儲之后需要執行的指令 ###  3.85 版本增加每個小時切割  hourly # 每個小時切割

        示例配置

        #  文件路徑,可以使用通配符。  /opt/tomcat/logs/catalina.out{  compress   compressext .gz  copytruncate  dateext  notifempty  maillast  rotate 180   daily  size 10M  olddir /opt/logs/tomcat  missingok  mail 888888@qq.com # 如果我們本地沒有配置好發送郵件配置的話是發送不了郵件的。  }

        常用命令

        logrotate -d -f /etc/logrotate.d/tomcat  # 測試配置文件是否配置正常  logrotate  -f /etc/logrotate.d/tomcat  # 立刻切割文件,可以將該命令放到定時任務中實現定時切割

        注意事項:

        • 當我們設置好日志按日進行切割的時候,具體的執行時間是在什么時候呢?我們不要以為是會在 24.00 的時候進行切割的,它進行切割的時間是隨機的。這個隨機值取決于 crond 服務的,最終會取決于文件 /etc/anacrontab

          [root@localhost ~]# cat /etc/anacrontab # /etc/anacrontab: configuration file for anacron # See anacron(8) and anacrontab(5) for details.    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    #period in days   delay in minutes   job-identifier   command  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  

          我們可以發現 定時任務是會在 3-22點的5分-45分里面進行日志切割。

        • 生產環境中該如何定時日志分割

          我們在實際的生產環境中,我們通常會進行按日進行日志分割,也就是我們希望在 24.00 進行前一天的日志分割,我們可以通過 crond 服務進行定時切割 (logrotate -f /etc/logrotate.d/tomcat ), 但是我們通常在很多應用中會有定時任務在 24.00進行執行,那個時間段也就會產生大量的日志,如果我們在此時切割,那么我們可能會導致比較多的重要的日志丟失(并且此時任務多,資源消耗多,切割也慢),那么我們建議先咨詢開發,24.00 是否有大量定時任務,我們可以在 24.00之前幾分鐘或者之后幾分鐘 進行切割。這樣就避免大量的日志丟失。

        三、日志切割示例

        Nginx 切一切

        示例:Nginx 日志保存在 /opt/nginx/logs/,包含日志 access.logerror.log

        /opt/nginx/logs/* {  compress   compressext .gz  copytruncate  dateext  notifempty  maillast  rotate 180   daily  size 10M  olddir /opt/logs/nginx  missingok  mail 888888@qq.com # 如果我們本地沒有配置好發送郵件配置的話是發送不了郵件的。  }

        Tomcat 切一切

        示例:Tomcat 日志保存在 /opt/tomcat/logs/,包含日志 catalina.out,其他日志會自動切割。

        /opt/tomcat/logs/catalina.out{  compress   compressext .gz  copytruncate  dateext  notifempty  maillast  rotate 180   daily  size 10M  olddir /opt/logs/tomcat  missingok  mail 888888@qq.com # 如果我們本地沒有配置好發送郵件配置的話是發送不了郵件的。
        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 欧美精品/日韩精品/国产精品| 精品国产sm捆绑最大网免费站| 精品国产v无码大片在线观看| 四虎国产精品永久在线观看| 91精品久久久久久无码| 亚洲精品乱码久久久久久久久久久久 | 99久久er这里只有精品18| 精品视频在线观看你懂的一区| 麻豆国产高清精品国在线| 国产精品久久国产精品99盘 | 亚洲日韩精品一区二区三区无码| 热re99久久6国产精品免费| 国产在线观看一区精品| 九九精品在线观看| 国产精品国色综合久久| 日韩精品真人荷官无码| 四库影院永久四虎精品国产| 国产乱子伦精品免费视频| 精品一区二区三区免费| …久久精品99久久香蕉国产| 日韩人妻精品无码一区二区三区| 3级黄性日本午夜精品| 99热成人精品热久久669| 久久亚洲精精品中文字幕| 色哟哟国产精品免费观看| 精品久久人人妻人人做精品| 国产高清在线精品一区小说| 四虎国产精品永久地址99新强| 无码精品人妻一区| 国产亚洲美女精品久久久| 国产精品亚洲视频| 国产精品一区二区三区99 | 国产精品高清一区二区三区| 中文字幕乱码中文乱码51精品| 久久亚洲国产欧洲精品一| 91精品国产乱码久久久久久| 无码人妻精品一区二区三区99仓本 | 91精品国产综合久久香蕉| 精品成人免费自拍视频| 国产成人精品久久免费动漫| 97人妻无码一区二区精品免费|