基於 ELKB 構建 Kylin 查詢時間監控頁面

rochy_he發表於2018-11-08

Apache Kylin 入門系列目錄

一、簡介

ELKB 是指 Elasticsearch、Logstash、Kibana、Beats,藉助 FileBeat 採集 Kylin 日誌,並分發到 Logstash 進行過濾處理並最終寫入到 ES 中。使用 Kinaba 可以較為快捷的構建一系列圖表,通過對 Kylin 查詢日誌進行聚合分析,從多個維度構建其查詢指標監控頁面。

二、角色分配

角色 IP
Elasticsearch 192.168.3.214 9200
Logstash 192.168.3.213 5044
Kibana 192.168.3.214 5601
Beats 192.168.3.213 5044

三、ElasticSearch 安裝與配置

ES 的安裝與配置可以參考文章:CentOS 7.4 下搭建 Elasticsearch 6.3 搜尋群集

1、Kibana 安裝與配置

Kibana 安裝比較簡單,主要分以下步驟:

  1. 下載 tar 安裝檔案,這裡使用 6.4.2 版本
  2. 解壓到指定的目錄:tar -zxvf kibana-6.4.2-linux-x86_64.tar.gz -C /opt/
  3. 修改配置檔案/opt/kibana-6.4.2-linux-x86_64/config/kibana.yml
  4. 啟動 Kibana:/opt/kibana-6.4.2-linux-x86_64/bin/kibana

2、Kibana 配置

Kibana 不需要做過多的配置,只需要設定節點資訊和 ES 連線資訊即可。

server.port: 5601
server.host: "192.168.3.214"
server.name: "kibana-edps"
elasticsearch.url: "http://192.168.3.214:9200"
複製程式碼

四、FileBeat 安裝與配置

1、FileBeat 安裝

CentOS 7 可以直接通過 RPM 包進行安裝:

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.4.2-x86_64.rpm
sudo rpm -vi filebeat-6.4.2-x86_64.rpm
複製程式碼

CentOS 7 下 FileBeat 安裝截圖

其他系統安裝方法請參考官方文件

2、FileBeat 配置

使用 RPM 方式安裝成功後,FileBeat 的配置檔案路徑為:/etc/filebeat/filebeat.yml,開啟配置檔案進行修改:

# 配置 Filebeat 輸入
filebeat.inputs:
- type: log
  # 開啟 log 採集
  enabled: true
  # 設定日誌路徑
  paths:
    - /opt/apache-kylin-2.4.0-bin-cdh57/logs/kylin.log

  # 設定需要排除的行(正則匹配到的內容會被捨棄)
  #exclude_lines: ['^DBG']
  # 設定包含的行(正則匹配)
  include_lines: ['Query Id: ']
  # 設定需要排除的檔案(正則匹配)
  #exclude_files: ['.gz$']

  # 附加的靜態欄位
  #fields:
  #  level: debug
  #  review: 1

  # 設定日誌的分割正則
  multiline.pattern: '\d{4}-\d{2}-\d{2}\s*\d{2}:\d{2}:\d{2},\d{3}\s*\w+\s*\['
  multiline.negate: true
  multiline.match: after

#==================== Elasticsearch template setting ==========================
# 禁用自動模板載入
setup.template.enabled: false
#setup.template.name: "log"
#setup.template.pattern: "log-*"
#setup.dashboards.index: "log-*"
#setup.template.settings:
#  index.number_of_shards: 3
#  index.number_of_replicas: 0
#  index.codec: best_compression
#  _source.enabled: false

#============================== Kibana =====================================
setup.kibana:
  # Kibana 地址
  host: "192.168.3.214:5601"

#-------------------------- Elasticsearch output ------------------------------
# 使用 ES 作為輸出
#output.elasticsearch:
  #hosts: ["192.168.3.214:9200"]
  #index: "log-kylin-cdh3"  
  
  # Optional protocol and basic auth credentials.
  #protocol: "https"
  #username: "elastic"
  #password: "changeme"

#----------------------------- Logstash output --------------------------------
# 使用 LogStash 作為輸出
output.logstash:
  hosts: ["192.168.3.213:5044"]

#============================== Xpack Monitoring ===============================
# 設定監控資訊
xpack.monitoring:
  enabled: true
  elasticsearch:
    hosts: ["http://192.168.3.214:9200"]
    username: beats_system
    password: beatspassword
複製程式碼

3、對配置檔案的幾點說明

  1. Filebeat 的 modules 大部分都需要藉助 ES 的 Ingest 節點對資料進行二次處理;
  2. 進行日誌處理的時候 multiline 這部分特別重要,一定要設定好日誌之間的分割正規表示式;
  3. 無論是使用 ES 還是 Logstash 作為輸出,Filebeat 都支援配置多個地址,這樣有助於實現負載均衡。

