[ElasticSearch]-初识Elastic Stack
森格 | 2022年11月
本文是第一次接触Elasticsearch的一些个人总结,介绍了Elastic Stack,如有错误之处,敬请指正。
一、ELK 到 Elastic Stack
注:上图来源于Elasticsearch中文博客
ELK分别是Elasticsearch、Logstash、Kibana的简称,发展过程中又加入Beats,形成了Elastic Stack开源技术栈。
简单来说,这家族的四大项目功能大致是:
1) Beats:是一款用于采集系统监控数据的代理agent,是在监控服务器上以客户端运行的数据收集器的统称。
2)Logstack:是基于Java的一款用于收集、分析和存储日志的工具。
3)Elasticsearch:处于Elasticsearch的核心位置,对数据快速地进行搜索以及分析。
4)Kibana:是基于node.js,负责数据展示,可以汇总、分析和搜索重要的数据日志。
小结
二、Elastic Stack
2.1 Beats
被官方称为 Lightweight Data Shipper(轻量级数据传送者),分类如下:
- Filebeat 日志文件:主要是针对日志文件来说的。
- Metricbeat 度量数据:主要收集CPU、内存、磁盘、服务器软件(such as Nginx and MySQL)等数据。
- Packetbeat 网络数据:可以对网络数据进行抓包。
- Winlogbeat Windows数据:针对windows系统日志数据。
- Heartbeat 健康检测。
下面来简单介绍下Filebeat 与 Packetbeat 。
2.1.1 Filebeat
1)Filebeat构成
由 input(输入) 和 harversters(收集器) 构成,一个输入可以对应多个日志文件,同时会为每个文件启动一个收集器。
2)Filebeat 的处理能力
Input 时处理:
- Include_lines 达到条件读入这些行
- exclude_lines 达到条件不读
- exclude_files 文件名符合条件时不读取文件
Output 前处理–Processor:
- drop_event 满足条件时不输出扔掉
- drop_fields 扔掉某个字段
- Decode_json_fields 整条数据中符合json的字段做json解析
- Include_fields 取某个字段
3)Filebeat 输入配置
- 使用yml语法
- input_type:log、stdin
4)Filebeat 输出配置
- Console(标准输出)
- Elasticsearch
- Logstash
- Kafka
- Redis
- File
2.1.2 Packetbeat
1)功能
- 实时抓取网络包
- 自动解析应用层协议:
- ICMP
- DNS
- HTTP
- MySQL
- Redis
- 等同Wireshark
2)配置
# 指定网卡
packetbeat.interfaces.device:any # linux系统下可以设置为any,去捕捉所有的网卡
# 表示抓取对应的网络协议的数据包
packetbeat.prtocols
# beat的输出配置
output.console:
pretty:true
2.2 Logstash
1)功能
官方给出的定义为
Logstash is an open source, server-side data porcessing pipeline that ingests data from a multitude of sources simultanepously, transforms it, and then sends it to your favorite “stash”.
也就是一款ETL(Extract、Transform、Load)工具。
2)处理流程
- input:可以从 File、Redis、Beats、Kafka等读取数据。
- filter:gork、mutate、drop、data。
- Gork:基于正则表达式提供了丰富可重用的模式,基于此可以将非结构化数据做结构化处理。
- Data:将字符串类型的时间字段转换为时间戳类型,方便后续数据处理。
- Mutate:进行增删改查的相关处理。
- output:可以向stdout、elasticsearch、Redis、Kafka等中输出。
2.3 Kibana
1)CRUD操作
格式: /{index}/_doc/{id}
# 增加 #
POST /account/job/1
{
"name":"liang",
"lastname":"sen",
"job_description":"elasticsearch"
}
# 查询
GET /account/job/1
# 更新
POST /account/job/1/_update
{
"doc":{
"job_description":"Redis"
}
}
# 删除
DELETE /account/job/1
2)Demo
下面一起创建一个文档,再对其更新,删除,之后再次查询
Kibana语言设置(修改配置文件):
点击左侧开发工具:
2.4 Elasticsearch
1)常用术语
- Document 文档数据:等同于MySQL库的一条记录。
- Index 索引:等同于MySQL的一个数据库。
- Type 索引中的文档数据:等同于MySQL库的表。
- Filed 字段,文档的属性:等同于MySQL库的表字段。
- Query DSL 查询语法:等同于MySQL的查询语法。
2)Query
两种格式:
- Query String
GET /account/job/_search?q=liang
- Query DSL
GET /account/job/_search
{
"query":{
"match":{
"name":"liang"
}
}
}
三、总结
本文主要对 Beats、Logstash、Kibana、Elasticsearch做了初步介绍,后续会对Elastic Stack做深入学习,以上内容如有不妥,敬请指正。
最后,在这里附上几个学习路径:
ES官方文档:https://www.elastic.co/guide/index.html
ES中文社区: https://elasticsearch.cn
ES中文社区日报(部分内容需要梯子):https://elasticsearch.cn/explore/category-18