ELK
“ELK”是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Log stash 和 Kibana。
- Elastic search 是一个搜索和分析引擎。
- Log stash 是服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到诸如 Elastic search 等“存储库”中。
- Kibana 则可以让用户在 Elasticsearch 中使用图形和图表对数据进行可视化。
Elastic Stack 是 ELK Stack 的更新换代产品。什么是 ELK Stack?很简单,指的就是 Elastic Stack。 官网:https://www.elastic.co/cn/products/elasticsearch
Beats
Beats是elastic公司开源的一款
采集系统监控数据的代理agent
,是在被监控服务器上以客户端形式运行 的数据收集器的统称,可以直接把数据发送给Elasticsearch或者通过Logstash发送给Elasticsearch,然 后进行后续的数据分析活动。Beats由如下组成:
- Packetbeat:是一个网络数据包分析器,用于监控、收集网络流量信息,Packetbeat嗅探服务器之间的流 量,解析应用层协议,并关联到消息的处理,其支 持ICMP (v4 and v6)、DNS、HTTP、Mysql、PostgreSQL、Redis、MongoDB、Memcache等协议;
- Filebeat:用于监控、收集服务器日志文件,其已取代 logstash forwarder;
- Metricbeat:可定期获取外部系统的监控指标信息,其可以监控、收集 Apache、HAProxy、MongoDB、MySQL、Nginx、PostgreSQL、Redis、System、Zookeeper等服务;
- Winlogbeat:用于监控、收集Windows系统的日志信息;
Elastic Stack组成(Beats+ELK)
Elastic Search(ES)
简介
ElasticSearch是一个基于Lucene^①的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。Elasticsearch 使用的是标准的 RESTful 风格的 API 和 JSON。
架构
-
Gateway:是ES用来存储索引的文件系统,支持多种类型。
-
Gateway的上层是一个分布式的lucene框架。Lucene之上是ES的模块,包括:索引模块(Index Module)、搜索模块(Search Module)、映射解析模块(Mapping Module)等,ES实际上也支持多种第三方插件。
- Discovery是ES的节点发现模块,不同机器上的ES节点要组成集群需要进行消息通信,集群内部需要选举master节点,这些工作都是由Discovery模块完成。支持多种发现机制,如 Zen 、EC2、gce、Azure。
- Scripting用来支持在查询语句中插入javascript、python等脚本语言,scripting模块负责解析这些脚本,使用脚本语句性能稍低。
-
ES模块之上是 Discovery、Scripting和第三方插件。
-
再上层是ES的传输模块和JMX.传输模块支持多种传输协议,如 Thrift、memecached、http,默认使用http。 JMX是java的管理框架,用来管理ES应用。
-
最上层是ES提供给用户的接口,可以通过RESTful接口或java api和ES集群进行交互。
Elastic Search集群安装
节点名 | 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用户运行
解压安装包 到当前目录的 /opt/es目录下
授予elsearch安装目录的权限
修改配置文件
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要唯一。
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:"张三"
DELETE删除数据/索引
PUT和POST修改数据的区别
在Elasticsearch中,文档数据是不能修改的,但是可以通过覆盖^②的方式进行更新。注意修改后_version值会递增,代表版本
PUT覆盖
POST局部修改