0-日志平台-graylog放弃&ES术语简介
使用的目的:从filebeat采集到kafka的数据,在ELK方案中使用的是logstash落到ES那么在graylog中要实现logstash如下两个重要功能:1.消息体的解析(包含过滤、剔除、提取,转换)2.ES的索引映射,ES作为底层的存储,涉及到日至平台性能,因此这个索引映射和存储要把握住使用的流程:1.input配置,kafka接入extractor提取器:解析json解析message
使用的目的:
从filebeat采集到kafka的数据,在ELK方案中使用的是logstash落到ES
那么在graylog中要实现logstash如下两个重要功能:
1.消息体的解析(包含过滤、剔除、提取,转换)
2.ES的索引映射,ES作为底层的存储,涉及到日至平台性能,因此这个索引映射和存储要把握住
使用的流程:
1.input配置,kafka接入
extractor提取器:
解析json
解析message(不好使)
2.indices、stream配置,ES索引映射写入
ES索引的生成,不能细粒度的控制
3.pipelines配置,删除不符合规则的数据
配置后没有生效
放弃的原因:
就是因为上面的红色部分
1.对于日志内容的过滤、控制转换
2.对于ES存储的控制、配置
这两个核心关注点把控不到,暂时先不使用graylog
ElasticSearch术语
Lucene的核心术语:
术语 |
|
---|---|
词条(Term): |
索引里面最小的存储和查询单元,对于英文来说是一个单词,对于中文来说一般指分词后的一个词。 |
词典(Term Dictionary): | 或字典,是词条Term的集合。搜索引擎的通常索引单位是单词,单词词典是由文档集合中出现过的所有单词构成的字符串集合,单词词典内每条索引项记载单词本身的一些信息以及指向“倒排列表”的指针。 |
倒排表(Post list): | 一个文档通常由多个词组成,倒排表记录的是某个词在哪些文档里出现过以及出现的位置。每条记录称为一个倒排项(Posting)。倒排表记录的不单是文档编号,还存储了词频等信息。 |
倒排文件(Inverted File): | 所有单词的倒排列表往往顺序地存储在磁盘的某个文件里,这个文件被称之为倒排文件,倒排文件是存储倒排索引的物理文件。 |
段(Segment): | 索引中最小的独立存储单元。一个索引文件由一个或者多个段组成。在Luence中的段有不变性,段一旦生成,在其上只能有读操作,不能有写操作。 |
在分段的思想下,对数据写操作的过程如下:
操作 |
|
---|---|
新增: |
当有新的数据需要创建索引时,由于段的不变性,所以会新建一个段来存储新增的数据。 |
删除: | 当有新的数据需要创建索引时,由于段的不变性,所以会新建一个段来存储新增的数据。 |
更新: | 更新的操作其实就是删除和新增操作的组合(delete & insert),先在.del文件中标记旧数据的删除,再在新段中添加一条更新后的数据。 |
段不可变性的优点:
优点 |
|
---|---|
不需要锁: |
因为数据不会更新,所以不用考虑多线程下的读写不一致情况。 |
可以常驻内存: | 段在被加载到内存后,由于具有不变性,所以只要内存的空间足够大,就可以长时间驻存,大部分查询请求会直接访问内存,而不需要访问磁盘,使得查询的性能有很大的提升。 |
缓存友好: | 在段的声明周期内始终有效,不需要在每次数据更新时被重建。 |
增量创建: | 分段可以做到增量创建索引,可以轻量级地对数据进行更新,由于每次创建的成本很低,所以可以频繁地更新数据,使系统接近实时更新。 |
段不可变性的缺点:
缺点 |
|
---|---|
删除: |
当对数据进行删除时,旧数据不会被马上删除,而是在.del文件中被标记为删除。旧数据只能等到段更新时才能真正地被移除,这样会有大量的空间浪费。 |
更新: | 更新数据由删除和新增这两个动作组成。若有一条数据频繁更新,则会有大量的空间浪费。 |
新增: | 由于索引具有不变性,所以每次新增数据时,都需要新增一个段来存储数据。当段的数量太多时,对服务器的资源(如文件句柄)的消耗会非常大,查询的性能也会受到影响。 |
过滤: | 在查询后需要对已经删除的旧数据进行过滤,这增加了查询的负担。 |
为了提升写的性能,Lucene并没有每新增一条数据就增加一个段,而是采用延迟写的策略,每当有新增的数据时,就将其先写入内存中,然后批量写入磁盘中。
若有一个段被写到硬盘,就会生成一个提交点,提交点就是一个用来记录所有提交后的段信息的文件。
一个段一旦拥有了提交点,就说明这个段只有读权限,失去了写权限;
相反,当段在内存中时,就只有写数据的权限,而不具备读数据的权限,所以也就不能被查询了。
因此严格意义上来说,Lucene或者Elasticsearch并不能被称为实时的搜索引擎,只能被称为准实时的搜索引擎。
写索引的流程:
流程 |
|
---|---|
1.暂驻内存: |
新数据被写入时,并没有被直接写到硬盘中,而是被暂时写到内存中。(Lucene默认是一秒钟,或者当内存中数据量达到一定阶段时,再批量提交到磁盘中,默认提交时间和数据量的大小是可以通过参数控制的。通过延时写的策略,可以减少数据往磁盘上写的次数,从而提升整体的写入性能,降低磁盘压力。),此时该内存中的数据不能被检索到。 |
2.持久化: | 在达到触发条件以后,会将内存中缓存的数据一次性写入磁盘中,并生成提交点,此时该段数据可以被检索到。 |
3.释放内存: | 释放内存并等待新的数据写入。 |
通过上面的流程中可以看到,当内存中的数据还没有持久化到磁盘中的时候如果集群出现故障,那么内存中的数据就会丢失无法恢复,因此在Elasticsearch中新增了事务日志用以保证数据安全。
事务日志TransLog
步骤 |
|
---|---|
内存缓存且记录日志: |
当有数据写入时,为了提升写入的速度,并没有数据直接写在磁盘上,而是先写入到内存中,但是为了防止数据的丢失,会追加一份数据到事务日志里。 |
Refresh: | 当达到默认的时间(1秒钟)或者内存的数据达到一定量时,会触发一次Refresh。将JVM中的数据以段的格式缓存到文件系统缓存(操作系统内存)中。 |
Flush: | 当日志数据的大小超过512MB或者时间超过30分钟时,需要触发一次Flush。将文件系统缓存中的段数据同步至磁盘中。 |
更多推荐
所有评论(0)