ELK介绍
- logstash 日志采集、处理、发送给elasticsearch
- elasticsearch 存储数据 提供检索
- kibana 读取ES数据 可视化展示
elasticsearch
Elasticsearch简介:
- Elasticsearch使用Java语言开发,是建立在全文搜索引擎Apache Lucene基础之上的搜索引擎,lucene.apache.org。
- 是一个高度可扩展的开源全文搜索和分析引擎,可实现数据的近实时(Near Real Time、NRT)全文检索。
- 支持分布式以实现集群高可用。
- 高性能、可以处理大规模业务数据。
- 数据以json文档格式存储,基于API接口进行数据读写。
- 对数据实现跨主机分片、分片复制以实现数据跨主机的高可用。
Elasticsearch组成:
-
Node: 存储业务数据的主机,node节点有多种不同的类型。 最少3个节点
-
Cluster: 多个主机组成的高可用Elasticsearch集群环境
-
Document:文档、简称doc,存储在Elasticsearch的数据
-
Index 索引
- 一类相同类型的数据(doc),在逻辑上通过同一个index进行查询、修改与删除等操作。
- A项目的系统日志 和 A项目的业务日志 要分多个Index
- Index1 存放系统日志 Index2 存放业务日志
-
Shard 分片
- 是对Index的逻辑拆分存储,
- 分片可以是一个也可以是多个,多个分片合并起来就是Index的所有数据。
- 分片分散到多个机器 会提升查询效率
-
Replica 副本
- 一个分片的跨主机完整备份,分为主分片和副本分片,
- 数据写入主分片时立即同步到副本分片,以实现数据高可用及主分片宕机的故障转移,
- 副本分片可以读、不能写, 多副本分片可以提高ES集群的读性能
- 只有在主分片宕机以后才会给提升为主分片继续写入数据,并为其添加新的副本分片。
- 分片的数量不要超过主机的总数 否则可能存在性能不足
Elasticsearch分片
Elasticsearch分片及副本
elasticsearch后台
ElasticSearch集群组件及工作机制
Elasticsearch主要节点类型:
data node:数据节点
- 负责数据的存储,如分片(Shard)的创建及删除、 数据的读写、数据的更新、数据的删除等操作。
- 所有节点要求存活
master node:主节点
- 负责index的创建、删除,分片的分配,
- node节点的添加、删除
- node节点宕机时进行将状态通告至其它可用node节点,
- 一个ES集群只有一个活跃的master node节点, 其它master备用节点 等master宕机后进行新的master的竞选。
client node/coordinating-node:客户端节点或协调节点
- 将数据读写请求 转发data node
- 将集群管理相关的请求 转发到 master node
- 客户端节点只作为集群的访问入口、其不存储任何数据,也不参与master角色的选举。
Ingest节点:预处理节点
在检索数据之前可以先对数据做预处理 操作(Ingest pipelines,数据提取管道),可以在管道对数据实现对 数据的字段删除、文本提取等操作。
- 所有节点其实默认都是支持 Ingest 操作的,也可以专门将某个 节点配置为 Ingest 节点
elasticsearch 角色配置
配置示例
node.master: [master data]
elasticsearch API介绍
kibana
Kibana为elasticsearch提供一个查看数据的web界面,其主要是通过elasticsearch的API接口进行数据查找,并进行前端数据可视化的展现,另外还可以针对特定格式的数据生成相应的表格、柱状图、饼图等。
Logstash
Logstash是一个具有实时传输能力的数据收集与处理组件,其可以通过插件实现各场景的日志收集、日志过滤、日志处理及日志输出,支持普通log、json格式等格式的日志解析,处理完成后把日志发送给elasticsearch cluster进行存储
安装
wget https://artifacts.elastic.co/downloads/logstash/logstash-8.10.4-amd64.deb
apt-get install ./logstash-8.10.4-amd64.deb
ls /usr/share/logstash/bin/logstash
账号是superuser 密码是rootroot
vim /etc/logstash/conf.d/syslog-to-es.conf
input {
file {
path => "/var/log/syslog"
stat_interval => "1"
start_position => "beginning"
type => "syslog"
}
file {
path => "/var/log/auth.log"
stat_interval => "1"
start_position => "beginning"
type => "authlog"
}
}
output {
if [type] == "syslog" {
elasticsearch {
hosts => ["172.31.7.101:9200"]
index => "magedu-app1-syslog-%{+yyyy.MM.dd}"
user => "superuser"
password => "rootroot"
}}
if [type] == "authlog" {
elasticsearch {
hosts => ["172.31.7.101:9200"]
index => "magedu-app1-authlog-%{+yyyy.MM.dd}"
user => "superuser"
password => "rootroot"
}}
}
sudo /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/syslog-to-es.conf -t
systemctl start logstash
systemctl enable logstash
systemctl status logstash
solr
solr项目也是基于开源搜索引擎Lucene、发布时间比elasticsearch更早,solr提供支持全文索引、分片、副本集、负载均衡和自动故障转移和恢复功能,与elasticsearch的区别在于Solr专注于文本搜索、而Elasticsearch则常用于查询、过滤和分组分析统计,目前有很多业务场景也在使用solr。