<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          微服務(wù)之吐槽一下Nacos日志的瘋狂輸出

          共 3813字,需瀏覽 8分鐘

           ·

          2021-07-04 17:50

          前言

          目前公司系統(tǒng)采用Spring Cloud架構(gòu),其中服務(wù)注冊和發(fā)現(xiàn)組件用的Nacos,最近運(yùn)維抱怨說,磁盤不夠用,日志增長的太快。簡單排查一下,罪魁禍?zhǔn)拙谷皇荖acos。

          按理說Nacos作為服務(wù)注冊中心,不會應(yīng)該會產(chǎn)生太多日志的,本身涉及的服務(wù)也不多,但幾天就會產(chǎn)生1G以上的日志,的確有點(diǎn)瘋狂。這篇文章就聊聊Nacos的日志系統(tǒng)。

          事件背景

          經(jīng)過排查,其中輸出最多的日志為{nacos.home}/logs/access_log.yyyy-mm-dd.log格式的日志。日志中包含了微服務(wù)系統(tǒng)調(diào)用Nacos及集群之間通信的日志,比如心跳(/nacos/v1/ns/instance/beat)、獲取服務(wù)列表(/nacos/v1/ns/instance/list)、狀態(tài)檢查(/nacos/v1/ns/service/status)等。

          我們知道Nacos是基于Spring Boot實(shí)現(xiàn)的,access_log日志是Spring Boot提內(nèi)置的Tomcat的訪問日志。關(guān)于該項(xiàng)日志的配置,沒有保留最大天數(shù),也沒有日志大小的控制。而且隨著Nacos Server與各個服務(wù)直接的心跳、獲取、注冊等會不停的產(chǎn)生訪問日志,微服務(wù)越多,日志增長越快。這些日志打印會迅速占用完磁盤空間,帶來資源浪費(fèi)和運(yùn)維成本。

          解決方案

          上述的access_log日志輸出Nacos是提供了控制開關(guān)的,在Nacos的conf目錄下application.properties配置文件中,默認(rèn)有以下配置:

          #*************** Access Log Related Configurations ***************#
          ### If turn on the access log:
          server.tomcat.accesslog.enabled=true

          ### The access log pattern:
          server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i

          ### The directory of access log:
          server.tomcat.basedir=

          可以看到,關(guān)于訪問日志支持關(guān)閉、日志輸出格式以及日志輸出的目錄。

          在測試環(huán)境,我們可以直接將enabled的配置項(xiàng)設(shè)置為false,直接關(guān)閉該日志的輸出。

          server.tomcat.accesslog.enabled=false

          但在生產(chǎn)環(huán)境,這樣操作就有一定的風(fēng)險了。當(dāng)關(guān)閉之后,生產(chǎn)出現(xiàn)問題時需要根據(jù)日志進(jìn)行排查,就會找不到對應(yīng)的日志。

          此時,只能通過其他方式進(jìn)行處理,比如在Linux操作系統(tǒng)下通過編寫crontab來完成日志的定時刪除。對應(yīng)的腳本示例如下:

          #!/bin/bash

          logFile="/data/nacos/bin/logs/nacos_del_access.log"
          # 保留14天日志
          date=`date -d "$date -14 day" +"%Y-%m-%d"`
          # 具體位置可調(diào)整
          delFilePath="/data/nacos/bin/logs/access_log.${date}.log"

          if [ ! -f "${logFile}" ];then
          echo 'access log文件打印日志頻繁. /etc/cron.daily/nacosDelAccessLogs.sh 會定時刪除access日志文件' >>${logFile}
          fi
          # 日志文件存在, 則刪除
          if [ -f "${delFilePath}" ];then
          rm -rf ${delFilePath}
          curDate=`date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"`
          echo '['${curDate}'] 刪除文件'${delFilePath} >>${logFile}
          fi

          雖然問題解決了,但很明顯并不優(yōu)雅,這也是Nacos Server日志輸出的問題之一。

          日志級別動態(tài)調(diào)整

          關(guān)于Nacos Server日志的輸出級別,在1.1.3版本之前,同樣會打印大量的日志,而且沒辦法動態(tài)的進(jìn)行調(diào)整。在此版本之后,日志輸出得到了優(yōu)化,并且支持通過API的形式來進(jìn)行日志級別的調(diào)整,示例如下:

          # 調(diào)整naming模塊的naming-raft.log的級別為error:
          curl -X PUT '$nacos_server:8848/nacos/v1/ns/operator/log?logName=naming-raft&logLevel=error'
          # 調(diào)整config模塊的config-dump.log的級別為warn:
          curl -X PUT '$nacos_server:8848/nacos/v1/cs/ops/log?logName=config-dump&logLevel=warn'

          客戶端日志

          業(yè)務(wù)系統(tǒng)集成的客戶端在1.1.3版本之后,也進(jìn)行了優(yōu)化,避免日志大量打印(主要涉及心跳日志、輪詢?nèi)罩镜龋?/p>

          在業(yè)務(wù)系統(tǒng)的application.yml配置文件中,可通過日志級別設(shè)置來進(jìn)行控制:

          # 日志級別,可以指定到具體類
          logging:
          level:
          com.alibaba.nacos: warn

          也可以通過啟動時的JVM參數(shù)來進(jìn)行控制,默認(rèn)是info級別:

          -Dcom.alibaba.nacos.naming.log.level=warn -Dcom.alibaba.nacos.config.log.level=warn

          上述示例分別指定了Naming客戶端和Config客戶端的日志級別,適用于1.0.0及以上版本。

          更細(xì)的日志配置

          查看conf目錄下的nacos-logback.xml配置,你會發(fā)現(xiàn)Nacos相關(guān)的日志配置項(xiàng)非常多,如果因項(xiàng)目需要進(jìn)行更精細(xì)化的配置,可在此文件中進(jìn)行直接配置。

          以naming-server對應(yīng)的append配置為例,看一下默認(rèn)的配置:

          <appender name="naming-server"
          class="ch.qos.logback.core.rolling.RollingFileAppender">
          <file>${LOG_HOME}/naming-server.log</file>
          <append>true</append>
          <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
          <fileNamePattern>${LOG_HOME}/naming-server.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
          <maxFileSize>1GB</maxFileSize>
          <maxHistory>7</maxHistory>
          <totalSizeCap>7GB</totalSizeCap>
          <cleanHistoryOnStart>true</cleanHistoryOnStart>
          </rollingPolicy>
          <encoder>
          <Pattern>%date %level %msg%n%n</Pattern>
          <charset>UTF-8</charset>
          </encoder>
          </appender>

          這里根據(jù)自己的需要,可調(diào)整輸出的日志格式、日志文件分割、日志保留日期及日志壓縮等處理。

          小結(jié)

          關(guān)于Nacos的日志輸出就聊這么多,整體而言相關(guān)的日志輸出有些過于多了,而且在靈活配置方面還有待提升。基于目前的現(xiàn)狀我們可以通過自定義或定時任務(wù)等配合完成日志輸出與管理。


          往期推薦

          還沒用過建造者模式?這篇文章幫你搞定

          軟件架構(gòu)分層,你的項(xiàng)目處于什么階段?

          一篇文章,只用看三遍,終生不忘網(wǎng)絡(luò)分層!

          一篇文章,領(lǐng)略Java8中ConcurrentHashMap的方方面面

          萬字解讀Java線程池設(shè)計(jì)思想及源碼實(shí)現(xiàn)



          如果你覺得這篇文章不錯,那么,下篇通常會更好。添加微信好友,可備注“加群”(微信號:zhuan2quan)

          一篇文章就看透技術(shù)本質(zhì)的人,
            和花一輩子都看不清的人,
            注定是截然不同的搬磚生涯。
          ▲ 按關(guān)注”程序新視界“,洞察技術(shù)內(nèi)幕
          瀏覽 150
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  裸体美女黄网 | 8xxxxx操| 天天操夜夜操天天射天天干 | 性日熟妇 | 国产精品一线在线观看 |