1 Elastic Stack简介
如果你没有听说过Elastic Stack,那你一定听说过ELK,实际上ELK是三款软件的简称,分别是Elasticsearch、Logstash、Kibana组成,在发展的过程中,又有新成员Beats的加入,所以就形成了Elastic Stack。所以说,ELK是旧的称呼,Elastic Stack是新的名字。
全系的Elastic Stack技术栈包括:
1.Elasticsearch
Elasticsearch 基于java,是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
2.Logstash
Logstash 基于java,是一个开源的用于收集,分析和存储日志的工具。
3.Kibana
Kibana 基于nodejs,也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的Web 界面,可以汇总、分析和搜索重要数据日志。
4.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系统的日志信息;
2 Elasticsearch 简介
2.1 基本概念
1. 官网:https://www.elastic.co/cn/products/elasticsearch
2.基本概念
索引
(1)索引(index)是Elasticsearch对逻辑数据的逻辑存储,所以它可以分为更小的部分。
(2)可以把索引看成关系型数据库的表,索引的结构是为快速有效的全文索引准备的,特别是它不存储原始值。
(3)Elasticsearch可以把索引存放在一台机器或者分散在多台服务器上,每个索引有一或多个分片(shard),每个分片可以有多个副本(replica)。
文档
(1)存储在Elasticsearch中的主要实体叫文档(document)。用关系型数据库来类比的话,一个文档相当于数据库表中的一行记录。
(2)Elasticsearch和MongoDB中的文档类似,都可以有不同的结构,但Elasticsearch的文档中,相同字段必须有相 同类型。
(3)文档由多个字段组成,每个字段可能多次出现在一个文档里,这样的字段叫多值字段(multivalued)。
(4)每个字段的类型,可以是文本、数值、日期等。字段类型也可以是复杂类型,一个字段包含其他子文档或者数组。
映射
所有文档写进索引之前都会先进行分析,如何将输入的文本分割为词条、哪些词条又会被过滤,这种行为叫做映射(mapping)。一般由用户自己定义规则。
文档类型
(1)在Elasticsearch中,一个索引对象可以存储很多不同用途的对象。例如,一个博客应用程序可以保存文章和评论。
(2)每个文档可以有不同的结构。
(3)不同的文档类型不能为相同的属性设置不同的类型。例如,在同一索引中的所有文档类型中,一个叫title的字段必须具有相同的类型。
2.3 Elasticsearch集群节点相关概念
ELasticsearch的集群是由多个节点组成的,通过cluster.name设置集群名称,并且用于区分其它的集群,每个节点
通过node.name指定节点的名称。
在Elasticsearch中,节点的类型主要有4种:
master节点
配置文件中node.master属性为true(默认为true),就有资格被选为master节点。
master节点用于控制整个集群的操作。比如创建或删除索引,管理其它非master节点等。
data节点
配置文件中node.data属性为true(默认为true),就有资格被设置成data节点。
data节点主要用于执行数据相关的操作。比如文档的CRUD。
客户端节点
配置文件中node.master属性和node.data属性均为false。
该节点不能作为master节点,也不能作为data节点。
可以作为客户端节点,用于响应用户的请求,把请求转发到其他节点。
部落节点
当一个节点配置tribe.*的时候,它是一个特殊的客户端,它可以连接多个集群,在所有连接的集群上执行搜索和其他操作。
3 部署elasticsearch集群
3.1 基础环境
操作系统:centos7.5
各类包下载地址:https://elasticsearch.cn/download/
#关闭防火墙和selinux
#systemctl stop firewalld
#systemctl disable firewalld
#setenforce 0
#getenforce
#sed -i ‘s/SELINUX=permissive/SELINUX=disabled/‘ /etc/selinux/config
#cat /etc/sysconfig/selinux
SELINUX=disabled
#修改主机名
#hostnamectl set-hostname elk1
#hostnamectl set-hostname elk2
#hostnamectl set-hostname elk3
#修改最大连接数
#vi /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
#ulimit -n 65535
#ulimit -a
#配置/etc/hosts
#cat /etc/hosts
#配置好本地源,阿里源
#wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
--------------------------------------------------------------------------------------------------------------------------------------
注意:
如果配置elasticsearch源,会下载最新版本的elasticsearch包;实验中因提前下载好了7.2的版本,这里就不配置;配置elasticsearch源方法如下:
#rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
#cat /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
#安装最新版elasticsearch
#yum -y install elasticsearch
----------------------------------------------------------------------------------------------------------------------------------------------
3.2 安装elasticsearch
#在elk1,elk2,elk3上创建elasticsearch数据库目录,
并且修改属主属组为elasticsearch
#mkdir -pv /home/es/log
#mkdir -pv /home/es/data
#chown -R elasticsearch.elasticsearch /home/es/log
#chown -R elasticsearch.elasticsearch /home/es/data
#安装
#yum install -y elasticsearch-7.2.0-x86_64.rpm
#备份主配置文件
#cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
3.2 配置Elasticsearch集群
#elk1(192.168.1.223)配置文件
#grep -v "#" /etc/elasticsearch/elasticsearch.yml
参数解释:
cluster.name: my-application # 集群中的名称
node.name: elk1 # 该节点名称
node.master: true # 意思是该节点为主节点
node.data: false #表示这不是数据节点
path.data: /home/es/data #数据存放路径
path.logs: /home/es/log #日志存放路径
network.host: 192.168.1.223 # 监听ip
http.port: 9200 # es服务的端口号
discovery.seed_hosts # 配置自动发现
cluster.initial_master_nodes #集群初始主节点
#elk2(192.168.1.224)配置文件
#elk3(192.168.1.225 )配置文件
#设置开机自动
#systemctl enable elasticsearch
#启动服务
#systemctl restart elasticsearch
#netstat -tnulp | grep java
3.4 查看集群信息
#查看elasticsearch集群信息(下面命令在任意一个节点机器上操作都可以)
#curl -XGET ‘http://192.168.1.223:9200/_cat/nodes‘
注意:带*号表示该节点是master主节点。
#后面添加 ?v ,表示详细显示
#curl -XGET ‘http://192.168.1.223:9200/_cat/nodes?v‘
#查询集群状态方法
# curl -XGET ‘http://192.168.1.223:9200/_cluster/state/nodes?pretty‘
#查询集群中的master
#curl -XGET ‘http://192.168.1.223:9200/_cat/master?v‘
#查询集群的健康状态(一共三种状态:green、yellow,red;其中green表示健康)
#curl -XGET ‘http://192.168.1.223:9200/_cat/health?v‘
或
#curl -XGET ‘http://192.168.1.223:9200/_cluster/health?pretty‘
3.5 ES数据定期删除脚本
如果不删除ES数据,将会导致ES存储的数据越来越多,磁盘满了之后将无法写入新的数据。这时可以使用脚本定时删除过期数据;
清理脚本如下:
#cat es-index-clear.sh #/bin/bash #es-index-clear #只保留5天内的日志索引 LAST_DATA=`date -d "-5 days" "+%Y.%m.%d"` #删除过期的索引 curl -X DELETE ‘http://192.168.1.224:9200/*-‘${LAST_DATA}‘*‘
可以视情况调整保留的天数,该脚本只需要在ES中一台机器定时运行即可。
-------------------------------------------------------------------------------------------------------------------------------------------
3.6 参考链接
https://blog.csdn.net/dkjhl/article/details/95201228
https://blog.csdn.net/ghost_leader/article/details/79023222
https://blog.csdn.net/dkjhl/article/details/95201228
https://blog.51cto.com/zero01/2079879
原文地址:https://www.cnblogs.com/llwxhn/p/12440983.html