概述
- 日志统一手机、管理、访问。查找问题方便安全,收集放到搜索引擎中。E:ElasticSearch:分布式搜索引擎存储库,NoSql,核心是倒排索引库,可以存TB级的数据。
- ElasticSearch
基于Lucene的分布式全文搜索框架,可以对logs进行分布式存储,有点像hdfs。此为ELK的核心组件,日志的分析以及存储全部由es完成 - LogStash
可以流放到各自的服务器上收集Log日志,通过内置的ElasticSearch插件解析后输出到ES中 - Kibana
可以多维度的展示es中的数据。可提供图表展示,造出一些非常炫酷的页面。这也解决了用mysql存储带来了难以可视化的问题。他提供了丰富的UI组件,简化了使用难度
环境搭建
ElasticSearch安装
ES相关概念
相关其他配置见官方文档 (https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html)
- 正排索引和倒排索引
正排索引:文档 id 到文档内容、单词的关联关系
倒排索引:单词到文档 id 的关联关系(通过对文档内容分词实现)
倒排索引组成:
1. 单词词典(Term Dictionary):B+树
2. 倒排列表(Posting List):
- 文档id:获取原始信息
- 单词频率(TF,Term Frequency):记录单词在文档中出现次数,用于后续算分
- 位置(Position):记录单词在文档中(分词后)位置,用于词语搜索(Phrase Query)
- 偏移(Offset):记录单词在文档的开始和结束位置,用于高亮显示
倒排索引–查询流程:
- 通过倒排索引获取单词对应的文档 id
- 通过正排索引查询文档 id 对应的完成整内容
- 返回用户最终结果
- 分词器
es中专门处理分词的组件,英文Analyzer,组成
- Character Filters:针对原始文本进行处理,比如去除一些特定标签
- Tokenizer:将原始文本按照一定规则切分为单词
- Token Filters:针对tokenizer处理的单词再加工,如转小写、删除或新增(近义词)等处理
自定义分词器
通过上面三个组成部分实现
-
Character Filters:
- HTML Strip 去除html标签和转换html实体
- Mapping 进行字符替换操作
- Pattern Replace 进行正则匹配替换
-
Tokenizer:将原始文本按照一定规则切分为单词
- standard 按照单词进行分割
- letter 按照非字符类进行分割
- whitespace 按照空格进行分割
- UAX URL Email 按照 standard 分割,但不会分割邮箱和url
- NGram 和 Edge NGram 连词分割
- Path Hierarchy 按照文件路径进行切割
-
Token Filters:针对tokenizer处理的单词再加工,如转小写、删除或新增(近义词)等处理
- lowercase 将所有term转换成小写
- stop 删除stop words
- NGram 和 Edge NGram 连词分割
- Synonym 添加近义词的term