日誌可分爲系統日誌、應用日誌以及業務日誌,系統日誌給運維人員使用,應用日誌給研發人員使用,業務日誌給業務操做人員使用。咱們這裏主要講解應用日誌,經過應用日誌來了解應用的信息和狀態,以及分析應用錯誤發生的緣由等。html
隨着系統的日益複雜,大數據時代的來臨,須要幾十甚至上百臺的服務器是常有的事,所以迫切須要有一套針對日誌、且可以集中式管理的產品。ELK 就實現了集中式日誌管理平臺,該平臺統一涵蓋了分佈式日誌收集、檢索、統計、分析以及對日誌信息的 Web 管理等集中化管控。node
ELK 是 Elasticsearch、Logstash、Kibana 的簡稱,這三套開源工具組合起來能搭建一套強大的集中式日誌管理平臺。git
Elasticsearch 是個開源的分佈式搜索引擎,提供搜索、分析、存儲數據三大功能。它的特色有:分佈式、自動發現、索引自動分片、索引副本機制、RESTful 風格接口、多數據源以及自動搜索負載等。github
Logstash 是一個開源的用來收集、解析、過濾日誌的工具。支持幾乎任何類型的日誌,包括系統日誌、業務日誌和安全日誌。它能夠從許多來源接收日誌,這些來源主要包括 Syslog、消息傳遞(例如 RabbitMQ)和 Filebeat;可以以多種方式輸出數據,這些方式主要包括電子郵件、WebSockets 和 Elasticsearch。正則表達式
Kibana 是一個基於 Web 的友好圖形界面,用於搜索、分析和可視化存儲在 Elasticsearch 中的數據。它利用 Elasticsearch 的 RESTful 接口來檢索數據,不只容許用戶定製儀表板視圖,還容許他們以特殊的方式查詢、彙總和過濾數據。shell
下圖是集中式日誌管理 ELK 的架構圖。出於性能的考慮,選擇採用了 Beats+EK 的形式來組合搭建集中式日誌管理系統。windows
ELK 架構瀏覽器
Elasticsearch 部署完成後,須要更改 elasticsearch.yml 配置文件中的主要屬性:cluster.name、node.name、network.host、discovery.zen.ping.unicast.hosts。其中,當部署 Elasticsearch 時是以集羣模式部署的,那麼 discovery.zen.ping.unicast.hosts 這個屬性纔會須要被配置。安全
經過配置 filebeat-pipeline.conf 文件中的 Input、Filter(可選)和 Output 來完成對數據的採集、過濾和輸出,以下圖所示:服務器
Logstash 配置
而後以 filebeat-pipline.conf 文件啓用 Logstash 服務,以下圖所示:
啓用 Logstash 服務
備註:因爲採用的是 Beats+EK 這個方案來實現集中式日誌管理,因此不須要配 Logstash。
經過更改 kibana.yml 配置文件內容,用來鏈接正確的 Elasticsearch 服務地址,一般只須要配置 elasticsearch.url 屬性便可,請見下圖的第一個圖。配置完成後,執行【bin/kibana &】命令啓用 Kibana 服務,請見下圖的第二個圖。最後就能夠在瀏覽器中打開 Kibana 管理頁面(訪問地址:http://139.198.13.12:4800/)來查看日誌。
Kibana 的配置說明
啓用 Kibana 服務
filebeat.yml 配置文件內容主要包含 Filebeat、Output、Shipper(可選)、Logging(可選)四大部分,其中 Filebeat 主要定義監控的日誌文件信息,Output 主要配置日誌數據的輸出目標。
filebeat.yml 文件中,主要屬性值的命名規範以下:
filebeat.yml 的配置示例以下圖所示:
filebeat.yml 的配置示例
日誌文件存放在哪臺服務器中,filebeat 服務就部署在哪臺服務器中。在 windows 操做系統上啓用 filebeat 服務的步驟:
一、在 windows 下開啓搜索,輸入 powershell,打開 powershell 所在文件位置,右鍵 powershell.exe 以管理員身份運行,進入 PowerShell 窗口。
或者以管理員身份啓動 cmd.exe,輸入命令 powershell,進入 PowerShell 窗口 。
注意:
請務必確保以管理員身份打開 PowerShell 窗口,不然的話在如下第 2 步中運行.ps1 腳本時,就會報沒有權限建立 filebeat 服務的錯誤:
二、導向到 filebeat 執行程序所在目錄,例如:cd 'E:\ELK\filebeat-1.3.0-windows',而後執行命令:powershell.exe -ExecutionPolicy UnRestricted -File .\install-service-filebeat.ps1。
三、以後能夠在 PowerShell 窗口中經過如下幾個命令來查看、啓用以及中止 filebeat 服務:
一、日誌存放路徑規範:{盤符}:\Log4Net{AppID}\,其中 AppID 即爲咱們所作項目的六位編碼。例如:D:\Log4Net\110107\。
二、log4net.config 配置內容:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/> </configSections> <appSettings> </appSettings> <log4net> <appender name="FileAppender" type="log4net.Appender.RollingFileAppender"> <!--AppID 150202,用於區分哪一個應用的日誌 --> <file value="D:\Log4Net\150202\" /> <rollingStyle value="Composite" /> <datePattern value="yyyy-MM-dd".log"" /> <staticLogFileName value="false" /> <param name="Encoding" value="utf-8" /> <maximumFileSize value="100MB" /> <countDirection value="0" /> <maxSizeRollBackups value="100" /> <appendToFile value="true" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="記錄時間:%date 線程:[%thread] 日誌級別:%-5level 記錄類:%logger 日誌消息:%message%newline" /> </layout> </appender> <logger name="FileLogger" additivity="false"> <level value="DEBUG" /> <appender-ref ref="FileAppender" /> </logger> </log4net> </configuration>
注意了:
基於 Kibana 查詢日誌(訪問地址:http://139.198.13.12:4800/),主要經過如下幾個步驟實現:
請參考以下圖所示:
Kibana 查詢日誌界面
轉自http://www.infoq.com/cn/articles/architecture-practice-03-elk