一、日志分析系统ELK实战
ELK是elasticsearch、logstash、kibana的组合简称。安装时,需要注意:三个软件的版本需要匹配。 其中elasticsearch主要用来存储检索数据和数据处理;logstash主要用来数据采集和过滤然后给es;kibana主要从es里面加载数据然后展示。
1. elasticsearch 简介
Elasticsearch 是一个开源的分布式搜索分析引擎,建立在一个全文搜索引擎库 Apache Lucene基础之上。Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎,它具有如下特点:
- 一个分布式的实时文档存储,每个字段可以被索引与搜索;
- 一个分布式实时分析搜索引擎;
- 能胜任上百个服务节点的扩展,并支持 PB 级别(pb指petabyte,它是较高级的存储单位)的结构化或者非结构 化数据。
2. 基础模块
- cluster:管理集群状态,维护集群层面的配置信息;
alloction:封装了分片分配相关的功能和策略; discovery:发现集群中的节点,以及选举主节点; gateway:对收到master广播下来的集群状态数据的持久化存储; indices:管理全局级的索引设置; http:允许通过JSON over HTTP的方式访问ES的API。 transport:用于集群内节点之间的内部通信; engine:封装了对Lucene的操作及translog的调用。
3. elasticsearch应用场景
- 信息检索、日志分析、业务数据分析、数据库加速、运维指标监控
官网:点击网址
二、elasticsearch安装与配置
实验环境: 准备三台新的虚拟机server7(172.25.36.7)、server8(172.25.36.8)、server9(172.25.36.9),三个虚拟机分别分配2G内存,先建立单节点,后面创建集群。
准备elasticsearch的安装包,官网下载点击 我们已经在真机提前下载了软件,将安装包发送给server7 由于es里面(从7.6版本开始)就包含了jdk,因此无需再装jdk(把之前安装的jdk卸载),安装软件es 编辑主配置文件:/etc/elasticsearch/ 设置集群名称为my-es,节点名称为server7(一台一台配置,主机名需要解析); path.data: /var/lib/elasticsearch :数据目录; path.logs: /var/log/elasticsearch :日志目录 设置监听本机所有接口,http服务端口为9200(监听端口) 设定集群中的主节点为:server7/8/9; 指定集群引导时的初始主节点为:server7 注意:由于修改了集群名字,现在查看日志用cat /var/log/elasticsearch/my-es.log; jvm.option是一些程序里边的java的配置参数的一个集合,jvm.options文件里面设定了锁定内存为1G 注意:Xms设置不超过物理RAM的50%,以确保有足够的物理RAM留给内核文件 系统缓存。但不要超过32G。 修改系统限制 vim /etc/security/limits.conf,设定最大打开文件数和进程数 max-file:表示系统级别的能够打开的文件句柄①的数量;
文件句柄:在 Linux 环境中,任何事物都是用文件来表示,设备是文件,目录是文件,socket 也是文件。用来表示所处理对象的接口和唯一接口就是文件。应用程序在读/写一个文件时,首先需要打开这个文件,打开的过程其实质就是在进程与文件之间建立起连接,句柄的作用就是唯一标识此连接。此后对文件的读/写时,目标文件就由这个句柄作为代表。最后关闭文件其实就是释放这个句柄的过程,使得进程与文件之间的连接断开。
修改systemd启动文件vim /usr/lib/systemd/system/elasticsearch.service; 在service语句块下添加 LimitMEMLOCK=infinity 刷新设置 关闭swap交换分区(内存小的,也可以不禁用); swapoff -a:关闭配置文件“/etc/fstab”中所有的交换空间。 开启elasticsearch,并设置开机自启,查看开启了9200端口 真机网页访问http://172.25.36.7:9200,测试成功
三、搭建elasticsearch集群
接下来给配置server8/9,server7把rpm给server8/9发一份; server8安装elasticsearch 由于主配置文件基本一致,所以可以将server7的elasticsearch.yml主配置文件给server8/9发一份,再进行修改; server8进入/etc/elasticsearch/目录,编辑主配置文件elasticsearch.yml 将节点名称改为server8,其他都不变 类似的,server9进入/etc/elasticsearch/目录,编辑主配置文件elasticsearch.yml,把节点名称改为server9,其他都不变 同样的,server8/9修改系统限制 : /etc/security/limits.conf ; 修改systemd启动文件:/usr/lib/systemd/system/elasticsearch.service; 关闭swap交换分区; 刷新服务,开启es 测试,网页访问http://172.25.36.8:9200,测试成功 测试,网页访问http://172.25.36.9:9200,测试成功
四、elasticsearch可视化方法
1. cerebro插件
由于elasticsearch看着不直观,所以想要图形化的界面,引入了cerebro。cerebro是镜像,正好真机是8.2的红帽系统,自带podman,所以在真机导入镜像:podman run -d --name cerebro -p 9000:9000 lmenezes/cerebro(加-d有可能会出现问题)运行该镜像,默认开放9000端口。 网页访问http://172.25.36.250:9000,进入,需要输入监听的地址,http://172.25.36.7:9200 成功进入cerebro,点击nodes,可以看到集群中三个节点都在
2. elasticsearch-head插件
elasticsearch-head是elasticsearch自带插件。 下载elasticsearch-head插件,官网点击,head插件本质上是一个nodejs的工程,因此需要安装nodejs,点击 真机将提前下载好的安装包发送给server7 先安装nodejs 虚拟机需要联网 由于master.zip需要解压工具,所以安装unzip 解压缩 elasticsearch插件安装 更换npm源安装:进入解压目录elasticsearch-head-master,由于npm慢,所以更换为cnpm源。查看版本号 安装bzip2,(安装cnpm需要用到); 可以把nodejs项目所需要的依赖项都安装好 修改ES主机ip和端口:进入_site/子目录,查看app.js文件 可以看到监控的是9200端口 启动head插件:server7后台运行head插件,端口是9100 进入/etc/elasticsearch目录,修改主配置文件elasticsearch.yml; 修改ES跨域支持 : http.cors.enabled: true :是否支持跨域; http.cors.allow-origin: “*” :表示支持所有域名 重启ES服务 网页访问head插件服务http://172.25.36.7:9100,监控http://172.25.36.7:9200的elasticsearch,可以看到集群的三个节点。?代表master节点(可以看到server7/8上面有分片) 创建索引,名为demo 索引信息
五、elasticsearch节点角色
节点角色 | 功能 |
---|
Master | 主要负责集群中索引的创建、删除以及数据的Rebalance等操作。Master不负责数据的索引和检索,所以负载较轻。当Master节点失联或者挂掉的时候,ES集群会自动从其他Master节点选举出一个Leader | Data Node | 主要负责集群中数据的索引和检索,一般压力比较大 | Coordinating Node | 原来的Client node的,主要功能是来分发请求和合并结果的。所有节点默认就是Coordinating node,且不能关闭该属性 | Ingest Node | 专门对索引的文档做预处理 |
在生产环境下,如果不修改elasticsearch节点的角色信息,在高数据量,高并发的场景下集群容易出现脑裂等问题。默认情况下,elasticsearch集群中每个节点都有成为主节点的资格,也都存储数据,还可以提供查询服务。
- 节点角色是由以下属性控制:
1、node.master: 这个属性表示节点是否具有成为主节点的资格(注意:此属性的值为true,并不意味着这个节点就是主节点,只意味着有成为主节点的资格。因为真正的主节点,是由多个具有主节点资格的节点进行选举产生的); 2、node.data: 这个属性表示节点是否存储数据; 3、node.ingest: 是否对文档进行预处理; 4、search.remote.connect: 是否禁用跨集群查询; 默认情况下这些属性的值都是true。
生产集群中可以对这些节点的职责进行划分 : ? 建议集群中设置3台以上的节点作为master节点,这些节点只负责成为 主节点,维护整个集群的状态。 ? 再根据数据量设置一批data节点,这些节点只负责存储数据,后期提供 建立索引和查询索引的服务,这样的话如果用户请求比较频繁,这些节点 的压力也会比较大。 ? 所以在集群中建议再设置一批协调节点,这些节点只负责处理用户请求, 实现请求转发,负载均衡等功能。
server7编辑主编配置文件/etc/elasticsearch/elasticsearch.yml,添加node.data: false语句,表示该主机不存放数据 重启服务失败 查看日志,这是因为server7上本身有分片信息(副本),现在进行Data Node设置之前必须先进行清理 通过该命令查看Elasticsearch安装目录:rpm -ql elasticsearch 进入/usr/share/elasticsearch/bin目录 进行清理 重启elasticsearch服务成功 可以看到,原本server7上的副本自动被迁移到了server5上,此时server7现在没有data角色
|