<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>

          微服務架構(gòu)開發(fā)實戰(zhàn)日志與監(jiān)控:微服務日志管理將面臨的挑戰(zhàn)

          共 2348字,需瀏覽 5分鐘

           ·

          2022-05-19 08:26


          微服務的日志與監(jiān)控:微服務日志管理將面臨的挑戰(zhàn)

          日志來自正在運行的進程的事件流。對于傳統(tǒng)的JavaEE應用程序而言,有許多框架和庫可用于日志記錄。Java Logging (JUL)是Java自身所提供的現(xiàn)成選項。除此之外,Log4j、Logback和SLF4J也是其他一些流行的日志框架。

          這些框架都能很好地支持UDP及 TCP。應用程序?qū)⑷罩緱l目發(fā)送到控制臺或文件系統(tǒng)。通常使用文件回收技術(shù)來避免日志填滿所有磁盤空間。

          日志處理的最佳實踐之一是關閉生產(chǎn)中的大部分日志條目,因為磁盤IO的成本很高。磁盤IO不但會減慢應用程序的運行速度,還會嚴重影響它的可伸縮性。將日志寫入磁盤也需要較高的磁盤容量。當磁盤空間用完之后,就有可能降低應用程序的性能。日志框架提供了在運行時控制日志記錄的選項,以限制必須打印及不打印的內(nèi)容。這些框架中的大部分不僅對日志記錄控件提供了細粒度的控制,還提供了在運行時更改這些配置的選項。

          另外,日志可能包含重要的信息,如果分析得當,則可能具有很高的價值。因此,限制日志條目本質(zhì)上限制了用戶理解應用程序行為的能力。所以,日志是一把“雙刃劍”。

          對于傳統(tǒng)的單個架構(gòu)而言,日志管理本身并不存在難點,畢竟所有的日志文件都存儲在應用所部署的主機上,獲取日志文件或搜索日志內(nèi)容都比較簡單。但分布式系統(tǒng)則不同,特別是微服務架構(gòu)所帶來的部署應用方式的重大轉(zhuǎn)變,都使得微服務的日志管理面臨很多新的挑戰(zhàn),主要有以下幾種。


          日志文件分散

          微服務架構(gòu)所帶來的直觀結(jié)果,就是微服務實例數(shù)量的增長,伴隨而來的就是日志文件的遞增。

          在微服務架構(gòu)里,每個微服務實例都是獨立部署的,日志文件分散在不同的主機里。如果還是按照傳統(tǒng)的運維方式,登錄到應用程序所在的主機來查看日志文件,這種方式基本上不可能在微服務架構(gòu)中使用。所以需要有一套可以管理幾種日志文件的獨立系統(tǒng)。

          日志容易丟失

          從傳統(tǒng)部署移到云部署時,應用程序不再鎖定到特定的預定義機器。虛擬機和容器與應用程序之間并沒有強制的關聯(lián)關系,這意味著用于部署的機器可能會隨時更改。特別是像Docker這樣的容器,通常來說都是非常短暫的,這基本上意味著不能依賴磁盤的持久狀態(tài)。一旦容器停止并重新啟動,寫入磁盤的日志文件將會丟失。所以不能依靠本地機器的磁盤來寫日志文件。

          事務跨越了多個服務

          在微服務架構(gòu)中,微服務實例將運行在孤立的物理或虛擬機上。在這種情況下,跟蹤跨多個微服務的端到端事務幾乎是不可能的。跨多個微服務的事務如圖12-1所示。


          在圖12-1中,每個微服務都將日志發(fā)送到本地文件系統(tǒng)。在這種情況下,事務1先調(diào)用應用1,然后調(diào)用應用3。由于應用Ⅰ和應用3運行在不同的物理機器上,它們都將各自的日志寫入不同的日志文件。這使得難以關聯(lián)和理解端到端的事務處理流程。另外,由于應用Ⅰ和應用3的兩個實例在兩臺不同的機器上運行,因此很難實現(xiàn)服務級別的日志聚合,最終導致了日志文件的碎片化。


          日志集中化的意義

          為了解決前面提到的日志管理的挑戰(zhàn),首先需要對傳統(tǒng)的日志解決方案進行認真的反思。因此需要新的日志管理解決方案,除了解決上述挑戰(zhàn)外,還需要考慮以下的功能。

          • 能夠收集所有日志消息并在日志消息之上運行分析。

          • 能夠關聯(lián)和跟蹤端到端的事務。

          • 能夠保存更長時間的日志信息,以便進行趨勢分析和預測。

          • 能夠消除對本地磁盤系統(tǒng)的依賴。

          • 能夠聚合來自多個來源的日志信息,如網(wǎng)絡設備、操作系統(tǒng)、微服務等。

          解決這些問題的方法是集中存儲和分析所有日志消息,而不考慮日志的來源。這種新的日志解決方案中采用的基本原則是將日志存儲和處理從執(zhí)行環(huán)境中分離出來。

          在集中式日志解決方案中,日志消息將從執(zhí)行環(huán)境發(fā)送到中央大數(shù)據(jù)存儲。日志分析和處理將使用大數(shù)據(jù)解決方案進行處理。因為相比與在微服務執(zhí)行環(huán)境中存儲和處理大數(shù)據(jù)而言,大數(shù)據(jù)解決方案更適合及更有效地存儲和處理大量的日志消息。

          集中化日志管理的系統(tǒng)架構(gòu)

          如圖12-2所示,集中化日志管理系統(tǒng)解決方案中包含了許多組件。


          這些組件如下。

          • 日志流:這些是來自源系統(tǒng)的日志消息流。源系統(tǒng)可以是微服務,也可以是其他應用程序甚至網(wǎng)絡設備。在典型的基于Java的系統(tǒng)中,這相當于對Log4j日志消息進行流式傳輸。

          • 日志托運:這些組件負責收集來自不同來源或端點的日志消息。然后,日志托運組件將這些消息發(fā)送到另一個端點,如寫入數(shù)據(jù)庫、推送到儀表板,或者將其發(fā)送到流處理端點以供進一步實時處理。

          • 日志存儲:這是所有日志消息將被存儲在能夠用于實時分析的地方。通常情況下,日志存儲將是能夠處理大量數(shù)據(jù)的NoSQL數(shù)據(jù)庫,如HDFS等。

          • 日志流處理器:這個組件能夠分析實時日志事件,以便快速做出決策。流處理器采取如儀表板發(fā)送信息、發(fā)送警報等操作。在具備自愈能力系統(tǒng)的情況下,流處理器甚至可以采取行動來糾正這些問題。

          • 日志儀表板:該儀表板用于顯示日志分析結(jié)果窗口。這些儀表板能夠方便運維和管理人員直觀地查看日志分析記錄。

          集中化日志管理的意義

          集中化日志管理的好處是不僅沒有本地IO或阻塞磁盤寫人,也沒有使用本地機器的磁盤空間。

          這種架構(gòu)與用于大數(shù)據(jù)處理的Lambda架構(gòu)基本相似。

          同時,每條日志信息都包含了上下文及相關ID。上下文通常會有時間戳、IP地址、用戶信息、日志類型等。關聯(lián)ID將用于建立服務調(diào)用之間的鏈接,以便可以跟蹤跨微服務的調(diào)用。

          本篇文章內(nèi)容給大家講解的是微服務的日志與監(jiān)控:微服務日志管理將面臨的挑戰(zhàn)

          1. 下篇文章給大家講解的是常見日志集中化的實現(xiàn)方式和Elastic Stack 實現(xiàn)日志集中化;

          2. 覺得文章不錯的朋友可以轉(zhuǎn)發(fā)此文關注小編;

          3. 感謝大家的支持!


          本文就是愿天堂沒有BUG給大家分享的內(nèi)容,大家有收獲的話可以分享下,想學習更多的話可以到微信公眾號里找我,我等你哦。

          瀏覽 31
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  91久久成人无码 | 国产又黄又大又粗的视频 | 国产无码高清福利 | 亚洲日韩中文字幕在线 | 色播五月婷婷网 |