ELKstack简介
什么是ELK?
通俗来讲,ELK是由Elasticsearch、Logstash、Kibana 三个开源软件的组成的一个组合体,这三个软件当中,每个软件用于完成不同的功能,ELK 又称为ELK stack,官方域名为elastic.co,ELK stack的主要优点有如下几个:
1.处理方式灵活: elasticsearch是实时全文索引,具有强大的搜索功能
2.配置相对简单:elasticsearch全部使用JSON 接口,logstash使用模块配置,kibana的配置文件部分更简单。
3.检索性能高效:基于优秀的设计,虽然每次查询都是实时,但是也可以达到百亿级数据的查询秒级响应。
4.集群线性扩展:elasticsearch和logstash都可以灵活线性扩展
5.前端操作绚丽:kibana的前端设计比较绚丽,而且操作简单
---------------------------- -----------------------------------------------------------------------------------------------------
这三个服务分别有什么功能:
1:Elasticsearch
是一个高度可扩展的开源全文搜索和分析引擎,它可实现数据的实时全文搜索搜索、支持分布式可实现高可用、提供API接口,可以处理大规模日志数据,比如Nginx、Tomcat、系统日志等功能。
2:logstash
可以通过插件实现日志收集和转发,支持日志过滤,支持普通log、自定义json格式的日志解析。
3:Kibana
主要是通过接口调用elasticsearch的数据,并进行前端数据可视化的展现。
--------------------------------------------------------------------------------------------------------------------------------
常见架构图:
根据架构我们需要准备如下机器,部署一下elk:
环境准备
公网IP |
内网IP |
主机名 |
部署服务 |
用途 |
192.168.6.124 |
172.16.1.124 |
elkstack01 |
elasticsearch、JDK |
存储日志的数据库 |
192.168.6.125 |
172.16.1.125 |
elkstack02 |
elasticsearch、JDK |
存储日志的数据库 |
192.168.6.126 |
172.16.1.126 |
elkstack03 |
Logstash、JDK |
收集日志、过滤日志 |
192.168.6.127 |
172.16.1.127 |
elkstack04 |
Redis、Kibana |
消息队列、日志展示 |
192.168.6.128 |
172.16.1.128 |
nginx01 |
nginx、filebeat |
修改nginx日志格式为json收集 |
192.168.6.129 |
172.16.1.129 |
tomcat01 |
tomcat、JDK、filebeat |
修改tomcat日志格式为json收集 |
设置时间同步:
注意:elk(切记保证集群之间时间一致非常重要)
echo '*/5 * * * * /usr/sbin/ntpdate time1.aliyun.com &>/dev/null' >> /var/spool/cron/root
------------------------------------------------------------------------------------------------------------------------------------
部署elasticsearch
在elkstack01 和 elkstack02两台机器分别安装elasticsearch,因为elasticsearch服务运行需要JAVA环境,所以两台服务器都需要安装JAVA环境。
注意:
如果你只是在虚拟机安装测试,内存至少要大于2G,否则可能会导致elasticsearch 起不来。并且服务启动会很慢,需要耐心等待一分钟左右。
安装JDK环境
下载地址: http://www.oracle.com/technetwork/java/javase/downloads/
建议下载rpm包安装,如果下载tar包,需要在/etc/profile 里面配置环境变量。
1:安装jdk
[root@elkstack01 tools]# rpm -ivh jdk-8u221-linux-x64.rpm
2: 检查jdk是否安装成功
[root@elkstack01 tools]# java -version
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)
2019-9-6 追加:
<官网说elasticsearch7.x内置了jdk ,经过后来测试,发现的确是内置jdk了。因此没必要安装jdk,当然安装也不影响>
-------------------------------------------------------------------------------------------------------------
3:安装elasticsearch - 使用yum localinstall 自动安装依赖包
下载地址:https://mirrors.tuna.tsinghua.edu.cn/elasticstack/7.x/yum/
[root@elkstack01 tools]# yum localinstall -y elasticsearch-7.1.1-x86_64.rpm
4:修改elasticsearch.yml配置文件 - (CentOS7中配置)
[root@elkstack01 ~]# grep -v “#” /etc/elasticsearch/elasticsearch.yml
#设置集群名称(想要其他节点加入同一个集群必须集群名称相同)
cluster.name: elk-cluster
#节点名称(通过此配置项来区分集群中的所有节点)
node.name: elk01
#elasticsearch数据存放目录
path.data: /data/elk/data
#elasticsearch日志存放目录
path.logs: /data/elk/logs
#内存锁设置(在CentOS7中支持内存锁并且要修改启动脚本)
bootstrap.memory_lock: true
#elasticsearch监听地址
network.host: 0.0.0.0
#elasticsearch服务端口
http.port: 9200
#####################################################
#配置所有集群节点IP
discovery.seed_hosts: ["192.168.6.124", "192.168.6.125"]
#配置master 主节点竞选
cluster.initial_master_nodes: ["elk01", "elk02"]
2019-9-6 追加:
注意中括号内的,号 后面一定要有空格,否则会导致集群发现不了。很多人粗心会忘记这个空格,导致查不出来错误。
######################################################
6:修改启动脚本 ,在server标签下面增加一句
[root@elkstack01 ~]# vim /usr/lib/systemd/system/elasticsearch.service
#修改内存限制
LimitMEMLOCK=infinity
重新加载启动脚本
[root@elkstack01 ~]# systemctl reload-daemon
7:创建目录并授权
创建数据目录
[root@elkstack01 ~]# mkdir -p /data/elk/data
创建日志目录
[root@elkstack01 ~]# mkdir -p /data/elk/logs
授权
[root@elkstack01 ~]# chown -R elasticsearch.elasticsearch /data/elk/
8:优化文件描述符
编辑limit文件:
[root@elkstack01 ~]# vim /etc/security/limits.conf
* soft memlock unlimited
* hard memlock unlimited
* soft nofile 131072
* hard nofile 131072
9: 编辑子配置文件(CentOS6 - 是 90-nproc.conf)
* soft nproc 2048
root soft nproc unlimited
10: 设置JVM最大最小内存限制
编辑配置文件
[root@elkstack01 ~]# vim /etc/elasticsearch/jvm.options
-Xms1g
-Xmx1g
11: 启停elasticsearch (centos6 /etc/init.d/启动)
[root@elkstack01 ~]# systemctl start elasticsearch
[root@elkstack01 ~]# systemctl stop elasticsearch
查看启动进程
[root@elkstack01 ~]# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 6185/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 6397/master
tcp6 0 0 :::9200 :::* LISTEN 6793/java
tcp6 0 0 :::9300 :::* LISTEN 6793/java
tcp6 0 0 :::22 :::* LISTEN 6185/sshd
tcp6 0 0 ::1:25 :::* LISTEN 6397/master
打开浏览器访问地址:http://192.168.6.124:9200/
{
"name" : "elk02", - #此节点名称
"cluster_name" : "elk-cluster", #此集群名称
"cluster_uuid" : "_na_", #此集群uuid
"version" : {
"number" : "7.0.0", #版本号
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "b7e28a7",
"build_date" : "2019-04-05T22:55:32.697037Z",
"build_snapshot" : false, #创建快照
"lucene_version" : "8.0.0",
"minimum_wire_compatibility_version" : "6.7.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search" #注释 口号
}
---------------------------------------------------------------------------------------------------------------------------------
在elkstack02 上面也按照如上步骤,安装。
[root@elkstack01 ~]# scp /etc/elasticsearch/elasticsearch.yml 192.168.6.125:/etc/elasticsearch/
[root@elkstack02 ~]# vim /etc/elasticsearch/elasticsearch.yml
#此行节点名称唯一即可
node.name: elk02
操作完成后,同样启动elasticsearch并且访问9200端口,检查是否安装成功。
访问地址:http://192.68.6.125:9200/
2019-9-6 追加:
使用curl方式,查看集群状态,下面会介绍使用插件看集群状态。
[root@elk124 ~]# curl -X GET "192.168.6.124:9200/_cat/nodes"
192.168.6.124 9 96 1 0.00 0.29 0.45 mdi - node-2
192.168.6.126 7 95 1 0.01 0.16 0.22 mdi * node-3
172.16.1.125 7 95 1 0.01 0.14 0.20 mdi - node-1
[root@elk124 ~]# curl -X GET "192.168.6.124:9200/_cat/health?pretty"
1567778441 14:00:41 my-application green 3 3 0 0 0 0 0 0 - 100.0%
-----------------------------------------------------------------------------------------------------------------------------------
安装elasticsearch插件
插件是为了完成不同的功能,官方提供了一些插件但大部分是收费的,另外也有一些开发爱好者提供的插件,可以实现对elasticsearch集群的状态监控与管理配置等功能,我们现在要安装的是Elasticsearch的head插件,此插件提供elasticsearch的web界面功能。
安装Elasticsearch的head插件时,要安装npm,npm的全称是Node Package Manager,是随同NodeJS一起安装的包管理和分发工具,它很方便让JavaScript开发者下载、安装、上传以及管理已经安装的包。
在Elasticsearch 5.x版本以后不再支持直接安装head插件,而是需要通过启动一个服务方式。
Github地址:https://github.com/mobz/elasticsearch-head
安装npm(只需要在一个节点安装即可,如果前端还有nginx做反向代理可以每个节点都装)
[root@elkstack01 ~]# yum install -y npm
进入下载head插件代码目录
[root@elkstack01 src]# cd /usr/local/
从GitHub上克隆代码到本地
[root@elkstack01 local]# git clone git://github.com/mobz/elasticsearch-head.git
克隆完成后,进入elasticsearch插件目录
[root@elkstack01 local]# cd elasticsearch-head/
#清除缓存,会有警告信息,忽略。
[root@elkstack01 elasticsearch-head]# npm cache clean -f
使用npm安装n模块(不同的项目js脚本所需的node版本可能不同,所以就需要node版本管理工具)
[root@elkstack01 elasticsearch-head]# npm install -g n
安装最新版本n模块
[root@elkstack01 elasticsearch-head]# n stable
生成grunt
[root@elkstack01 elasticsearch-head]# npm install grunt -save
确认生成grunt文件
[root@elkstack01 elasticsearch-head]# ll node_modules/grunt
执行安装grunt
[root@elkstack01 elasticsearch-head]# npm install
后台启动head插件(切记,必须在插件目录下执行启动命令)
[root@elkstack01 elasticsearch-head]# npm run start &
验证端口是否启动成功
[root@elkstack01 elasticsearch-head]# netstat -lntup
tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 11293/grunt
启动成功后,修改elasticsearch配置文件
[root@elkstack01 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml
#添加如下两行,开启跨域访问支持(添加在配置文件最后即可)
http.cors.enabled: true
http.cors.allow-origin: "*"
重启elasticsearch
[root@elkstack01 elasticsearch-head]# systemctl restart elasticsearch.service
如果启动成功了,则打开浏览器,访问:http://192.168.6.124:9100/
备注:
如果安装n模块遇到报错SSL认证问题,解决方案如下。
#取消npm的ssl验证
[root@elkstack01 elasticsearch-head]# npm config set strict-ssl false
到此 elasticsearch 就安装成功了。