Elastic Stack学习笔记

简介

Elastic Stack可用于集群、多应用的日志分析。

Elastic Stack包含Elasticsearch、Kibana、Logstash、Beats。

Elasticsearch负责存储、索引、查询、分析文档。一条日志可以看成一个文档。

Kibana是Elasticsearch的客户端,可以查询文档,将文档的分析结果可视化。

Logstash可以将一个数据源传输到另一个数据源,传输的过程中,可以对数据清洗、加工和整理。通过配置输入插件,可以支持不同的数据源,比如Beats、Kafka。通过配置过滤器,可以支持不同过滤形式,比如解析文本、增加字段。通过配置输出插件,可以支持不同的目标数据源,比如Elasticsearch、MongoDB。

Beats负责采集数据,采集日志的组件是FileBeats。

日志通过FileBeats采集,传输给Logstash,在生产环境中,Logstash会把消息中间件配置成事件队列,达到削峰填谷的目的。Logstash对日志加工后,交给Elasticsearch生成索引。通过Kibana可以查询和分析文档。

Elasticsearch

概念

  • 全文检索

数据检索:从一系列数据中,根据一个或多个数据特征找到特定的数据。

数据分类:结构化数据,比如Mysql的表,半结构化数据,比如JSON、XML,非结构化数据,比如文章、邮件、图片、视频。

全文检索:结构化的数据可以用关系数据库检索,而半结构化、非结构化数据的检索称为全文检索。

  • 倒排索引

forward index:关系数据库的索引一般是主键,也是记录id,记录id指向记录。

inverted index:全文检索是从文档内容中提取关键字,对关键字建立索引,索引指向文档id。

Elasticsearch权威指南-倒排索引

  • 映射

文档插入索引,需要由映射关系来定义。

一个索引可以包含多个映射类型,但是Elasticsearch7.0开始,一个索引只包含一个映射类型(_doc),也就是只包含一种文档。

Elasticsearch权威指南-多个映射类型的问题

查询

查询分成Query和Filter,Query查询出的文档会按相关度排序,Filter查询出的文档相关度都相同。

Elasticsearch中的数据类型和其他数据库差不多,但是字符串类型比较特别。字符串类型包括text和keyword两种类型,text类型会经过分词,分成多个词项,然后编入索引,keyword类型是整个文本编入索引,不分词。text类型用于词项搜索,keyword类型用于聚合统计。比如"我爱中国"定义成text类型,经过分词可以分成3个词项“我”、“爱”、”中国“,当搜索”我“这个词项,可以查询到”我爱中国“这个字符串。如果"我爱中国"定义成keyword类型,只有搜索"我爱中国"时,才能查到”我爱中国“这个字符串。但是定义成text类型的"我爱中国"并没有在索引中保存整个文本,索引不能用于聚合统计,而keyword类型的"我爱中国"则可以。如果一个字段既希望能基于词项搜索,有希望基于全文统计,那就需要定义多类型,自身定义成一种类型,通过子字段定义成其他类型。

  • 精确查询

使用关键字term,必须完全匹配文本。

GET /my_index/_search
{
 "query" : {
   "term" : { 
     "title" : "我爱中国"
   }
 }
}

Elasticsearch权威指南

  • 匹配查询

使用关键字match,查询串会先经过分词,匹配索引中的分词文本。

GET /my_index/_search
{
   "query": {
     "match": {
       "title": "我"
     }
   }
}

Elasticsearch权威指南

  • 组合查询

使用关键字bool,组合多个条件,支持与、或、非。

GET /my_index/_search
{
 "query" : {
   "bool" : {
     "must" : [
       { "term" : {"price" : 20}}, 
       { "term" : {"title" : "我爱中国"}} 
     ]
   }
 }
}

Elasticsearch权威指南

聚合

常用的聚合是桶型聚合和指标聚合。

对于一条SQL:select avg(age) from student group by grade,group by grade对应Elasticsearch桶型聚合,avg(age)对应Elasticsearch指标聚合。采用Elasticsearch的语法:

GET /student/_search
{
 "aggs": {
   "grades": {
     "terms": {
       "field": "grade"
     }
   },
   "aggs": {
     "avg_age": { 
       "avg": { "field": "price" }
     }
   }
 }
}

这种语法结构和SQL不同的是,可以嵌套多层聚合。桶型聚合下面嵌套指标聚合,指标聚合下面又可以嵌套桶型聚合。

Kibana

功能:Management-Dev Tools

开发工具界面可用于执行elasticsearch的操作,比如在增删改查文档。

Elasticsearch7.0增删改查文档

Elasticsearch2.x增删改查文档

官方的《Elasticsearch权威指南》基于Elasticsearch2.x编写,需要注意的是7.0版本中不推荐一个索引下定义多个mapping,mapping统一为_doc。

功能:Analytics-Discover

文档发现功能可以用来搜索“索引模式”中的文档。

首先需要定义索引模式。索引模式是一组相关的索引,比如日志通常会按天建立索引,当我们要搜索这种日志时,就需要包含每一天的索引,通常是定义一个带通配符*的索引模式,匹配所有日期的索引。索引模式的定义在Management - Stack Management / Index patterns。

然后进入搜索界面Analytics-Discover。选择一个索引模式,输入查询条件。如果查询条件比较简单,使用KQL,如果查询条件比较复杂,可以切换成Lucene,使用Elasticsearch的搜索语法。当然在搜索之前,通常需要通过logstash对日志做预处理,解析成多字段。

功能:Analytics-Dashboard

一个Dashboard由多个控件和图表构成,控件控制查询条件,图表展示聚合结果。

图表在Analytics-Visualize Library中定义,图表的形式可以分为表格、二维坐标图、圆形和弧形和热度图。

FileBeat

配置功能

  1. 指定采集日志的目录
  2. 为日志增加标识信息
  3. 输出到logstash

配置示例

  • filebeat.yml
# ============================== Filebeat inputs ===============================

filebeat.inputs:
- type: log
  enabled: true
  # 读取日志的目录  
  paths:
    - D:/myapp/data/logs/logger*.log
  # 日志标识  
  tags: ["myapp"]
  # 读取日志编码  
  encoding: 'GBK'  
  
  # 异常日志需要合并多行日志
  # multiline: 
  #  pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
  #  negate: true
  #  match: after
    
# ============================== Filebeat modules ==============================

filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false  
  
# ---------------------------- Logstash Output ----------------------------
output.logstash:
  hosts: ["localhost:5044"]  

重新收集日志

  1. 在Kibana中删除生成的索引,Management - Stack Management / Index Management。
  2. 清空FileBeats日志收集记录,目录为${FileBeats_HOME}/data。
  3. 重新运行FileBeats。

Logstash

配置功能

  1. 通过json解析日志
  2. 输出到elasticsearch
  3. 定义索引的生命周期管理,索引滚动时的别名

配置示例

  • config/logstash.conf
input {
  beats {
    port => 5044
  }
}

# 日志的文本记录在message字段,解析后的Json存储在doc字段,删除源字段message
filter {
  json {
    source => message
    target => doc
    remove_field => ["message"]
  }
}

output {
  if "myapp" in [tags] {
    elasticsearch {
      hosts => ["http://localhost:9200"]
      ilm_enabled => "true"
      ilm_policy => "myapp_policy"
      ilm_rollover_alias => "myapp"
    }
  }
}
  • kibana配置索引生命周期策略

在Management - Stack Management / Index Lifecycle Management中配置索引生命周期策略,关闭Hot phase的Rollover,增加Delete phase,7天后删除索引。配置参考资料

参考资料

《Elasticsearch权威指南》

《Elastic Stack应用宝典》

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容