海量级日志处理系统ElasticSearch

举报
tea_year 发表于 2025/07/31 10:32:09 2025/07/31
【摘要】 任务背景运维人员需要对系统和业务日志进行精准把控,便于分析系统和业务状态。日志分布在不同的服务器上,传统的使用传统的方法依次登录每台服务器查看日志,既繁琐又效率低下。所以我们需要==集中化==的日志管理工具将位于不同服务器上的日志收集到一起, 然后进行分析,展示。前面我们学习过rsyslog,它就可以实现集中化的日志管理,可是rsyslog集中后的日志实现统计与检索又成了一个问题。使用wc,...

任务背景

运维人员需要对系统和业务日志进行精准把控,便于分析系统和业务状态。日志分布在不同的服务器上,传统的使用传统的方法依次登录每台服务器查看日志,既繁琐又效率低下。所以我们需要==集中化==的日志管理工具将位于不同服务器上的日志收集到一起, 然后进行分析,展示

前面我们学习过rsyslog,它就可以实现集中化的日志管理,可是rsyslog集中后的日志实现统计与检索又成了一个问题。使用wc, grep, awk等相关命令可以实现统计与检索,但如果要求更高的场景,这些命令也会力不从心。所以我们需要一套专业的日志收集分析展示系统。

ELK引入图.png

ELK引入.png

引入.png

总结

1、日志 是用于记录系统或业务的状态

2、通过日志可以获得系统或业务的状态,并进行分析。

3、早期的日志是分散在各主机上

4、通过rsyslog实现本地日志管理,收集,轮转,集中管理

5、早期的日志分析方法:wc,grep,awk

6、集中式的日志收集、存、分析、展示系统,一个文件-》文件

任务要求

1, 搭建ELK集群

2, 收集日志信息并展示


任务拆解

1, 认识ELK

2, 部署elasticsearch集群并了解其基本概念

3, 安装elasticsearch-head实现图形化操作

4, 安装logstash收集日志

5, 安装kibana日志展示

6, 安装file beat实现轻量级日志收集

学习目标

  • 能够说出ELK的应用场景
  • 能够区分ELK架构中elasticsearch,logstash,kibina三个软件各自的主要功能
  • 能够单机部署elasticsearch
  • 能够部署elasticsearch集群
  • 理解ELK中索引的概念
  • 能够部署logstash
  • 能够使用logstash做日志采集


认识ELK

ELK是一套开源的日志分析系统,由elasticsearch+logstash+Kibana组成。

官网说明:https://www.elastic.co/cn/products

首先: 先一句话简单了解E,L,K这三个软件

elasticsearch: 分布式搜索引擎

logstash: 日志收集与过滤,输出给elasticsearch

Kibana: 图形化展示

elk架构图.png

elk下载地址:https://www.elastic.co/cn/downloads

1725949847274.png


环境准备:

实验架构图.png

四台机器(内存建议大于1G,比如1.5G; filebeat服务器可为1G) :

主机 ip 备注
es01 192.168.174.71 单机
kb01
lg01
fb01

elasticsearch

elasticsearch简介

Elasticsearch(简称ES)是一个开源的分布式搜索引擎,Elasticsearch还是一个分布式文档数据库。所以它提供了大量数据的存储功能,快速的搜索分析功能。

提到搜索,大家肯定就想到了百度,谷歌,必应等。当然也有如下的搜索场景。

github搜索界面.png

elasticsearch部署

第1步: 在elasticsearch服务器上确认jdk(使用系统自带的openjdk就OK)

mkdir -p /app/tools
rz -E   #上传jdk.tar.gz
#上传到/app/tools下;自己解到             -C  /usr/local
tar xzf jdk-8u291-linux-x64.tar.gz
mv jdk1.8.0_291/ /usr/local/
​
​
#方式一二配置环境变量
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_291
export PATH=$JAVA_HOME/bin:$PATH
​
#或方式二
[root@es01 /app/tools]#echo 'export JAVA_HOME=/usr/local/jdk1.8.0_291/' >> /etc/profile
[root@es01 /app/tools]#echo 'export PATH=$PATH:$JAVA_HOME/bin' >> /etc/profile
[root@es01 /app/tools]#source /etc/profile
​
#--------------使配置生效
source /etc/profile
[root@es01 ~]# java -version

第2步: es的安装,配置

#这里使用的是rpm方式安装
[root@es01 ~]# curl -o elasticsearch-7.17.5-x86_64.rpm

第3步: 单机es的配置与服务启动

