1. 程式人生 > >Elastic Stack實戰學習教程~日誌資料的收集、分析與視覺化

Elastic Stack實戰學習教程~日誌資料的收集、分析與視覺化

Elastic Stack介紹

近幾年,網際網路生成資料的速度不斷遞增,為了便於使用者能夠更快更精準的找到想要的內容,站內搜尋或應用內搜尋成了不可缺少了的功能之一。同時,企業積累的資料也再不斷遞增,對海量資料分析處理、視覺化的需求也越來越高。

在這個領域裡,開源專案ElasticSearch贏得了市場的關注,比如,去年Elastic公司與阿里雲達成合作夥伴關係提供阿里雲 Elasticsearch 的雲服務、今年10月Elastic公司上市,今年11月舉行了Elastic 中國開發者大會、目前各大雲廠商幾乎都提供基於Elasticsearch的雲搜尋服務,等等這些事件,都反映了Elasticsearch在企業的應用越來越普遍和重要。

先來看看官網的介紹,ok,核心關鍵字:搜尋、分析。

Elasticsearch is a distributed, RESTful search and analytics engine capable of solving a growing number of use cases. As the heart of the Elastic Stack, it centrally stores your data so you can discover the expected and uncover the unexpected.

Elasticsearch 是一個分散式的 RESTful 風格的搜尋和資料分析引擎,能夠解決不斷湧現出的各種用例。作為 Elastic Stack 的核心,它集中儲存您的資料,幫助您發現意料之中以及意料之外的情況。

產品優勢:速度快、可擴充套件性、彈性、靈活性。
在某些應用場景中,不僅會使用Elasticsearch,還會使用Elastic旗下的其他產品,比如Kibana、Logstash等,常見的ELK指的就是Elasticsearch、Logstash、Kibana這三款產品,Elastic Stack指的是Elastic旗下的所有開源產品。

應用場景:(圖片截於Elastic官網)

 

場景實戰

接下來,我們來實戰一個應用場景。

場景:一個後端應用部署在一臺雲伺服器中,後端應用會以檔案形式記錄日誌。需求為:收集日誌內容,對每行日誌解析,得到結構化資料,便於搜尋、處理與視覺化。

方案:使用Filebeat轉發日誌到Logstash,後者解析或轉換資料,然後轉發到Elasticsearch儲存,接著資料就任君處理了,這裡我們把日誌資料根據某些需求進行視覺化,視覺化的活就交給Kibana完成。(另種方案也可:通過Filebeat將日誌資料直接轉發到Elasticsearch,由Elasticsearch Ingest node負責資料的資料處理)

所需軟體

本案例使用的產品版本如下:系統:CentOS,這裡分開部署了,也可以放在一起。
1、Kibana_v6.2.3 (IP: 192.168.0.26)
2、Elasticsearch_v6.2.3 (IP: 192.168.0.26)
3、Filebeat_v6.2.3 (IP: 192.168.0.25)
4、Logstash_v6.2.3 (IP: 192.168.0.25)


日誌內容

假設一行日誌內容如下:(日誌檔案放在/root/logs目錄下)

其中一行日誌內容如下:
2018-11-08 20:46:25,949|https-jsse-nio-10.44.97.19-8979-exec-11|INFO|CompatibleClusterServiceImpl.getClusterResizeStatus.resizeStatus=|com.huawei.hwclouds.rds.trove.api.service.impl.CompatibleClusterServiceImpl.getResizeStatus(CompatibleClusterServiceImpl.java:775)

一行日誌中可得到5個欄位,以“|”分割
2018-11-08 20:46:25,949| #時間
https-jsse-nio-10.44.97.19-8979-exec-11| # 執行緒名稱
INFO| # 日誌級別
CompatibleClusterServiceImpl.getClusterResizeStatus.resizeStatus=| # 日誌內容
trove.api.service.impl.CompatibleClusterServiceImpl.getResizeStatus(CompatibleClusterServiceImpl.java:775) # 類名

 

檔案目錄如下:(Elasticsearch和Kibana在另一臺伺服器,且已啟動)

 

 

Logstash配置

logs目錄存放需要收集的應用日誌,logstash.conf 為Logstash準備的配置檔案。

logstash.conf內容如下:

input {
  beats {
    port => 5044
  }
}

filter {
  grok {
    match => { "message" => "%{GREEDYDATA:Timestamp}\|%{GREEDYDATA:ThreadName}\|%{WORD:LogLevel}\|%{GREEDYDATA:TextInformation}\|%{GREEDYDATA:ClassName}" }
  }
  date {
    match => [ "Timestamp", "yyyy-MM-dd HH:mm:ss,SSS" ]
  }
}

output {
  elasticsearch {
    hosts => "192.168.0.26:9200"
    manage_template => false
    index => "java_log"
  }
}

 

接下來啟動Logstash(啟動成功,監聽5044埠,等待日誌資料傳入):

  

 

Filebeat配置

接下來看下Filebeat的配置檔案:

filebeat.prospectors:
- type: log
  enabled: true
  # 配置日誌目錄的路徑或者日誌檔案的路徑
  paths:
    - /root/logs/*.log

filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false

setup.template.settings:
  index.number_of_shards: 3
  #index.codec: best_compression
  #_source.enabled: false

setup.kibana:
  host: "192.168.0.26:5601"

# 配置output為logstash
output.logstash:
  # The Logstash hosts
  hosts: ["localhost:5044"]

 

啟動Filebeat:(當日志文件有更新時,會被Filebeat監聽到,被轉發出去。)

 

 

日誌查詢和視覺化

最後來看看Kibana,進行日誌的視覺化。在Kibana建立好index pattern,這裡命名為:java_log。在Discover頁面中對日誌資料進行查詢。

 

在Visualize中建立視覺化圖形。

 

在Dashboard中組合我們的圖形。
 


到此,就完成一個簡單的日誌資料的收集、分析、視覺化。

Elastic Stack還有很多強大的功能,後面我們來一個應用內搜尋案例。

 

參考資料

1. https://www.elastic.co/cn/blog/alibaba-cloud-to-offer-elasticsearch-kibana-and-x-pack-in-china 阿里雲與Elastic公司合作

2. https://www.elastic.co/guide/en/beats/libbeat/6.2/getting-started.html beat入門

3. https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html grok外掛

 


 

公眾號:碼農阿呆 (歡迎關注和交流)