基于 ELKB 构建 Kylin 查询时间监控页面

3,526 阅读5分钟

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』,编程路上,一起前行。