中小型研發團隊架構實踐七:集中式日志ELK


一、集中式日志

     日志可分為系統日志、應用日志以及業務日志,系統日志給運維人員使用,應用日志給研發人員使用,業務日志給業務操作人員使用。我們這里主要講解應用日志,通過應用日志來了解應用的信息和狀態,以及分析應用錯誤發生的原因等。

     隨着系統的日益復雜,大數據時代的來臨,需要幾十甚至上百台的服務器是常有的事,因此迫切需要有一套針對日志、且能夠集中式管理的產品。ELK 就實現了集中式日志管理平台,該平台統一涵蓋了分布式日志收集、檢索、統計、分析以及對日志信息的 Web 管理等集中化管控。

1.1、ELK 簡介

     ELK 是 Elasticsearch、Logstash、Kibana 的簡稱,這三套開源工具組合起來能搭建一套強大的集中式日志管理平台。

     Elasticsearch 是個開源的分布式搜索引擎,提供搜索、分析、存儲數據三大功能。它的特點有:分布式、自動發現、索引自動分片、索引副本機制、RESTful 風格接口、多數據源以及自動搜索負載等。

     Logstash 是一個開源的用來收集、解析、過濾日志的工具。支持幾乎任何類型的日志,包括系統日志、業務日志和安全日志。它可以從許多來源接收日志,這些來源主要包括 Syslog、消息傳遞(例如 RabbitMQ)和 Filebeat;能夠以多種方式輸出數據,這些方式主要包括電子郵件、WebSockets 和 Elasticsearch。

     Kibana 是一個基於 Web 的友好圖形界面,用於搜索、分析和可視化存儲在 Elasticsearch 中的數據。它利用 Elasticsearch 的 RESTful 接口來檢索數據,不僅允許用戶定制儀表板視圖,還允許他們以特殊的方式查詢、匯總和過濾數據。

1.2、ELK 的架構

     下圖是集中式日志管理 ELK 的架構圖。出於性能的考慮,選擇采用了 Beats+EK 的形式來組合搭建集中式日志管理系統。

    

                                                                           ELK 架構

 

二、配置方法

2.1、Elasticsearch

     Elasticsearch 部署完成后,需要更改 elasticsearch.yml 配置文件中的主要屬性:cluster.name、node.name、network.host、discovery.zen.ping.unicast.hosts。其中,當部署 Elasticsearch 時是以集群模式部署的,那么 discovery.zen.ping.unicast.hosts 這個屬性才會需要被配置。

2.2、Logstash

     通過配置 filebeat-pipeline.conf 文件中的 Input、Filter(可選)和 Output 來完成對數據的采集、過濾和輸出,如下圖所示:

     

                                        Logstash 配置

     然后以 filebeat-pipline.conf 文件啟用 Logstash 服務,如下圖所示:

      

                                                       啟用 Logstash 服務

     備注:由於采用的是 Beats+EK 這個方案來實現集中式日志管理,所以不需要配 Logstash。