[root@es01 ~]# cat /etc/elasticsearch/elasticsearch.yml |grep -v "#"
​
cluster.name: elk-cluster   #17可以自定义一个集群名称,不配置的话默认会取名为elasticsearch
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
​
network.host: 0.0.0.0                           #56打开注释,并修改为监听所有
http.port: 9200                                 #61打开注释,监听端口9200
​
#启动一下,发现出问题,需要配置
discovery.seed_hosts: ["es01"]                  #70
cluster.initial_master_nodes: ["es01"]          #74
​
​
​
[root@es01 ~]# systemctl start elasticsearch
[root@es01 ~]# systemctl enable elasticsearch
​
启动有点慢和卡,稍等1分钟左右,查看到以下端口则表示启动OK
ps aux |grep elasticsearch
[root@es01 ~]# netstat -ntlup |grep java
tcp6       0      0 :::9200                 :::*                    LISTEN      5329/java           
tcp6       0      0 :::9300                 :::*                    LISTEN      5329/java
​
9200则是数据传输端口
9300端口是集群通信端口(我们暂时还没有配置集群,现在是单点elasticsearch)

第4步: 查看状态

使用curl命令或浏览器访问http://es01:9200/_cluster/health?pretty地址(IP为ES服务器IP)

[root@es01 ~]# curl http://es01:9200/_cluster/health?pretty

1725952799800.png

1725952872008.png


elasticsearch集群部署

集群部署主要注意以下几个方面

  1. 集群配置参数:

    • discovery.seed_hosts: ["es01","es02"], Elasticsearch默认使用Zen Discovery来做节点发现机制,推荐使用unicast来做通信方式,在该配置项中列举出Master节点。

    • discovery.zen.minimum_master_nodes,该参数表示集群中Master节点可工作Master的最小票数,默认值是1。为了提高集群的可用性,避免脑裂现象。官方推荐设置为(N/2)+1,其中N是具有Master资格的节点的数量。

    • discovery.zen.ping_timeout,表示节点在发现过程中的等待时间,默认值是30秒,可以根据自身网络环境进行调整,一定程度上提供可用性。

  2. 集群节点:

    • 节点类型主要包括Master节点和data节点(client节点和ingest节点不讨论)。通过设置两个配置项node.master和node.data为true或false来决定将一个节点分配为什么类型的节点。

    • 尽量将Master节点和Data节点分开,通常Data节点负载较重,需要考虑单独部署。

  3. 内存:

    • Elasticsearch默认设置的内存是1GB,对于任何一个业务部署来说,这个都太小了。通过指定ES_HEAP_SIZE环境变量,可以修改其堆内存大小,服务进程在启动时候会读取这个变量,并相应的设置堆的大小。建议设置系统内存的一半给Elasticsearch,但是不要超过32GB。

  4. 硬盘空间:

    • Elasticsearch默认将数据存储在/var/lib/elasticsearch路径下,随着数据的增长,一定会出现硬盘空间不够用的情形,大环境建议把分布式存储挂载到/var/lib/elasticsearch目录下以方便扩容。

配置参考文档: https://www.elastic.co/guide/en/elasticsearch/reference/index.html


首先在ES集群所有节点都安装ES(步骤省略)

可以使用两台或两台以上ES做集群, 以下就是两台ES做集群的配置

[root@es01 ~]# cat /etc/elasticsearch/elasticsearch.yml |grep -v "#"
cluster.name: elk-cluster
node.name: es01                         #23行本机IP或主机名
node.master: true                       #自己加24指定不为master节点
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
​
discovery.seed_hosts: ["es01","es02"]   集群所有节点IP  #72
cluster.initial_master_nodes: ["es01","es02"]       #76
​
[root@es02 ~]# cat /etc/elasticsearch/elasticsearch.yml |grep -v "#"
cluster.name: elk-cluster
node.name: es02                                     本机IP或主机名
node.master: false                                  指定为master节点
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["es01","es02"]       集群所有节点IP
cluster.initial_master_nodes: ["es01","es02"]
​

启动或重启服务

[root@vm1 ~]# systemctl restart elasticsearch
[root@vm1 ~]# systemctl enable elasticsearch
[root@es01 ~]# systemctl restart elasticsearch

查看状态

es集群状态查看2.png

json(java script object notation)java对象表示法


故障:

10.0.0.72:9200访问的时候

"cluster_uuid" : "_na_",   #表示没有uuid,每个机器都要分配

主要原因就是克隆主机nodes一样了,所以删除一下.

[root@es02 /var/lib/elasticsearch]#rm -rf /var/lib/elasticsearch/* /var/log/elasticsearch/* /tmp/*

image-20250707153911234.png

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。