ELK Stack学习笔记

一、ELK Stack简介

1、Elasticsearch

一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎 Apache Lucene(信息检索的工具jar包)基础上的搜索引擎,使用Java语言编写

2、Logstash

一个完全开源的工具,可以对日志进行收集、过滤,并将其存储供以后使用。
是开源的服务器端数据处理管道,能够从多个来源收集数据、转换数据。并保存到存储库中

3、Kibana

一个开源和免费的工具,它可以为LogstashElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。

4、Filebeat

ELK协议栈的新成员,一个轻量级开源日志文件数据搜集器,基于 Logstash-Forwarder源代码开发,是对它的替代。在需要采集日志数据的 server 上安装Filebeat,并指定日志目录或日志文件后,Filebeat就能读取数据,迅速发送到Logstash进行解析,亦或直接发送到 Elasticsearch进行集中式存储和分析。
在这里插入图片描述
这种结构因为需要在各个服务器上部署 Logstash,而它比较消耗 CPU 和内存资源,所以比较适合计算资源丰富的服务器,否则容易造成服务器性能下降,甚至可能导致无法正常工作。
在这里插入图片描述
基于Filebeat的架构
简单总结一下:ELK = Logstash、Filebeat(收集)+ Elasticsearch(存储 + 搜索)+ kinana(展示)
在这里插入图片描述
ELK日志采集流程

二、Elasticsearch

1、历史
多年前,一个叫做Shay Banon的刚结婚不久的失业开发者,由于妻子要去伦敦学习厨师,他便跟着也去了。在他找工作的过程中,为了给妻子构建一个食谱的搜索引擎,他开始构建一个早期版本的Lucene。
直接基于Lucene工作会比较困难,所以Shay开始抽象Lucene代码以便]ava程序员可以在应用中添加搜索功能。他发布了他的第一个开源项目,叫做“Compass".
后来Shay找到一份工作,这份工作处在高性能和内存数据网格的分布式环境中,因此高性能的、实时的、分布式的搜索引擎也是理所当然需要的。然后他决定重写Compass库使其成为一个独立的服务叫做Elasticsearch。
第一个公开版本出现在2010年2月,在那之后Elasticsearch已经成为Github上最受欢迎的项目之一,代码贡献者超过300人。一家主营Elasticsearch的公司就此成立,他们一边提供商业支持一边开发新功能,不过Elasticsearch将永远开源且对所有人可用。Shay的妻子依旧等待着她的食谱搜索......
2、ES与关系型数据库对比

关系型数据库和Elasticsearch客观对比

Relational DBElasticSearch
数据库indexes(索引)
types(7.x弃用)
documents(文档 )
字段fields(属性)

类型弃用原因

3、ES中的核心概念

1)、index、type、document、field
2)、mappings:映射关系,映射field的字段类型,字段的分词,索引,存储的特性。字段类型自动推断
在实际工作中,我们一般都会提前定义好es当中每个字段的类型,方便于我们后面使用JavaBean来映射索引库里面的数据
字段类型一旦创建之后便无法修改,可以通过reindex解决
索引:是否可以搜索
分词:是否可用字段检索
存储:查询结果是否显示该字段
3)、settings:设置es索引库当中数据的分片数以及副本数
比如有的重要索引,副本数很少甚至没有副本,那么我们可以通过setting来添加副本数
分片数创建之后便无法修改
4)、cluster:集群 es每一个节点叫做一个node,所有的node组织起来就形成了集群的概念
5)、基本数据类型

类型字段
字符串类型text、keyword
数值类型long、integer、short、byte、double、float、half float、scaled float
日期date
布尔boolean
二进制binary
4、Rest风格说明
methodurl地址描述
PUTlocalhost:9200/索引名称/类型名称/文档id创建文档(指定文档id )
POSTlocalhost:9200/索引名称/类型名称创建文档(随机文档id)
POSTlocalhost:9200/索引名称/类型名称/文档id/_update修改文档
DELETElocalhost:9200/索引名称/类型名称/文档id删除文档
GETlocalhost:9200/索引名称/类型名称/文档id查询文档通过文档id
POSTlocalhost:9200/索引名称/类型名称/_search查询所有数据
5、IK分词器