五、Logstash 安裝與配置

Logstash 安裝比較簡單:

  1. 下載 Logstash 安裝檔案,6.4.2 下載地址
  2. 解壓到指定資料夾:tar -zxvf logstash-6.4.2.tar.gz -C /opt/

1、配置 Logstash

上面已經使用 FileBeat 將 Kylin 的日誌傳送給了 Logstash,這裡需要使用 Logstash 對日誌進行過濾,並寫入到 ES。

首先新建 kylin 日誌處理的配置檔案vi /opt/logstash-6.4.2/config/kylin_log.conf

input {
  beats {
    port => 5044
  }
}

filter {
  grok {
    match => {"message" => "(?<query_dtm>[^,]+),[\s\S]+?Query Id:\s*(?<query_id>\S+)\s*SQL:\s*(?<sql>[\s\S]+?)\nUser:\s*(?<user_id>[\s\S]+?)\nSuccess:\s*(?<success_flg>[\s\S]+?)\nDuration:\s*(?<cost_ft>[\s\S]+?)\nProject:\s*(?<project_id>[\s\S]+?)\n[\s\S]+?\nStorage cache used:\s*(?<cache_flg>[\s\S]+?)\n[\s\S]+"}
    remove_field => [ "message", "tags", "@timestamp", "@version", "prospector", "beat", "input", "source", "offset", "host"]  
  }
  date{
    match=>["query_dtm","YYYY-MM-dd HH:mm:ss", "ISO8601"]
    target=>"sql_dtm"
  }
}

output {
  elasticsearch { 
    hosts => ["192.168.3.214:9200"]
    index => "log-kylin-cdh3"
    document_id => "%{query_id}"
  }
  stdout {}
}
複製程式碼

2、對配置檔案的幾點說明

  1. 使用 gork 的正規表示式來對 kylin 的查詢 SQL 進行匹配,獲取了查詢 ID、耗時、快取命中、SQL 語句、USER 等資訊;
  2. 移除了 FileBeat 傳遞過來的無用的欄位:"message", "tags", "@timestamp", "@version", "prospector", "beat", "input", "source", "offset", "host"
  3. 由於 LogStash 預設使用 UTC 時間,所以使用 date 外掛新增了一個 utc 時間欄位(sql_dtm),同時保留了原始時間(query_dtm);
  4. 使用了 ES 輸出和控制檯輸出(便於監控);
  5. 對於日誌中的空格,控制檯輸出會使用\n展示,正規表示式一定不要寫為\\n
  6. gork 的正規表示式不需要進行轉義(很重要)。

全部配置完成後,啟動 Logstash 即可:/opt/logstash-6.4.2/bin/logstash -f /opt/logstash-6.4.2/config/kylin_log.conf

Logstash 啟動並正常解析

六、Kibana 監控頁面

1、建立索引匹配

首先登陸 Kibana:http://192.168.3.214:5601,登陸成功後建索引匹配:Management -> Kibana -> Index Patterns -> Create Index Pattern

設定索引匹配規則

設定 UTC 日期欄位

日期欄位一定要設定為 UTC 時間,否則後面查詢時候會出現日期對應不上的情況。

2、查詢日誌詳情

索引規則建立成功後,你可以點選左側的 Discover 檢視日誌詳情。

在 Discover 中檢視日誌詳情

3、建立視覺化元件

如果可以正常看到日誌,則表示目前為止一切正常,下面開始建視覺化元件,點選左側選單的 Visualize 進入視覺化元件頁面(預設該頁面有很多預設的元件,沒啥用處,就全部刪除了)。

Visualize 視覺化元件

對於視覺化元件的構建步驟就不進行一一說明了,只需要對 ES 的聚合函式有了解,就可以較好的進行使用,推薦瞭解的聚合函式:

  1. Count、Min、Max、Avg(經常使用);
  2. Date Histogram、Data Range(固定日期間隔、時間範圍);
  3. Histogram、Range(固定數字間隔、數字範圍);
  4. Terms(型別分類等,非常適合用在詞雲、餅狀圖等)。

4、建立儀表盤

點選左側選單欄的 Dashboard 開啟儀表盤管理介面,點選 “Create new dashboard” 按鈕即可建立新的儀表盤,點選右上方的 “ADD” 按鈕新增剛才新建的元件,然後拖拽調整大小布局,最後儲存即可。

新增視覺化元件

最終效果

七、擴充套件閱讀


Any Code,Code Any!

掃碼關注『AnyCode』,程式設計路上,一起前行。

基於 ELKB 構建 Kylin 查詢時間監控頁面

相關文章