ElasticStack
2023-08-21 21:06:13 1 举报
AI智能生成
123456789
作者其他创作
大纲/内容
Kafka
MQ介绍
优势
1.应用解耦
2.异步提速
3.削峰填谷
劣势
1.可用性降低
外部依赖较多,稳定性差,容易宕机
解决方案:部署高可用
2.复杂度提高
数据容易丢失
期望特点
1.数据吞吐量高
2.系统支持高可用集群
3.数据安全性高
数据的访问安全
数据的存储安全
产品及选择
RabbitMQ
优点
小写可靠性高,功能全面
缺点
数据吞吐量低,消息的积累会影响性能
erlang语言不好定制
国内相关开发人员较少
应用场景
小规模场景
RocketMQ
优点
数据吞吐量高
高性能
高可用
功能较为全面
缺点
开源版功能较少
官方文档简单
客户端仅支持java
应用场景
几乎全场景
Kafka
优点
吞吐量大,性能完善
含集群高可用服务
缺点
维护较为复杂
数据均衡和迁移比较麻烦
应用场景
日志分析,大数据实时采集
工作模式
点对点
一对一的服务
消费者主动拉取数据,数据会被删除
发布/订阅模式
一对多
消费者拉取数据后,数据会保留
pull 拉取
优点
消费者程序可以根据自身的硬件配置去broker消费
缺点
消费者需要长期执行一个进程来询问broker是否有数据
push 推送
优点
无需客户端主动拉去数据,而是由服务端主动发送数据,典型的应用场景
缺点
broker推送数据给消费者是,可能因为消费者消费能力不足,直接导致客户端程序崩溃掉;
broker内部需要维护一个订阅者列表,当订阅者较多时,可能会很占用内存哟;
部署
单点部署
集群部署
配置文件
config/server.properties
broker.id=
指定kafka实例的唯一ID标识,必须是一个整数。
zookeeper.connect=
指定kafka存储数据的zookeeper集群地址
命令
启动
kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties
关闭
kafka-server-stop.sh
常见术语
producer 和 consumer
producer
生产者
负责将数据写入到kafka集群
kafka集群的客户端角色
其状态不会用影响到kafka集群状态
consumer
消费者
负载从kafka集群拉取数据
Consumer Group
消费者组
一个消费者组至少有一个消费者或多个消费者
kafka的消费者是基于组来消费的。
同一个消费者组的消费者不能同时对同一个topic的partition的数据进行消费。
topic,partition,replica
topic
主题
是一个逻辑名称,实际工作中应对应业务名称
partition
分区
逻辑名称
一个topic主题至少对应一个和多个分区
replica
副本数量
是topic和paritition的实际结晶
负责数据的存储
leader follower
leader
负责数据的读写
是kafka集群的主节点
当leader挂掉后,follower会成为新的leader,接管数据的读写
follower
从节点
只负责从leader中同步数据
并不会被producer和consumer发现
当leader挂掉后,follower会成为新的leader,接管数据的读写
ISR OSR 和 AR
ISR
是和leader副本数据相同的所有副本集合。
可以理解为该列表中所有副本数据是一样的。
当ISR列表中有与leader数据不一致的副本时,该副本会被提出该列表
ISR列表中的副本会优先被选举为leader
OSR
是和leader副本数据不相同的所有副本集合
AR
是ISR+OSR=AR,代表的是所有副本。
offset,LEO,HW
offset
偏移量
用于表示数据的位置点,消费者可以记录offset来标识自己在某个分区中消费的位置点
LEO
Log End Offset
表示一个分区数最后一个位置的offset。
HW
hig Water,高水位线,
表示该ISR列表中最小的LEO
集群的基础应用
命令
kafka-topics.sh --bootstrap-server
topic管理
创建
参数
--create
语法:
kafka-topics.sh --bootstrap-server + 集群名单 --create --topic + 主题名称
指定partition分区数
--partitions + 分片数
指定replica副本数
-replication-factor +副本数
创建topic时,副本数量不得大于存活的节点数
查询
查看集群topic列表
参数: --list
语法:
kafka-topics.sh --bootstrap-server + 集群列表 --list
查看集群topic的详细信息
参数: --describe
语法:
kafka-topics.sh --bootstrap-server + 集群列表 --describe
查看指定topic的详细信息
参数
--describe --topic
语法:
kafka-topics.sh --bootstrap-server + 集群列表 --describe --topic + topic名称
修改
参数
--alter
语法:
kafka-topics.sh --bootstrap-server + 集群列表 --topic + 指定主题 --alter +修改内容
注意:
1.修改分区数时,只能改大不能改小
2.修改副本数量,需要重新生成计划
参考连接:https://www.cnblogs.com/yinzhengjie/p/9808125.html
删除
参数
--delete
语法:
kafka-topics.sh --bootstrap-server + 集群列表 --delete --topic + topic名称
生产者和消费者
生产者
启动
kafka-console-producer.sh --bootstrap-server 10.0.0.92:9092 --topic linux87-001
消费者
启动
kafka-console-consumer.sh --bootstrap-server 10.0.0.93:9092 --topic linux87-001
参数
--from-beginning
消费者从头开始读取数据
消费者组
命令
kafka-consumer-groups.sh --bootstrap-server
查看
查看消费者列表
--all-groups --list
查看所有消费者组的详细信息
--all-groups –describe
查看指定消费者组的详细信息
--describe --group + topic
基于配置文件指定消费者组
配置文件
config/consumer.properties
group.id=(topic指定主题)
基于命令行方式指定消费者组
kafka-console-consumer.sh --bootstrap-server 10.0.0.92:9092 --topic oldboyedu-linux87 --consumer-property group.id=linux87
kafka集群压力测试
概述:
所谓压力测试就是对一个集群的处理能力的上限做一个评估。为将来集群扩容提供有效的依据。
子主题
技术栈介绍
概述
ElasticStack是elatic公司推出的一些列技术栈,早期有一个比较响亮的名字叫"ELK"用于日志采集系统,后续由于对该组件的扩充,引入很多新的组件,比如beats,xpack及云原生相关的组件,最终统称为elasticstack
架构
ELK架构
EFK架构
EFLK架构
ELFK架构升级版
ElasticSearch
集群部署
RPM部署
单点部署
1.下载elasticsearch的rpm包
可通过官网下载:wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.5-x86_64.rpm
2. 进行安装
rpm -ivh elasticsearch-7.17.5-x86_64.rpm
yum localinstall -y elasticsearch-7.17.5-x86_64.rpm
3.修改配置文件:/etc/elasticsearch/elasticsearch.yml
指定服务的数据目录地址
/var/lib/elasticsearch
指定服务的日志目录地址
/var/log/elasticsearch
指定监听的地址
单点部署监听:本机的公网ip
此时本地ip:10.0.0.91
指定当前集群的地址列表
本地公网地址:10.0.0.91
4.启动elasticsearsh服务
通过systemctl文件启动服务,并设置开机自启动
systemctl enable --now elasticsearch
5.连接调试
访问elasticsearch的WebUI地址
可通过浏览器访问或虚拟机curl访问测试
curl http://10.0.0.91:9200/
10.0.0.91:9200
集群部署
部署方式
1.先单节点部署,再将配置分发到其余节点
2.多节点共同部署,可通过ansible实现
部署流程
1.下载elasticsearch的rpm包
可通过官网下载:wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.5-x86_64.rpm
2. 进行安装
rpm -ivh elasticsearch-7.17.5-x86_64.rpm
yum localinstall -y elasticsearch-7.17.5-x86_64.rpm
3.配置本地hosts解析,使多节点间可以互联
ip+主机名
配置文件:/etc/hosts
4.修改配置文件,配置集群
配置文件:/etc/elasticsearch/elasticsearch.yml
具体配置:
指定集群的名字
oldboyedu-linux87
指定服务的数据存放目录
/var/lib/elasticsearch
指定服务的日志存放目录
/var/log/elasticsearch
指定监听的地址
由于此时部署的是集群,那么要指定多节点的ip地址
0.0.0.0 ---->设置最大监听ip地址
指定当前的集群地址列表
由于集群间做了hosts解析,那么列表可设置主机名或节点的ip地址
["elk91","elk92","elk93"]
["10.0.0.91","10.0.0.92","10.0.0.93"]
指定集群的master(主节点)选举列表
由于集群间做了hosts解析,那么列表可设置主机名或节点的ip地址
["elk91","elk92","elk93"]
["10.0.0.91","10.0.0.92","10.0.0.93"]
5.启动elasticsearch服务的集群
通过systemctl文件启动服务,并设置开机自启动
systemctl enable --now elasticsearch
6.检查调试
可分别访问节点
curl 10.0.0.91:9200
curl 10.0.0.92:9200
curl 10.0.0.93:9200
检查访问结果的uuid是否一致
如果一致,代表集群部署成功
如果不一致,那么代表集群部署失败,排查分析
也可访问集群
curl 10.0.0.91:9200/_cat/nodes
查看集群状态
二进制部署
二进制单点部署
概述:
单台服务器进行二进制方式部署elasticsearch
部署流程
1.下载elasticsearch的软件包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.5-linux-x86_64.tar.gz
2.创建运行elasticsearch服务的用户
说明:由于elasticsearch服务不能由root用户运行
useradd -u 1000 oldboyedu
3.创建部署elasticsearch服务的目录
mkdir -pv /oldboyedu/{softwares,data,logs}
install -d /oldboyedu/{logs,data}/es7 -o oldboyedu -g oldboyedu
4.解压elasticsearch服务的软件包到指定目录
tar xf elasticsearch-7.17.5-linux-x86_64.tar.gz -C /oldboyedu/softwares/
5.给elasticsearch服务创建符号链接,遮掩服务的版本信息
cd /oldboyedu/softwares/ && ln -svf elasticsearch-7.17.5 elasticsearch
6.修改服务的配置文件
配置文件地址
:/oldboyedu/softwares/elasticsearch/config/elasticsearch.yml
修改
指定ES集群名称
oldboyedu-linux87
指定服务的数据目录
/oldboyedu/data/es7
指定服务的日志目录
/oldboyedu/logs/es7
指定服务监听的地址
0.0.0.0
指定当前集群的地址列表
["10.0.0.91"]
指定当前集群的master(主节点)选举列表
["10.0.0.91"]
7.修改服务目录/文件的权限为指定的普通用户
chown oldboyedu:oldboyedu -R /oldboyedu/softwares/elasticsearch/*
8.配置资源限制
配置文件:/etc/security/limits.d/es.conf
内容:根据服务的要求进行配置
* soft nofile 65535
* hard nofile 131070
* soft nproc 4096
* hard nproc 8192
查看: ulimit -a
配置生效
退出重连xhell即可
参考模版://etc/security/limits.conf
9.修改内核参数,符合服务运行的要求
配置文件:/etc/sysctl.d/es.conf
配置文件模版:/etc/sysctl.conf
查看: sysctl -a
生效: sysctl -p +配置文件的绝对路径
10.配置环境变量/systemctl文件
配置环境变量
路径:/etc/profile.d/es.sh
配置详解:/etc/profile
systemctl文件
路径:/usr/lib/systemd/system/es7.service
11.启动服务
通过环境变量启动
su - oldboyedu -c 'elasticsearch -d' 后台运行
通过systemctl启动
systemctl daemon-reload 加载配置
systemctl enable --now es7.service
12.访问调试
查看进程
ps -ef|grep java
查看端口
ss -lntup
检查:9200 9300
访问WebUI
curl 10.0.0.91:9200
二进制集群部署
概述
多节点通过二级制方式部署elasticsearch服务
部署方法
手动部署
自动通过ansible部署
部署流程:多节点部署
1.下载elasticsearch的软件包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.5-linux-x86_64.tar.gz
2.创建运行elasticsearch服务的用户
说明:由于elasticsearch服务不能由root用户运行
useradd -u 1000 oldboyedu
3.创建部署elasticsearch服务的目录
mkdir -pv /oldboyedu/{softwares,data,logs}
install -d /oldboyedu/{logs,data}/es7 -o oldboyedu -g oldboyedu
4.解压elasticsearch服务的软件包到指定目录
tar xf elasticsearch-7.17.5-linux-x86_64.tar.gz -C /oldboyedu/softwares/
5.给elasticsearch服务创建符号链接,遮掩服务的版本信息
cd /oldboyedu/softwares/ && ln -svf elasticsearch-7.17.5 elasticsearch
6.修改服务的配置文件
配置文件地址
:/oldboyedu/softwares/elasticsearch/config/elasticsearch.yml
修改
指定ES集群名称
oldboyedu-linux87
指定服务的数据目录
/oldboyedu/data/es7
指定服务的日志目录
/oldboyedu/logs/es7
指定服务监听的地址
0.0.0.0
指定当前集群的地址列表
["10.0.0.91","10.0.0.92","10.0.0.93"]
指定当前集群的master(主节点)选举列表
["10.0.0.91","10.0.0.92","10.0.0.93"]
7.修改服务目录/文件的权限为指定的普通用户
chown oldboyedu:oldboyedu -R /oldboyedu/softwares/elasticsearch/*
8.配置资源限制
配置文件:/etc/security/limits.d/es.conf
内容:根据服务的要求进行配置
* soft nofile 65535
* soft nproc 4096
* hard nofile 131070
* hard nproc 8192
参考模版://etc/security/limits.conf
查看: ulimit -a
配置生效
退出重连xhell即可
9.修改内核参数,符合服务运行的要求
配置文件:/etc/sysctl.d/es.conf
配置文件模版:/etc/sysctl.conf
查看: sysctl -a
生效: sysctl -p +配置文件的绝对路径
10.配置环境变量/systemctl文件
配置环境变量
路径:/etc/profile.d/es.sh
配置详解:/etc/profile
systemctl文件
路径:/usr/lib/systemd/system/es7.service
11.启动服务
通过环境变量启动
su - oldboyedu -c 'elasticsearch -d' 后台运行
通过systemctl启动
systemctl daemon-reload 加载配置
systemctl enable --now es7.service
12.访问调试
查看进程
ps -ef|grep java
查看端口
ss -lntup
检查:9200 9300
访问WebUI
curl 10.0.0.91:9200/_cat/nodes
curl 10.0.0.92:9200/_cat/nodes
curl 10.0.0.93:9200/_cat/nodes
检查集群的uuid是否一致
多实例部署
概述:
基于节点已经运行了一个版本的elasticsearch服务,再搭建其余版本的elasticsearch服务
二进制部署流程
1.下载二进制的elasticsearch其余版本软件包
2.解压软件包到服务部署目录
3.创建服务专属的数据目录和日志目录
4.修改服务的配置文件
由于是多实例,不能和原节点的端口发生冲突
配置
端口指定
http.port:
监听的端口号,web页面,走的http/https协议。
transport.tcp.port:
集群内部数据传输端口,走的是tcp协议
cluster.name:
指定集群名称
node.name:
节点的名称,配置为主机名
path.data:
数据目录
path.logs:
日志目录
network.host:
监听地址
discovery.zen.ping.unicast.hosts:
集群的数据广播节点
discovery.zen.minimum_master_nodes:
参与master选举的投票数量,建议是集群的半数以上,以防止脑裂。
5.所有节点配置运行服务所需的JDK环境
根据服务的版本选择服务支持的JDk版本
JDk版本
oracle版的JDK
openjdk
6.编写启动服务的systemctl配置
/usr/lib/systemd/system/es6.service
添加参数
指定jdk运行
Environment=JAVA_HOME=/oldboyedu/softwares/jdk1.8.0_291
指定资源限制
LimitNOFILE=131070
LimitNPROC=8192
7.部署方式
单节点部署,再同步到其他节点
多节点一起部署,通过ansible自动化部署
8.修改配置文件的主机名和服务目录的权限
9.启动服务
systemctl daemon-reload
systemctl enable--now es6.service
10.访问调试
docker部署
1.安装所需的docker环境
2.基于docker部署ES服务
3.访问ES服务容器的WebUI
集群异常处理流程
首先关闭已经运行的服务
kill `ps -ef | grep 'elasticsearch' | awk '$3==1 {print $2}'`
检查服务是否关闭
检查进程
ps -ef|grep java
检查端口
ss -lntup
删除服务默认的数据缓存
rm -rf /oldboyedu/logs/es7/* /oldboyedu/data/es7/* /tmp/*
重新启动服务查看
分析日志-排查故障方法
查看指定服务的详细状态信息
systemctl status +服务 -l
journalctl -u + 服务
查看具体服务的日志分析
tail -100f /oldboyedu/logs/es7/oldboyedu-linux87.log
查看系统日志分析
tail -100f /var/log/messages
手动启动服务,观察日志输出
索引及相关术语
术语
_index
索引名称,是数据存储的逻辑单元
_shards
数据分片,真正存储数据的地方,分为2类:
分类
primary shard
主分片,负责数据的读写。
replica shard
副本分片,负责数据的读取的负载均衡
_document
文档,真是存储数据的单元。
客户端
通过API管理ES集群
集群状态
green
集群处于健康状态,所有的主分片和副本分片均可以正常访问。
yellow
集群处于亚健康状态,有部分副本分片无法正常访问。
red
集群处于不健康状态,有部分主分片无法正常访问,一般情况下不会出现
在数据量较大的时候,ES启动时可能会短暂出现
客户端工具
postman
ES-head
KIbana
API 接口
请求
GET
POST
PUT
DELETE
模块
_search
查找
_bulk
文档的批量写操作
_mget
文档的批量的读操作
_template
索引模版
_reindex
数据迁移
JSON语法
基本数据类型
字符串
"字母/数字"
数字类型
纯数字
布尔值
true
false
空值
null
高级数据类型
数组
["oldboyedu",9.18,2023,true,false,null]
对象
{"name": "Jason Yin","age":18}
{"name": "oldboy","age":45,"hobby":["抖音","Linux","象棋"]}
{"name": "李导","hobby":["骑行","做饭"]}
DSL查询语句
概述:
Elasticsearch提供了基于JSON的完整Query DSL(Domain Specific Language,领域特定语言)来定义查询。
语句
全文检索
match
对匹配的条件会进行拆分匹配
完全匹配
match_phrase
将匹配的条件当做整体匹配
全量查询
mach_all
请求体可以不写,默认是全量查询
分页查询
size-from
size
指定每页显示多少条数据,默认值为10.
from
指定跳过数据偏移量的大小,默认值为0,即默认看第一页。
查询指定页码的from值 = "(页码 - 1) * 每页数据大小(size)"
生产环境中,不建议深度分页,百度的页码数量控制在76页左右。
查看的指定字段
_source
用于指定查看"_source"对象的指定字段
查询存在某个字段的文档
exists
判断某个字段是否存在
若存在则返回该文档,
若不存在,则不返回文档子主题
语法高亮
highlight
相关参数信息
highlight
设置高亮
fields
指定对哪个字段进行语法高亮
pre_tags
自定义高亮的前缀标签
post_tags
自定义高亮的后缀标签
基于字段排序
sort
字段说明
sort
基于指定的字段进行排序。
order
指定排序的规则
asc:升序
desc:降序
多条件查询
bool
可以匹配多个条件查询
参数信息
must
必须匹配的条件
must_not
必须不匹配的条件,即和must相反
should
不是必要条件,满足其中之一即可
可以使用"minimum_should_match"来限制满足要求的条件数量。
支持数字和百分比,比如:"2"或者"67%"。
精确匹配多个值
terms
范围查询
filter
过滤数据
相关字段
range
基于范围进行过滤
常见的操作符
gt:大于
lt:小于
gte:大于等于
lte:小于等于
多词搜索
quary
指定词汇范围
operator
and
包含quary指定的所有字段
or
含有quary指定的字段即可
权重查询
boost
修改boost的值提升相应的字段的权重
权重高优先搜索
聚合查询
agges
多个条件共同查询
可与函数搭配使用
max
最大值
min
最小值
avg
平均值
sum
求和
API集群迁移
概述:基于ES集群的数据迁移
同一集群间的迁移
ES7集群间的数据迁移
不同进群的跨集群迁移
ES6集群到ES7集群的数据迁移
配置好ES7集群的白名单
可以使ES7访问ES6
reindex.remote.whitelist: "*:*"
elasticsearch.yml
数据映射
数据类型
概述
当写入文档时,字段的数据类型会被ES动态自动创建,但有的时候动态创建的类型并符合我们的需求。这个时候就可以使用映射解决
使用映射技术,可以对ES文档的字段类型提前定义我们期望的数据类型,便于后期的处理和搜索
数据类型
text
全文检索,可以被全文匹配,即该字段是可以被拆分的。
keyword
精确匹配,必须和内容完全匹配,才能被查询出来
ip
支持Ipv4和Ipv6,将来可以对该字段类型进行IP地址范围搜索。
index
true
可以被搜索
false
不能被搜索
ES集群理论
面试题:分片底层时如何工作的
分片底层对应的是一个Lucene库,而Lucene底层使用倒排索引技术实现。
倒排索引
正排索引
通过索引查询信息
倒排索引(反向索引)
用于快速的全文检索
专业术语
词条:
指的是最小的存储和查询单元,换句话说,指的是您想要查询的关键字(词)。
对应英文而言通常指的是一个单词,而对于中文而言,对应的是一个词组
词典(字典)
它是词条的集合,底层通常基于"Btree+"和"HASHMap"实现。
倒排表:
记录了词条出现在什么位置,出现的频率是什么。
倒排表中的每一条记录我们称为倒排项
搜索过程
1.首先根据用户需要查询的词条进行分词后,将分词后的各个词条字典进行匹配,验证词条在词典中是否存在;
2.如果上一步搜索结果发现词条不在字典中,则结束本次搜索,如果在词典中,就需要去查看倒排表中的记录(倒排项);
3.根据倒排表中记录的倒排项来定位数据在哪个文档中存在,而后根据这些文档的"_id"来获取指定的数据;
集群角色
data node:
指的是存储数据的节点。
node.data: true
master node
控制ES集群,并维护集群的状态(cluster state,包括节点信息,索引信息等,ES集群每个节点都有一份)。
node.master: true
coordinating:
协调节点可以处理请求的节点,ES集群所有的节点均为协调节点,该角色无法取消。
filebeat
1.概述
是用于采集文本日志类型到指定的目的端。
2.部署
3.启动
命令:相对路径
./filebeat -e -c + 配置文件
4.插件
input
log类型
type:log
TCP类型
type:tcp
filestream类型
多行匹配
count
指定具体的行数
parttern
通过正则匹配多行
docker类型
- type: docker
container类型
- type: container
kafka类型
output
elasticsearch类型
output.elasticsearch:
logstash类型
filebeat多实例
logstash
参数信息
logstash –h
查看帮助信息
-n, --node.name NAME
指定主机名称。
-f, --path.config CONFIG_PATH
指定配置文件或配置文件的目录
-e, --config.string CONFIG_STRING
基于命令行的方式指定配置参数
-e "input { stdin { type => stdin } } output { stdout { codec => rubydebug } }"
--pipeline.id ID
基于命令行指定Pipline ID
不指定,默认为main
-w, --pipeline.workers COUNT
指定工作线程数量,默认值为2,建议设置为当前操作系统的CPU核心数。
-b, --pipeline.batch.size SIZE
当pipeline的event事件数量超过指定的阈值,会将数据发送到存储端。默认是125。
-u, --pipeline.batch.delay DELAY_IN_MS
当event事件进入到pipeline到数据发送到存储端之前的等待时间,默认值为"50ms"
--path.data PATH
指定数据目录,rpm方式安装默认存放路径"/usr/share/logstash/data"
-l, --path.logs PATH
指定日志路径。
--log.level LEVEL
指定日志级别,默认值为"info"
有效值
- fatal
- error
- warn
- info
- debug
- trace
-V, --version
查看logstash的版本信息。
-r, --config.reload.automatic
支持文件的热加载功能。当文件修改时立即生效
--config.reload.interval RELOAD_INTERVAL
以秒为单位周期性检查配置文件的变化,当文件发生变化时取决于用户是否使用了-r选项生效
--log.format FORMAT
指定日志的输出格式,可以使json或者plain,默认值为"plain"(文本类型)。
--path.settings SETTINGS_DIR
指定配置文件目录,rpm方式安装时,默认路径为"/usr/share/logstash/config".
子主题
启动方式
基于命令行的方式启动logstash
logstash -e "input { stdin { type => stdin } } output { stdout { codec => rubydebug } }"
基于配置文件的方式启动logstash
1.创建专门的工作目录
2.编写启动的配置文件
3.启动logstash
logstash -f oldboyedu-logstash-config/01-stdin-to-stdout.conf
input组件
概述:写入数据
配置
file
beats
kafka
filter组件
概述:对数据进行过滤
配置
标准输出
输出到ES集群
插件
geoip插件
date插件
useragent插件
mutate插件
数据转换,字段改名,切分字符串,添加或删除字段
mutate插件
分隔字符信息
添加自定义字段信息
grok插件
基于正则分析Web日志,内置有120多种匹配模式。
支持自定义正则
支持自定义正则
json插件
解析json文本到顶级字段
output组件
概述:输出数据
标准输出
输出到ES集群
pipline
配置文件:
/etc/logstash/pipelines.yml
概述:
每个logstash的实例下都只有一个pipline.id的master,如果进行不配置,那么默认是运行一个pipline
管道
在同一进程中运行多个管道,Logstash通过一个名为pipelines.yml的配置文件提供了一种方法
如果不指定pipeline ID,则默认值为: {"pipeline.id"=>"main"}。
命令行启动
logstash -r
优化
单实例多分支
if语句
多实例
多个logstash实例
单logstash实例
启动多个pipeline
相关信息
https://www.elastic.co/
常见面试题
1.你在ELK使用过程中都遇到过哪些问题?
kibana的maps地图无法显示IP地理位置,这个问题卡了我很久,最后,查阅相关资料,最后解决方案是修改索引模板映射?
filebeat多行匹配,对于filestream案例时,count类型有问题,官网文档出错了,当时卡了很久,最后参考官网的其他连接文档找出了解决方案?
在刚开始搭建集群的时候,我尝试修改过nginx的访问日志,最后发现kibana每次数据都重复消费,最后发现是我手动修改导致的问题,找到问题原因
系统盘,数据盘未分离,根文件系统使用满了,将数据迁移到数据盘,释放根文件系统。
2.你们ES集群是多少分片多少副本?
10分片2副本
3.说下ES数据的读写流程?
子主题
4.ES集群的9200和9300作用是啥?
9200端口
http | https协议的web访问端口
子主题
9300端口
基于tcp协议的集群内部数据传输端口
5.你们公司日志采集数据流走向是如何的?
ELFK
6.你们ES集群有多少个分片?
业务线 : 10条业务
保存周求: 6个月 | 12个月
索引写入的滚动方式: 按天滚动
10 * 6 *30 ---> 1800+
----> 3600
----> 3600
7.你们ES咋监控的?都监控了哪些指标?
集群的健康状态
分片数量
可用分片百分比
进程监控,主机监控,服务的负载,....
ES集群加密
1.ES集群加密
部署流程
1.1: 集群节点生成证书文件
1.2: 证书文件修改为ES集群运行用户所属
1.3:同步证书到ES集群的所有节点
1.4:修改ES集群所有节点的配置文件
1.5:ES集群服务重启
1.6:生成随机密码
1.7:连接测试
2.kibana加密
流程:
1.1: 通过elastic用户访问kibana
1.2: 创建角色,给予一定的权限
1.3: 创建用户,并指定用户的角色权限
1.4: 登录验证
3.filebeat连接ES加密集群
filebeat实例中配置
指定ES集群的用户名和密码
username:
password:
不推荐使用管理员账户,使用户的权限最小化
4.logstash连接的ES加密集群
logstash实例中配置
指定配置在output输出插件下
user => 指定用户名
password => 指定密码
Zookeeper
概述:
ZooKeeper是一个用于维护配置信息、命名、提供分布式同步和提供组服务的集中式服务。分布式应用程序以某种形式使用所有这些类型的服务。
znode
常用命令
查看
ls /
查看"/"的znode下有多少个子znode。
get /school
查看"/school"的znode对应的值。
创建
create
语法:create path data
create /school/class linux87
创建一个名为"/school/class"的znode,其对应的值为linux87。
create /school oldboyedu
创建一个名为"/school"的znode,其对应的值为oldboyedu。
修改
set
set /school oldboyedu2023
将名为"/school"的znode的值改为"oldboyedu2023"
删除
delete
删除
delete /school/class
将名为"/school/class"的znode删除
deleteall
递归删除
deleteall /school
递归删除"/school"该znode
若该zonde下有子zonde,也会随着删除
单点部署
1.下载软件包
https://dlcdn.apache.org/zookeeper/zookeeper-3.8.2/apache-zookeeper-3.8.2-bin.tar.gz
2. 解压软件包
3.配置对应的环境变量
source /etc/profile.d/zk.sh
4.配置文件的修改
apache-zookeeper-3.8.2-bin/conf/zoo.cfg
5.启动
zkServer.sh
start 启动
status 查看状态
stop 关闭
restart 重启
6.连接测试
zkCli.sh
集群
部署
1.配置文件的修改
2.同步数据到集群其他节点
3.创建对应的myid文件
4.编写启动脚本
5.查看集群状态
6.连接集群测试验证
myid
表示当前zookeeper server的server id,用于唯一表示当前的服务器。
zxid
表示zookeeper transaction id,即zookeeper集群事务ID。
集群的leader选举
1.启动后检查集群的leader是否存在
2.若不存在leader,则优先连接的两个节点开始选举
3.比较节点的事务id---zxid
zxid大的成为leader
4.zxid一样的则比较myid
myid较大的成为leader
5.当其余节点接入集群时,若leader已经选出,则不参与选举
6.出leader外,其余节点的角色为follower
调优
调整zk的堆内存大小
收藏
收藏
0 条评论
下一页