1)、两种分词算法
最粗粒度:ik_smart
最细粒度:ik_max_word
2)、热词更新
修改配置IKAnalyzer.cfg.xml文件

6、分片交互过程

数据究竟写入到哪一个shard去
由系统_id hashCode值 % number of primary shard
根据id查询过程跟写入过程一样
根据条件查询需要查询所有shard,然后根据数据得分值进行排序汇总

三、Logstash

集中、转换和存储数据
Logstash主要有三个组件
input plugins : 主要是用于定义从那些地方采集数据
output plugins : 主要是定义将采集好的数据保存到指定位置
filter plugins : 主要是对收集的数据做加工和格式转换的工作

1、input插件

1)、采集文件数据

.\logstash.bat -f ..\config\monitor_file.conf -t
	input{
	file{ // 采集文件数据 当tomcat.log文件中追加数据
		path => "/export/servers/es/datas/tomcat.log"
		type => "log"
		start_position => "beginning"
	}
}

2)、采集数据库数据

.\logstash.bat -f ..\config\jdbc.conf -t
input{
	jdbc{
		jdbc_driver_library => "F:/ElasticSearch/datas/mysql-connector-java-5.1.48.jar"
		jdbc_driver_class => "com.mysql.jdbc.Driver"
		jdbc_connection_string => "jdbc:mysql://localhost:3306/jdbc"
		jdbc_user => "root"
		jdbc_password => "root"
		
		use_column_value => true
		tracking_column => "id"
		schedule => "* * * * *"
		statement => "select * from t_user where id > :sql_last_value
	}
}

3)、采集系统日志
syslog机制负责记录内核和应用程序产生的日志信息,管理员可以通过查看日志记录来掌控系统状况

2、filter插件

Logstash之所以强悍的主要原因是filter插件,通过过滤器的各种组合可以得到我们想要的结构化数据。
1)、grok正则表达式
grok正则表达式是logstash非常重要的一个环节,可以通过grok非常方便的将数据拆分和索引
语法格式:
(?pattern)
?表示要取出里面的值,pattern就是正则表达式
5.20 今天天气不错

filter{
	grok{
		match => {
			"message" => "(?<date>\d+\.\d+)\s+"
		}
	}
}

提取数据

{
	"@version" => "1",
   	"message" => "5.20 \\xBD\\xF1\\xCC\\xEC\\xCC?\\xC4\\xE1?\\r",
	"@timestamp" => 2022-03-23T13:04:09.070Z,
	"host" => "PC-20210226RHLR",
	"date" => "5.20"
}
3、output插件

1)、标准输出到控制台
将我们收集的数据直接打印到控制台

output{
	stdout{
		codec => rubydebug
	}
}

2)、将采集到的数据保存到文件

output{
	file{
		path => "F:/ElasticSearch/datas/output-%{+YYYY-MM-dd}-%{host}.log"
		codec => line {
			format = "%{message}"
		}
		flush_interval => 0
	}
}

3)、将采集到的数据保存到es

output{
	elasticsearch{
		hosts => "localhost:9200"
		index => "logstash-%{+YYYY.MM.dd}"
	}
}

四、Kibana

Kibana是一个强大的报表展示工具,开源通过Kibana自定义我们的 数据报表展示,实现我们的数据的各种图表查看

1、添加测试数据
curl -H "Content-Type: application/x-ndjson" -XPOST "localhost:9200/bank/account/_bulk?pretty" --data-binary @accounts.json
curl -H "Content-Type: application/x-ndjson" -XPOST "localhost:9200/_bulk?pretty" --data-binary @logs.jsonl

五、ELK综合案例

ELK Stack全量日志查询
在实际工作当中,我们经常会对服务器当中产生的各种日志比较感兴趣,因为产生的日志可以很好的说明我们的服务器的工作状态是否正常,日志的也可以供我们排查各种错误等。所以很多时候我们都会收集各种日志进行汇总,方便我们统一的查看,有了ELK技术栈之后,我们就可以很轻松方便的使用Logstash来进行收集我们的日志数据,然后将数据存储到ES当中,然后通过 Kibana的可视化工具来查看我们的日志数据了
1、rsyslog收集服务器日志数据
2、收集服务器用户操作命令日志
3、采集nginx日志数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值