ELKstack课程大纲

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的前端设计比较绚丽,而且操作简单


什么是Elasticsearch?

是一个高度可扩展的开源全文搜索和分析引擎,它可实现数据的实时全文搜索搜索、支持分布式可实现高可用、提供API接口,可以处理大规模日志数据,比如Nginx、Tomcat、系统日志等功能。


什么是Logstash?

可以通过插件实现日志收集和转发,支持日志过滤,支持普通log、自定义json格式的日志解析。


什么是Kibana?

主要是通过接口调用elasticsearch的数据,并进行前端数据可视化的展现。


ELKstack部署及配置

环境准备

IP 主机名 部署服务 用途
192.168.6.240 node1 Logstash、JDK 收集日志、过滤日志
192.168.6.241 node2 elasticsearch、JDK 存储日志的数据库
192.168.6.242 node3 elasticsearch、JDK 存储日志的数据库
192.168.6.243 node4 Redis、Kibana 消息队列、日志展示
192.168.6.244 node5 nginx、filebeat 修改nginx日志格式为json收集
192.168.6.245 node6 tomcat、JDK、filebeat 修改tomcat日志格式为json收集

安装包准备

安装包名 用途
elasticsearch-5.3.3.rpm 存储日志的数据库
elasticsearch-head.tar.gz elasticsearch的web界面插件
logstash-5.3.0.rpm 日志收集、日志分析工具
kibana-5.3.0-x86_64.rpm 日志展示、日志查询工具
filebeat-5.3.2-x86_64.rpm 日志收集工具(比Logstash轻量)
jdk-8u151-linux-x64.tar.gz JAVA容器(es、Logstash、tomcat需要
nginx-1.10.3.tar.gz 测试收集nginx日志
apache-tomcat-8.0.38.tar.g 测试收集tomcat日志
redis-3.2.8.tar.gz 消息队列工具

Elasticsearch环境准备

关闭防火墙

#CentOS6 关闭防火墙
[root@linux-node2 ~]# /etc/init.d/iptables stop
#CentOS7 关闭防火墙
[root@linux-node2 ~]# systemctl stop firewalld

关闭SELINUX

#临时关闭
[root@linux-node2 ~]# setenforce 0
setenforce: SELinux is disabled
#永久关闭
[root@linux-node2 ~]# vim /etc/sysconfig/selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled    ==>      //原来是enforcing 改成disabled
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

设置epel源

#CentOS6 下载epel源
[root@linux-node2 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
#CentOS7 下载epel源
[root@linux-node2 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

设置时间同步

#同步服务器时间(切记保证集群之间时间一致非常重要)
[root@linux-node2 ~]# ntpdate time1.aliyun.com
28 Feb 14:11:28 ntpdate[8904]: step time server 203.107.6.88 offset 3168820.831817 sec

部署Elasticsearch

在node1 和 node2 两台机器分别安装elasticsearch,因为elasticsearch服务运行需要JAVA环境,所以两台服务器都需要安装JAVA环境。

安装JDK环境

下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

#解压JDK安装包,将JDK安装包移动到安装目录下
[root@linux-node2 ~]# tar xf jdk-8u151-linux-x64.tar.gz -C /usr/local/
#做软链接(方便日后升级)
[root@linux-node2 ~]# ln -s /usr/local/jdk1.8.0_151 /usr/local/jdk1.8

#添加环境变量
[root@linux-node2 ~]# cat /etc/profile.d/jdk1.8.0_151.sh
export JAVA_HOME=/usr/local/jdk1.8
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
[root@linux-node2 ~]# source /etc/profile
#检查是否加载成功
或
[root@linux-node2 ~]# ln -sv /usr/local/jdk1.8/bin/* /usr/local/bin/

#加载环境变量
[root@linux-node2 ~]# java -version
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

安装elasticsearch

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

#安装elasticsearch使用yum localinstall 自动安装依赖包
[root@linux-node2 ~]# yum localinstall elasticsearch-5.3.3.rpm

修改配置文件

如果系统是CentOS6则做以下修改

[root@linux-node2 ~]# grep "^[a-Z]" /etc/elasticsearch/elasticsearch.yml
#设置集群名称(想要其他节点加入同一个集群必须集群名称相同)
cluster.name: elk-cluster
#节点名称(通过此配置项来区分集群中的所有节点)
node.name: elk01
#elasticsearch数据存放目录
path.data: /data/elk/data
#elasticsearch日志存放目录
path.logs: /data/elk/logs
#CentOS6不支持内存锁功能,所以要关闭内存锁
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
#elasticsearch监听地址
network.host: 0.0.0.0
#elasticsearch服务端口
http.port: 9200
#配置所有集群节点IP
discovery.zen.ping.unicast.hosts: ["192.168.6.240", "192.168.6.241"]

如果系统是CentOS7则做以下修改

#查看配置文件修改部分内容(CentOS7中配置)
[root@linux-node2 ~]# grep "^[a-Z]" /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.zen.ping.unicast.hosts: ["192.168.6.240", "192.168.6.241"]

#修改启动脚本
[root@linux-node2 ~]# vim /usr/lib/systemd/system/elasticsearch.service
#修改内存限制(去掉此行注释)
LimitMEMLOCK=infinity
#重新加载启动脚本
[root@linux-node2 ~]# systemctl reload-daemon

创建目录并授权

#创建数据目录
[root@linux-node2 ~]# mkdir -p /data/elk/data
#创建日志目录
[root@linux-node2 ~]# mkdir -p /data/elk/logs
#授权
[root@linux-node2 ~]# chown -R elasticsearch.elasticsearch /data/elk/

优化文件描述符

#编辑limit文件
[root@linux-node2 ~]# vim /etc/security/limits.conf
* soft memlock unlimited
* hard memlock unlimited
* soft nofile 131072
* hard nofile 131072

#编辑子配置文件(CentOS6)
[root@linux-node2 ~]# vim /etc/security/limits.d/90-nproc.conf
*          soft    nproc     2048
root       soft    nproc     unlimited

设置JVM最大最小内存限制

#编辑配置文件
[root@linux-node2 ~]# vim /etc/elasticsearch/jvm.options
-Xms1g
-Xmx1g

启停elasticsearch

#CentOS6 启动、停止elasticsearch
[root@linux-node2 ~]# /etc/init.d/elasticsearch start
[root@linux-node2 ~]# /etc/init.d/elasticsearch stop
#CentOS7 启动、停止elasticsearch
[root@linux-node2 ~]# systemctl start elasticsearch
[root@linux-node2 ~]# systemctl stop elasticsearch
#查看启动进程
[root@linux-node2 ~]# ps -ef|grep java
#查看端口
[root@linux-node2 ~]# netstat -lntup
tcp        0      0 :::9200                     :::*                        LISTEN      10872/java
tcp        0      0 :::9300                     :::*                        LISTEN      10872/java

验证启动elasticsearch后的页面

[root@linux-node1 ~]# curl 192.168.6.241:9200
{
  #此节点名称
  "name" : "elk01",
  #此集群名称
  "cluster_name" : "elk-cluster",
  #集群的uuid
  "cluster_uuid" : "rd170kMOREOGuVsy9_EHfQ",
  "version" : {
  #elasticsearch版本
    "number" : "5.3.3",
    "build_hash" : "65e26e6",
    "build_date" : "2017-05-22T12:03:12.318Z",
  #创建快照
    "build_snapshot" : false,
  #Lucene语法版本(基于Lucene做日志搜索)
    "lucene_version" : "6.4.2"
  },
  #口号
  "tagline" : "You Know, for Search"
}

其他节点安装并加入集群

安装其他节点,步骤和上面一样,修改配置文件时,直接将elk01节点的配置文件scp(拷贝)过去,然后在配置文件中讲节点名称修改后启动即可。

#发送配置文件到其他节点
[root@linux-node3 ~]# scp /etc/elasticsearch/elasticsearch.yml  172.16.1.52:/etc/elasticsearch/
#修改其他节点配置文件
[root@linux-node3 ~]# vim /etc/elasticsearch/elasticsearch.yml
#此行节点名称唯一即可
node.name: elk02

操作完成后,同样启动elasticsearch并且访问9200端口,检查是否安装成功。

[root@linux-node1 ~]# curl 192.168.6.242:9200
{
  "name" : "elk02",
  "cluster_name" : "elk-cluster",
  "cluster_uuid" : "rd170kMOREOGuVsy9_EHfQ",
  "version" : {
    "number" : "5.3.3",
    "build_hash" : "65e26e6",
    "build_date" : "2017-05-22T12:03:12.318Z",
    "build_snapshot" : false,
    "lucene_version" : "6.4.2"
  },
  "tagline" : "You Know, for Search"
}

可以看到节点名称是不一样的。


安装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@linux-node2 ~]# yum install -y npm
#进入下载head插件代码目录
[root@linux-node2 src]# cd /usr/local/
#从GitHub上克隆代码到本地
[root@linux-node2 local]# git clone git://github.com/mobz/elasticsearch-head.git
#克隆完成后,进入elasticsearch插件目录
[root@linux-node2 local]# cd elasticsearch-head/
#清除缓存
[root@linux-node2 elasticsearch-head]# npm cache clean -f
#使用npm安装n模块(不同的项目js脚本所需的node版本可能不同,所以就需要node版本管理工具)
[root@linux-node2 elasticsearch-head]# npm install -g n
#安装最新版本n模块
[root@linux-node2 elasticsearch-head]# n stable
#生成grunt
[root@linux-node2 elasticsearch-head]# npm install grunt -save
#确认生成grunt文件
[root@linux-node2 elasticsearch-head]# ll node_modules/grunt
#执行安装grunt
[root@linux-node2 elasticsearch-head]# npm install
#后台启动head插件(切记,必须在插件目录下执行启动命令)
[root@linux-node2 elasticsearch-head]# npm run start &
#验证端口是否启动成功
[root@linux-node2 elasticsearch-head]# netstat -lntup
tcp        0      0 0.0.0.0:9100                0.0.0.0:*                   LISTEN      11293/grunt
#启动成功后,修改elasticsearch配置文件
[root@linux-node2 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml
#添加如下两行,开启跨域访问支持(添加在配置文件最后即可)
http.cors.enabled: true
http.cors.allow-origin: "*"
#重启elasticsearch
[root@linux-node2 elasticsearch-head]# /etc/init.d/elasticsearch restart

如果启动成功了,则打开浏览器,访问:http://192.168.6.241:9100/

報錯:

#取消npm的ssl验证
[root@linux-node2 elasticsearch-head]# npm config set strict-ssl false

文档更新时间: 2019-08-01 13:19   作者:李延召