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

Apache Kylin 入門系列目錄html

1、簡介

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

2、角色分配

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

3、ElasticSearch 安裝與配置

ES 的安裝與配置能夠參考文章:CentOS 7.4 下搭建 Elasticsearch 6.3 搜索羣集正則表達式

一、Kibana 安裝與配置

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

  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

二、Kibana 配置

Kibana 不須要作過多的配置,只須要設置節點信息和 ES 鏈接信息便可。apache

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

4、FileBeat 安裝與配置

一、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 安裝截圖

其餘系統安裝方法請參考官方文檔緩存

二、FileBeat 配置

使用 RPM 方式安裝成功後,FileBeat 的配置文件路徑爲:/etc/filebeat/filebeat.yml,打開配置文件進行修改:bash

# 配置 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
複製代碼

三、對配置文件的幾點說明

  1. Filebeat 的 modules 大部分都須要藉助 ES 的 Ingest 節點對數據進行二次處理;
  2. 進行日誌處理的時候 multiline 這部分特別重要,必定要設置好日誌之間的分割正則表達式;
  3. 不管是使用 ES 仍是 Logstash 做爲輸出,Filebeat 都支持配置多個地址,這樣有助於實現負載均衡。

5、Logstash 安裝與配置

Logstash 安裝比較簡單:架構

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

一、配置 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 {}
}
複製代碼

二、對配置文件的幾點說明

  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 啓動並正常解析

6、Kibana 監控頁面

一、建立索引匹配

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

設置索引匹配規則

設置 UTC 日期字段

日期字段必定要設置爲 UTC 時間,不然後面查詢時候會出現日期對應不上的狀況。

二、查詢日誌詳情

索引規則創建成功後,你能夠點擊左側的 Discover 查看日誌詳情。

在 Discover 中查看日誌詳情

三、建立可視化組件

若是能夠正常看到日誌,則表示目前爲止一切正常,下面開始建可視化組件,點擊左側菜單的 Visualize 進入可視化組件頁面(默認該頁面有不少預設的組件,沒啥用處,就所有刪除了)。

Visualize 可視化組件

對於可視化組件的構建步驟就不進行一一說明了,只須要對 ES 的聚合函數有了解,就能夠較好的進行使用,推薦瞭解的聚合函數:

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

四、建立儀表盤

點擊左側菜單欄的 Dashboard 打開儀表盤管理界面,點擊 「Create new dashboard」 按鈕便可創建新的儀表盤,點擊右上方的 「ADD」 按鈕添加剛纔新建的組件,而後拖拽調整大小布局,最後保存便可。

添加可視化組件

最終效果

7、擴展閱讀


Any Code,Code Any!

掃碼關注『AnyCode』,編程路上,一塊兒前行。

相關文章
相關標籤/搜索