Windows10使用ELK入门学习
什么是ELK?
ELK实际上是三个工具的集合,Elasticsearch + Logstash + Kibana,这三个工具组合形成了一套实用、易用的监控架构,很多公司利用它来搭建可视化的海量日志分析平台。
1、Elasticsearch:
ElasticSearch是一个基于Lucene的开源分布式搜索服务器。只搜索和分析日志。
特点:分布式,零配置,自动发现,索引自动分片,索引副本机制等。它提供了一个分布式多用户能力的全文搜索引擎。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
在elasticsearch中,所有节点的数据是均等的。
Elasticsearch大版本区别:
5.x 支持多种type
6.x 只能有一种type
7.x 将去除type 没有类型的概念了
2、Logstash:
Logstash是一个完全开源工具,可以对你的日志进行收集、过滤、分析,并将其存储供以后使用只收集和过滤日志,和改格式。
Logstash的事件(logstash将数据流中等每一条数据称之为一个event)处理流水线有三个主要角色完成:inputs –> filters –> outputs。
logstash整个工作流分为三个阶段:输入、过滤、输出。每个阶段都有强大的插件提供支持。
Input 必须,负责产生事件(Inputs generate events),常用的插件有:
- file 从文件系统收集数据
- syslog 从syslog日志收集数据
- redis 从redis收集日志
- beats 从beats family收集日志(如:Filebeats)
Filter常用的插件有, 可选,负责数据处理与转换(filters modify )
- grok是logstash中最常用的日志解释和结构化插件。grok是一种采用组合多个预定义的正则表达式,用来匹配分割文本并映射到关键字的工具
- mutate 支持事件的变换,例如重命名、移除、替换、修改等
- drop 完全丢弃事件
- clone 克隆事件
output 输出,必须,负责数据输出(outputs ship elsewhere),常用的插件有
elasticsearch 把数据输出到elasticsearch
file 把数据输出到普通的文件
3、Kibana:
Kibana 是一个基于浏览器页面的Elasticsearch前端展示工具,也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮你汇总、分析和搜索重要数据日志。
Elasticsearch 官方文档
Elasticsearch 官方文档:https://www.elastic.co/guide/index.html
Elasticsearch+Logstash+Kibana下载
中文社区下载地址:https://elasticsearch.cn/download/
github上下载地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch
github上下载ik中文分词器地址:https://github.com/medcl/elasticsearch-analysis-ik/releases
中文社区Elasticsearch目前下载提供的版本:
中文社区Logstash目前下载提供的版本:
中文社区Kibana目前下载提供的版本:
github提供的下载要比中文社区多几个小版本:
上面图片框起来的都是windows版本,Linux或者Mac有需要可以自行下载对应版本。这里需要注意的是Elasticsearch+Logstash+Kibana三者下载的版本必须保持一致,如果你Elasticsearch下载的是7.10.2版本,Logstash和Kibana也应该下载7.10.2版本。
我这里就先下载中文社区提供的7.10.2版本来进行学习。
下载完成后,先将这四个文件解压到当前目录。
然后先去elasticsearch-7.10.2文件夹里面
在plugins文件夹里面创建一个analysis-ik文件夹放elasticsearch-analysis-ik-7.10.2解压后的文件,也就是中文分词器。
Elasticsearch+Logstash+Kibana使用
为了方便我们的访问和连接 Elasticsearch,也需要进入 Kibana的 config 目录对 Kibana 进行配置。
我们先去kibana-7.10.2-windows-x86_64文件夹里面的config文件夹下面修改一下kibana.yml的配置
配置只需要改这三个就好,原来打开是注释的。
因为我们是在win10里面安装的,所以我们直接双击elasticsearch.bat启动即可。当然前提是你电脑配置好了jdk,我这里的jdk版本是1.8。
看到这说明启动成功了
然后我们去浏览器输入http://localhost:9200/可以看到对应的版本信息
然后我们在去kibana-7.10.2-windows-x86_64文件夹里面的bin文件夹,双击kibana.bat启动kibana。
看到这说明启动成功
然后我们去浏览器访问该地址http://localhost:5601/进入kibana界面
点击Dev tools来对es进行操作。
ES 的基本概念
_index
- 含义:此文档属于哪个索引
- 原则:类似数据放在一个索引中。数据库中表的定义规则。如图书信息放在book索引中,员工信息放在employee索引中。各个索引存储和搜索时互不影响。
- 定义规则:英文小写。尽量不要使用特殊字符。
_type
- 含义:类别。
- 注意:es7.x之后的版本将彻底删除此字段。不需要关注。见到_type都为doc。
_id
- 含义:文档的唯一标识。就像表的id主键。结合索引可以标识和定义一个文档。
_document
- 含义:类似数据库里面的数据行。比如说数据库id为1的整条数据可以理解为就是document,或者可以说当前数据库某个单表的所有数据。
ES 使用kibana创建索引,常见的增删改查
使用put enjoy_test创建一个index为enjoy_test的索引
查看索引,使用命令get enjoy_test
添加文档,添加了一个id为1的文档,这是手动添加文档id,文档内容是msg
PUT /enjoy_test/_doc/1
{
“msg”:“Hello World!”
}
自动添加文档id,使用post命令,id是一个不会重复的随机数。使用 GUID 算法,可以保证在分布式环境下,不同节点同一时间创建的_id一定是不冲突的,文档内容是message
POST /enjoy_test/_doc
{
“message”:“Hello World!”
}
查看文档,get /enjoy_test/_doc/1
更新
覆盖式更新,原本id为1的msg内容变为下面这个
PUT /enjoy_test/_doc/1
{
“name”:“zs”,
“title”:“张三”,
“age”:18,
“created”:“2020-01-01”
}
修改文档里面的某些字段
POST /enjoy_test/_doc/1/_update
{
“doc”:{
“age”:20
}
}
将原来的age=18修改为20,如果修改的字段不存在,会自动新增该字段
删除
删除enjoy_test里面的id为k34sIHgBtDEzwRaUC6d4的数据
DELETE /enjoy_test/_doc/k34sIHgBtDEzwRaUC6d4
发现已经删除了,只有一条记录了。
测试ik中文分词器
ik_smart分析器,粗颗粒分词
ik_max_word 分析 细颗粒分词,穷尽所有组合。
注意:
ik_max_word: 会将文本做最细粒度的拆分,比如会将“我是一个程序员”拆分为“我,是,一个,一,个,程序员,程序,员”,会穷尽各种可能的组合;
ik_smart: 会做最粗粒度的拆分,比如会将“我是一个程序员”拆分为“我,是,一个,程序员”;
ik_max_word更多的用在做索引的时候,但是在搜索的时候,对于用户所输入的query(查询)词,我们可能更希望得比较准确的结果,例如,我们搜索“花果山”的时候,更希望是作为一个词进行查询,而不是切分为"花",“果”,“山”三个词进行结果的搜索,因此ik_smart更加常用语对于输入词的分析。
ES使用Kibana简单的增删改查例子
#### 例子来简单介绍一下ES的增删改查 ####
# 新建一个test索引,里面有四个字段
PUT /test
{
"mappings": {
"properties": {
"title":{
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart"
},
"name":{
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart"
},
"age":{"type": "integer"},
"created":{
"type": "date",
"format": "strict_date_optional_time||epoch_millis"
}
}
},
"settings": {
"index":{
"number_of_shards":1,
"number_of_replicas":0
}
}
}
#### 查询 ####
# 查看test的settting
GET /test/_settings
# 查看test的mapping
GET /test/_mapping
# 查询test里面主键为1的内容
GET /test/_doc/1
# 查询test里面主键为1的age字段的内容
GET /test/_doc/1?_source=age
# 查询test里面的所有内容
GET /test/_search
{
"query": {
"match_all": {
}
}
}
# 根据name来查询,不会模糊查询
GET /test/_search
{
"query": {
"match": {
"name": "zs"
}
}
}
# 排序查询
GET /test/_doc
{
"query":{
"match": {
"name": "ww"
}
},
"sort":[
{
"date":{
"order":"desc"
}
}
]
}
# 附带分页的查询方式
GET /test/_search
{
"query": {
"match_all": {
}
},
"from": 0,
"size": 3
}
#### 增加 ####
# 往test里面写数据
PUT /test/_doc/5
{
"name":"zw",
"title":"张五",
"age":28,
"created":"2020-11-01"
}
#### 修改 ####
# 覆盖式更新
PUT /test/_doc/1
{
"name":"zs",
"title":"张三",
"age":18,
"created":"2020-01-01"
}
# 修改文档里面的某些字段
POST /test/_doc/1/_update
{
"doc":{
"age":20
}
}
#### 删除 ####
# 删除test里面的主键为FOHEW3ABPeUHy0w_4ugQ的数据
DELETE /test/_doc/FOHEW3ABPeUHy0w_4ugQ