运维实操——日志分析系统ELK(上)之elasticsearch

Posted 谁主沉浮lyb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运维实操——日志分析系统ELK(上)之elasticsearch相关的知识,希望对你有一定的参考价值。


ELK是elasticsearch、logstash、kibana的组合简称,安装时,三个软件的版本需要匹配。
其中elasticsearch主要用来存储检索数据和数据处理,logstash主要用来数据采集和过滤然后给es,kibana主要从es里面加载数据然后展示。
本文学习elasticsearch

1、什么是elasticsearch?

Elasticsearch 是一个开源的分布式搜索分析引擎,建立在一个全文搜索引擎库 Apache Lucene基础之上。Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎,它具有如下特点:

  • 一个分布式的实时文档存储,每个字段可以被索引与搜索
  • 一个分布式实时分析搜索引擎
  • 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据
基础模块作用
cluster管理集群状态,维护集群层面的配置信息
alloction封装了分片分配相关的功能和策略
discovery发现集群中的节点,以及选举主节点
gateway对收到master广播下来的集群状态数据的持久化存储
indices管理全局级的索引设置
http允许通过JSON over HTTP的方式访问ES的API
transport用于集群内节点之间的内部通信
engine封装了对Lucene的操作及translog的调用

Elasticsearch的官网是https://www.elastic.co/cn/
Elasticsearch的功能强大,常用的应用场景有:

  • 信息检索
  • 日志分析
  • 业务数据分析
  • 数据库加速
  • 运维指标监控

2、单节点elasticsearch安装

实验准备三台新虚拟机server3(172.25.77.3)、server4(172.25.77.4)、server5(172.25.77.5),三个虚拟机分别给了2G内存,先建立单节点,后面创建集群。
准备elasticsearch的安装包,官网下载https://elasticsearch.cn/download/
我这里用了之前的server3和server4,server5是新创的。所以先清理server3环境

清理server4环境

安装软件

进入/etc/elasticsearch/,编辑主配置文件

设置集群名称为my-es,节点名称为server3

任何主机都可以访问,http端口为9200

发现的主机有server3、server4、server5,初始化节点为server3

开启elasticsearch,并设置开机自启,查看开启了9200端口

真机网页访问http://172.25.77.3:9200,测试成功

由于修改了集群名字,现在查看日志用cat /var/log/elasticsearch/my-es.log,此处可以禁用swap分区,实验效果更加流畅,不禁用swap也没问题

3、搭建elasticsearch集群

接下来给server4和server5配置
server3把rpm给server4和server5发一份,server4安装elasticsearch

server5安装elasticsearch

由于主配置文件基本一致,所以server3把elasticsearch.yml给server4和server5发一份,再改
server4进入/etc/elasticsearch/目录,编辑主配置文件elasticsearch.yml,把节点名称改为server4,其他都不变

类似的,server5进入/etc/elasticsearch/目录,编辑主配置文件elasticsearch.yml,把节点名称改为server5,其他都不变

server4开启elasticsearch,设置开机自启

server5开启elasticsearch,设置开机自启

测试,网页访问http://172.25.77.4:9200,测试成功

测试,网页访问http://172.25.77.5:9200,测试成功

4、elasticsearch可视化方法1——cerebro插件

由于elasticsearch看着很不舒服,看不懂,所以想要图形化的界面,引入了cerebro

cerebro是镜像,正好真机是8.2的红帽系统,自带podman,所以在真机导入镜像,podman run -d --name cerebro -p 9000:9000 lmenezes/cerebro运行该镜像,默认开放9000端口

网页访问http://172.25.77.250:9000,进入,需要输入监听的地址,http://172.25.77.3:9200

成功进入cerebro,点击nodes,可以看到集群中三个节点都在

5、elasticsearch可视化方法2——elasticsearch-head插件

elasticsearch-head是elasticsearch自带插件

下载elasticsearch-head插件,官网https://github.com/mobz/elasticsearch-head/archive/master.zip;head插件本质上是一个nodejs的工程,因此需要安装nodejs,https://mirrors.tuna.tsinghua.edu.cn/nodesource/rpm_9.x/el/7/x86_64/nodejs-9.11.2-1nodesource.x86_64.rpm

先安装nodejs,由于master.zip需要解压工具,所以安装unzip

解压master.zip

进入解压目录elasticsearch-head-master,由于npm慢,所以更换为cnpm源。查看版本号

安装bzip2,(安装cnpm需要用到)

安装cnpm

进入_site/子目录,查看app.js文件

可以看到监控的是9200端口

server3后台运行head插件,他的端口是9100

开启端口为9100

进入/etc/elasticsearch目录,修改主配置文件elasticsearch.yml

允许跨域,*表示支持所有域名

重启elasticsearch

网页访问http://172.25.77.3:9100,监控http://172.25.77.3:9200的elasticsearch,可以看到集群的三个节点。*代表master节点

6、elasticsearch节点角色

节点角色功能
Master主要负责集群中索引的创建、删除以及数据的Rebalance等操作。Master不负责数据的索引和检索,所以负载较轻。当Master节点失联或者挂掉的时候,ES集群会自动从其他Master节点选举出一个Leader
Data Node主要负责集群中数据的索引和检索,一般压力比较大
Coordinating Node原来的Client node的,主要功能是来分发请求和合并结果的。所有节点默认就是Coordinating node,且不能关闭该属性
Ingest Node专门对索引的文档做预处理

在生产环境下,如果不修改elasticsearch节点的角色信息,在高数据量,高并发的场景下集群容易出现脑裂等问题。默认情况下,elasticsearch集群中每个节点都有成为主节点的资格,也都存储数据,还可以提供查询服务。

节点角色是由以下属性控制

  • node.master: 这个属性表示节点是否具有成为主节点的资格(注意:此属性的值为true,并不意味着这个节点就是主节点,只意味着有成为主节点的资格。因为真正的主节点,是由多个具有主节点资格的节点进行选举产生的
  • node.data: 这个属性表示节点是否存储数据
  • node.ingest: 是否对文档进行预处理
  • search.remote.connect: 是否禁用跨集群查询
    默认情况下这些属性的值都是true

生产集群中可以对这些节点的职责进行划分,专人负责专事
(1)建议集群中设置3台以上的节点作为master节点,这些节点只负责成为主节点,维护整个集群的状态。
(2)再根据数据量设置一批data节点,这些节点只负责存储数据,后期提供建立索引和查询索引的服务,这样的话如果用户请求比较频繁,这些节点的压力也会比较大。
(3)在集群中建议再设置一批协调节点,这些节点只负责处理用户请求,实现请求转发,负载均衡等功能。

下面简单测试,
server4编辑主编配置文件/etc/elasticsearch/elasticsearch.yml,添加node.data: false语句,表示该主机不存放数据

重启elasticsearch服务

可以看到server4现在没有data角色

而server3有data角色

其他的角色都可以测试,本文不再赘述

以上是关于运维实操——日志分析系统ELK(上)之elasticsearch的主要内容,如果未能解决你的问题,请参考以下文章

案例:ELK日志分析系统

运维实操——docker容器镜像大小优化

图数据库驱动的基础设施运维实操

运维实操——docker容器安装与镜像

运维实操——docker容器安全

ELK 实现 Java 分布式系统日志分析架构