2.3、Kibana

     通過更改 kibana.yml 配置文件內容,用來連接正確的 Elasticsearch 服務地址,通常只需要配置 elasticsearch.url 屬性即可,請見下圖的第一個圖。配置完成后,執行【bin/kibana &】命令啟用 Kibana 服務,請見下圖的第二個圖。最后就可以在瀏覽器中打開 Kibana 管理頁面(訪問地址:http://139.198.13.12:4800/)來查看日志。

 

                                                       Kibana 的配置說明

 

                                                       啟用 Kibana 服務

2.4、Filebeat

     filebeat.yml 配置文件內容主要包含 Filebeat、Output、Shipper(可選)、Logging(可選)四大部分,其中 Filebeat 主要定義監控的日志文件信息,Output 主要配置日志數據的輸出目標。

     filebeat.yml 文件中,主要屬性值的命名規范如下:

  1. fields.AppID 的命名規范是{AppID}。
  2. fields.AppName 的命名規范是{產品線英文名稱}.{項目英文名稱}(如果項目英文名稱由 2 個或 2 個以上英文單詞組成,則單詞之間請用. 分隔)。
  3. 針對 index 屬性需要注意的是:索引 (index) 所定義的值是{產品線英文名稱},但英文字母必須全部小寫,且不能以下划線開頭,也不能包含逗號。

     filebeat.yml 的配置示例如下圖所示:

      

                                                       filebeat.yml 的配置示例

     日志文件存放在哪台服務器中,filebeat 服務就部署在哪台服務器中。在 windows 操作系統上啟用 filebeat 服務的步驟:

     1、在 windows 下開啟搜索,輸入 powershell,打開 powershell 所在文件位置,右鍵 powershell.exe 以管理員身份運行,進入 PowerShell 窗口。

     或者以管理員身份啟動 cmd.exe,輸入命令 powershell,進入 PowerShell 窗口 。

     注意:

     請務必確保以管理員身份打開 PowerShell 窗口,否則的話在以下第 2 步中運行.ps1 腳本時,就會報沒有權限創建 filebeat 服務的錯誤:

     

     2、導向到 filebeat 執行程序所在目錄,例如:cd 'E:\ELK\filebeat-1.3.0-windows',然后執行命令:powershell.exe -ExecutionPolicy UnRestricted -File .\install-service-filebeat.ps1。

     3、之后可以在 PowerShell 窗口中通過以下幾個命令來查看、啟用以及停止 filebeat 服務:

  • 查看 filebeat 服務狀態:Get-Service filebeat
  • 啟動 filebeat 服務:Start-Service filebeat
  • 停止 filebeat 服務:Stop-Service filebeat

 

三、使用方法

3.1、Log4Net 本地日志

     1、日志存放路徑規范:{盤符}:\Log4Net{AppID}\,其中 AppID 即為我們所做項目的六位編碼。例如:D:\Log4Net\110107\。

     2、log4net.config 配置內容:

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <configuration>
 3   <configSections>
 4     <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
 5   </configSections>
 6   <appSettings>
 7   </appSettings>
 8   <log4net>
 9     <appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
10       <!--AppID 150202,用於區分哪個應用的日志 -->     
11       <file value="D:\Log4Net\150202\" />
12       <rollingStyle value="Composite" />
13       <datePattern value="yyyy-MM-dd&quot;.log&quot;" />
14       <staticLogFileName value="false" />
15       <param name="Encoding" value="utf-8" />  
16       <maximumFileSize value="100MB" />      
17       <countDirection value="0" />         
18       <maxSizeRollBackups value="100" />
19       <appendToFile value="true" />      
20       <layout type="log4net.Layout.PatternLayout">
21         <conversionPattern value="記錄時間:%date 線程:[%thread] 日志級別:%-5level 記錄類:%logger 日志消息:%message%newline" />
22       </layout>
23     </appender>
24     <logger name="FileLogger" additivity="false">    
25       <level value="DEBUG" />
26       <appender-ref ref="FileAppender" />
27     </logger>     
28   </log4net>
29 </configuration>

     注意了:

  • maximumFileSize 設置為 100MB;請給 countDirection 設置為大於 -1 的整數;maxSizeRollBackups 設置為 100。
  • 日志文件內容規范:日志文件中的每條日志內容要求是“記錄時間 線程 日志級別 出錯類 日志消息”。

3.2、日志查詢

     基於 Kibana 查詢日志(訪問地址:http://139.198.13.12:4800/),主要通過以下幾個步驟實現:

  1. 選擇業務索引庫。
  2. 選擇日期范圍。
  3. 輸入待查找的內容實現精確查詢,也可以通過輸入 * 實現模糊查詢。
  4. 點擊每條日志的展開圖標,可以查看該條日志的詳細信息。
  5. 在 Kibana 界面的左側區域,自上而下依次是索引庫選擇框、選中字段集合列表(Selected Fields)、可用字段集合列表(Available Fields)。通過添加可用字段到選中字段集合列表中來改變 Kibana 右側的日志表格呈現。

     請參考如下圖所示:

     

                                                                 Kibana 查詢日志界面

 

四、Demo 下載及更多資料

 

轉載地址:http://www.infoq.com/cn/articles/architecture-practice-03-elk?utm_source=infoq&utm_campaign=user_page&utm_medium=link


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM