Skip to content

ELK

“ELK”是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Log stash 和 Kibana。

  • Elastic search 是一个搜索和分析引擎。
  • Log stash 是服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到诸如 Elastic search 等“存储库”中。
  • Kibana 则可以让用户在 Elasticsearch 中使用图形和图表对数据进行可视化。
  • image-20241117175108457

Elastic Stack 是 ELK Stack 的更新换代产品。什么是 ELK Stack?很简单,指的就是 Elastic Stack。 官网:https://www.elastic.co/cn/products/elasticsearch

image-20241117174059895

Beats

Beats是elastic公司开源的一款采集系统监控数据的代理agent,是在被监控服务器上以客户端形式运行 的数据收集器的统称,可以直接把数据发送给Elasticsearch或者通过Logstash发送给Elasticsearch,然 后进行后续的数据分析活动。

Beats由如下组成:

  1. Packetbeat:是一个网络数据包分析器,用于监控、收集网络流量信息,Packetbeat嗅探服务器之间的流 量,解析应用层协议,并关联到消息的处理,其支 持ICMP (v4 and v6)、DNS、HTTP、Mysql、PostgreSQL、Redis、MongoDB、Memcache等协议;
  2. Filebeat:用于监控、收集服务器日志文件,其已取代 logstash forwarder;
  3. Metricbeat:可定期获取外部系统的监控指标信息,其可以监控、收集 Apache、HAProxy、MongoDB、MySQL、Nginx、PostgreSQL、Redis、System、Zookeeper等服务;
  4. Winlogbeat:用于监控、收集Windows系统的日志信息;

Elastic Stack组成(Beats+ELK)

image-20241117175251774

Elastic Search(ES)

简介

ElasticSearch是一个基于Lucene^①的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。Elasticsearch 使用的是标准的 RESTful 风格的 API 和 JSON。

架构

img

  1. Gateway:是ES用来存储索引的文件系统,支持多种类型。

  2. Gateway的上层是一个分布式的lucene框架。Lucene之上是ES的模块,包括:索引模块(Index Module)、搜索模块(Search Module)、映射解析模块(Mapping Module)等,ES实际上也支持多种第三方插件。

  • Discovery是ES的节点发现模块,不同机器上的ES节点要组成集群需要进行消息通信,集群内部需要选举master节点,这些工作都是由Discovery模块完成。支持多种发现机制,如 Zen 、EC2、gce、Azure。
  • Scripting用来支持在查询语句中插入javascript、python等脚本语言,scripting模块负责解析这些脚本,使用脚本语句性能稍低。
  1. ES模块之上是 Discovery、Scripting和第三方插件。

  2. 再上层是ES的传输模块和JMX.传输模块支持多种传输协议,如 Thrift、memecached、http,默认使用http。 JMX是java的管理框架,用来管理ES应用。

  3. 最上层是ES提供给用户的接口,可以通过RESTful接口或java api和ES集群进行交互。

节点名 ip 环境
node01 192.168.242.88 ElasticSearch + java version "1.8.0_161"
node02 192.168.242.89 ElasticSearch + java version "1.8.0_161"
node03 192.168.242.90 ElasticSearch + java version "1.8.0_161"

jdk安装(三台机器全装)

##解压jdk
sudo tar -zxvf 被解压文件位置 -C /usr/lib/jvm/default-java/
-------------------------------------------------------------------------------
# 打开环境变量文件
vi /etc/profile
-------------------------------------------------------------------------------
#java环境变量
export JAVA_HOME=/usr/lib/jvm/default-java/jdk1.8.0_391   #这里是你的java安装路径
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
-------------------------------------------------------------------------------
# 使配置文件生效
source /etc/profile

本体安装(三台全装)

创建elsearch用户,Elasticsearch不支持root用户运行

useradd -m elsearch

解压安装包 到当前目录的 /opt/es目录下

tar -xvf elasticsearch-6.5.4.tar.gz -C /opt/es/

授予elsearch安装目录的权限

chown -R elsearch:elsearch /opt/es/

修改配置文件

vi /opt/es/elasticsearch-6.5.4/config/elasticsearch.yml 

# 集群名字
cluster.name: my-application 
# 当前节点名字(三台主机仅此不同)
node.name: node01
# 配置当前节点是否可以被选举为master
node.master: true
# 配置当前节点是否允许存储数据
node.data: true
# 绑定的主机名或地址(如设置为服务器的内网地址,可供网络访问,如果设置为127.0.0.1那只能本地访问)
network.host: 0.0.0.0
# 为http传输监听提供端口
http.port: 9200
# 设置新节点被启动时能够被发现的主节点列表
discovery.zen.ping.unicast.hosts: ["192.168.242.88", "192.168.242.89","192.168.242.90"]
# 设置有有主节点资格并相互连接的最小数目(防止脑裂)
discovery.zen.minimum_master_nodes: 2
# 设置允许跨域访问
http.cors.enabled: true
# 设置跨域访问范围
http.cors.allow-origin: "*"

------------------------------------------------------------------
#1:修改jvm启动参数 默认1G
vi /opt/es/elasticsearch-6.5.4/config/jvm.options

-Xms512m #根据自己机器情况修改
-Xmx512m
------------------------------------------------------------------
#2:单个进程中的最大线程数vim /etc/sysctl.conf 
vm.max_map_count=655360

改完使用sysctl -p使之生效
 ------------------------------------------------------------------
#启动ES服务(一定要切换到elsearch用户)
su - elsearch 
# -d后台运行
/opt/es/elasticsearch-6.5.4/bin/elasticsearch -d

------------------------------错误处理方法------------------------------------
## 如果第一次(非第一次跳过此步)不小心用其他用户运行了,需要运行以下命令来重置
# 第一次运行会产生log,但是此时log文件的属主属组是当前用户与用户组,因此需要重置用户与用户组
chown -R elsearch:elsearch /opt/es/
# 错误运行产生的data需要删除,这一点与hadoop错误运行处理方法相同(非第一次错误运行只需要删除date即可)
rm -rf /opt/es/elasticsearch-6.5.4/data/

RESTful API

在Elasticsearch中,提供了功能丰富的RESTful API的操作,包括基本的CRUD、创建索引、删除索引等 操作。

  • GET(SELECT):从服务器取出资源(一项或多项)。
  • POST(CREATE):在服务器新建一个资源。
  • PUT(UPDATE):在服务器更新资源(客户端提供完整资源数据)。
  • PATCH(UPDATE):在服务器更新资源(客户端提供需要修改的资源数据)。
  • DELETE(DELETE):从服务器删除资源。

POST插入数据/新建索引

# 创建索引
PUT 192.168.242.88:9200/zxnbmk
{ "settings":{
    "index":{
        "number_of_shards":"2",
        "number_of_replicas":"0"}
    }
}

# number_of_shards 分片数
# number_of_replicas 副本数

----------------------------------------------------------------------------------------------------------------
# 插入数据
192.168.242.88:9200/zxnbmk/user/1  # 如果没有zxnbmk索引会自动创建
{"id":1001,"name":"张三","sex":"女"}
# 注意图中的id1为此条记录的唯一值,记录中的id只是存储的数据中1+


的id只是人家的数据而已因此插入数据的时候post中的id要唯一

image-20241118124603617

image-20241118105945695

GET访问查询数据

192.168.242.88:9200/zxnbmk/user/1
192.168.242.88:9200/zxnbmk/user/_search
192.168.242.88:9200/zxnbmk/user/_search?q=name:"张三"

image-20241118110953943

DELETE删除数据/索引

192.168.242.88:9200/zxnbmk # 删除索引
192.168.242.88:9200/zxnbmk/user/2

image-20241118113438473

PUT和POST修改数据的区别

在Elasticsearch中,文档数据是不能修改的,但是可以通过覆盖^②的方式进行更新。注意修改后_version值会递增,代表版本

PUT覆盖

192.168.242.88:9200/zxnbmk/user/1

image-20241118114430550

POST局部修改

192.168.242.88:9200/zxnbmk/user/1/_update

{"doc":{"sex":"?"}}

image-20241118123043655

引用

Comments