一、什么是ELK
ELK是一套开源的日志管理方案,包括Elasticsearch、Logstash和Kibana三个组件。
1、E(Elasticsearch),Elasticsearch是一个分布式的搜索和数据分析引擎,用于存储平台收集的数据,提供检索和分析功能;提供了CRUD REST 的API。
2、L(Logstash),Logstash是开源的服务器端数据处理软件,能够从多个来源采集数据,转换数据,然后将数据发送到存储库中;
3、K(Kibana),Kibana能够可视化Elasticsearch中的数据,通过Kibana使得管理员能够自由地选择如何呈现数据。
在使用ELK时,三个组件最好选用相同的版本,不同版本之间可能会存在不兼容的问题,版本不同还不利于将来系统升级。除了ELK这三个组件,我们可能还需要X-Pack以便提供用户验证、访问控制等功能,X-Pack集中了Elasticsearch、Kibana和Logstash的安全功能。
二、为什么需要ELK
在日常工作时,经常会需要翻阅日志文件以便获得自己需要的信息,目前企业内部的设备、系统每天都会产生海量的数据,依靠人工搜索找寻所需信息的方式已经变得不可取,ELK便是为了解决这一问题的开源软件;ELK会对日志进行收集汇总,提供查询接口,方便相关人员快速查找自己感兴趣的日志信息。
三、环境准备
1、安装JDK
1)、Elasticsearch和Logstash的运行都需要依赖Java环境,所以需要提前安装Java,测试发现使用JDK-11在运行Elasticsearch时会报模块缺失的错误,因此本次选用的JDK-8。
2)、查看机器是否安装了openjdk,若已安装则需要先卸载,命令如下:
查看:rpm -qa | grep java
删除:使用yum -y remove命令删除已经安装的openjdk
3)、下载JDK安装包:
JDK官方下载地址:
https://www.oracle.com/technetwork/java/javase/downloads/index.html
下载方式:
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" https://download.oracle.com/otn-pub/java/jdk/8u191-b12/2787e4a523244c269598db4e85c51e0c/jdk-8u191-linux-x64.tar.gz
之所以使用这方法是因为官方下载资源需要同意其安全要求
4)、安装JDK
创建Java文件夹
cd /usr/local/
mkdir java
移动并解压安装包
mv jdk-8u191-linux-x64.tar.gz /usr/local/java/
tar -zxvf jdk-8u191-linux-x64.tar.gz
配置环境变量
vim /etc/profile
在文件末尾加入如下配置
JAVA_HOME=/usr/local/java/jdk1.8.0_191
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH
使能环境变量
source /etc/profile
5)、验证配置:
执行java -version若是输出如下,则表示配置完成
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
2、新建ELK执行用户
groupadd elsearch
useradd elsearch -g elsearch -p elasticsearch
四、安装Elasticsearch
1、下载
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.tar.gz
2、解压
tar -xzvf elasticsearch-6.2.4.tar.gz
3、修改配置文件
修改elasticsearch.yml配置文件
vim /usr/local/elk/6.2.4/elasticsearch-6.2.4/config/elasticsearch.yml
elasticsearch.yml文件中的network.host: 0.0.0.0可以修改监听IP;cluster.name: elk可以修改集群名称;node.name: node-1可以修改节点名称
4、分配权限及启动
chown -R elsearch:elsearch elasticsearch-6.2.4
进入到elasticsearch目录下,然后使用./bin/elasticsearch -d启动系统,并在后台保持运行(需要提前切换到elsearch用户)
启动后的输出中有如下内容,表示服务已经启动并监听相应接口:
[2018-12-04T13:16:45,116][INFO ][o.e.x.s.t.n.SecurityNetty4HttpServerTransport] [O3gvwcD] publish_address {127.0.0.1:9200}, bound_addresses {[::1]:9200}, {127.0.0.1:9200}
5、查看
使用netstat -ant和ps -aux | grep elasticsearch,可以对Elasticsearch运行情况进行查看
6、其他
使用java编写;bin里面是可执行文件;config里面是配置文件;lib下是依赖包;logs包含系统日志;modules包含核心的功能模块;plugins存放第三方的插件
五、安装Logstash
1、下载
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.2.4.tar.gz
2、解压
tar -xvzf logstash-6.2.4.tar.gz
3、配置
进入到/usr/local/elk/6.2.4/logstash-6.2.4/bin,新建一个logstash.conf文件,并新增以下内容:
input{
file{
path => ["/var/log/*.log"]
}
}
output{
elasticsearch{
hosts => ["172.16.86.10:9200"]
index => "logstash__log"
}
}
4、分配权限及启动
chown -R elsearch:elsearch logstash-6.2.4
进入/usr/local/elk/6.2.4/logstash-6.2.4/bin,然后执行./logstash -f logstash.conf
六、安装Kibana
1、下载
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.2.4-linux-x86_64.tar.gz
2、解压
tar -xzvf kibana-6.2.4-linux-x86_64.tar.gz
3、修改配置文件
修改kibana.yml文件
vim kibana-6.2.4-linux-x86_64/config/kibana.yml
kibana.yml中server.host更改为"0.0.0.0",以便外网访问;server.port可以修改监听端口,默认是5601;elasticsearch.url可以修改elasticsearch登录地址,默认是http://localhost:9200;logging.dest可以修改日志输出位置
4、分配权限及启用
chown -R elsearch:elsearch kibana-6.2.4-linux-x86_64
进入到kibana的安装目录,然后在后台启动运行启动文件
cd /usr/local/elk/6.2.4/kibana-6.2.4-linux-x86_64
./bin/kibana -d
5、查看
使用netstat -ant查看端口是否处于监听状态,但是ps -aux | grep kibana是查不到kibana运行状态的,因为kibana是使用node.js编写的,软件运行是依赖于nodde.js
6、其他
Kibana是使用node.js编写的
七、安装X-Pack
1、下载
wget https://artifacts.elastic.co/downloads/packs/x-pack/x-pack-6.2.4.zip
2、X-Pack提供了ELK三个部件的扩展功能,分别在三个地方进行安装,不用解压文件
3、在Elasticsearch中安装X-Pack
进入到elasticsearch的bin文件夹,然后执行安装命令
cd /usr/local/elk/6.2.4/elasticsearch-6.2.4/bin
./elasticsearch-plugin install file:///usr/local/elk/6.24/x-pack-6.2.4.zip
4、在Kibana中安装X-Pack
进入到kibana的bin文件夹,然后执行安装命令
cd /usr/local/elk/6.2.4/kibana-6.2.4-linux-x86_64/bin/
./kibana-plug install x-pack-6.2.4.zip
5、设置X-Pack在各个系统的初始登录密码
进入到elasticsearch中的x-pack文件夹,然后执行命令自动为ELK生成密码,并将密码输出到控制台
/usr/local/elk/6.2.4/elasticsearch-6.2.4/bin/x-pack/
./setup-passwords auto
6、配置Kibana
对kibana的配置文件kibana.yml进行修改
/usr/local/elk/6.2.4/kibana-6.2.4-linux-x86_64/config/kibana.yml
在文件中添加如下内容
elasticsearch.username: "kibana"
elasticsearch.password: "ReyJRHQdEfK1NE46vsgd"
xpack.security.enabled: true
7、配置Elasticsearch
对elasticsearch-6.2.4的配置文件elasticsearch.yml进行修改
cd /usr/local/elk/6.2.4/elasticsearch-6.2.4/config/elasticsearch.yml
在文件中添加如下内容
xpack.security.enabled: true
八、设置开机自动
1、Elasticsearch
1)、建立名为elsearch文件
2)、将一下内容添加到文件
#!/bin/sh
#chkconfig: 2345 80 05
#description: elasticsearch
export JAVA_HOME=/usr/local/java/jdk1.8.0_191
export JAVA_BIN=/usr/local/java/jdk1.8.0_191/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
case "$1" in
start)
sysctl -w vm.max_map_count=655360
su elsearch<<!
cd /usr/local/elk/6.2.4/elasticsearch-6.2.4
./bin/elasticsearch -d
!
echo "elasticsearch startup"
;;
stop)
es_pid=`ps aux|grep elasticsearch | grep -v 'grep elasticsearch' | awk '{print $2}'`
kill -9 $es_pid
echo "elasticsearch stopped"
;;
restart)
es_pid=`ps aux|grep elasticsearch | grep -v 'grep elasticsearch' | awk '{print $2}'`
kill -9 $es_pid
echo "elasticsearch stopped"
su elsearch<<!
cd /usr/local/elk/6.2.4/elasticsearch-6.2.4
./bin/elasticsearch -d
!
echo "elasticsearch startup"
;;
*)
echo "start|stop|restart"
;;
esac
exit $?
3)、保存上述文件后,将文件移动到/etc/init.d/目录下,并对文件做如下设置
chmod +x elsearch
4)、设置开机自动启动
chkconfig --add elsearch
2、Logstash
1)、创建Logstash文件
2)、将以下内容添加到文件
#!/bin/sh
#chkconfig: 2345 80 05
#description: Logstash
case "$1" in
start)
su elsearch<<!
cd /usr/local/elk/6.2.4/logstash-6.2.4
./bin/logstash -f logstash.conf &
!
echo "Logstash startup"
;;
esac
exit $?
3)、保存上述文件后,将文件移动到/etc/init.d/目录下,并对文件做如下设置
chmod +x logstash
4)、设置开机自动启动
chkconfig --add logstash
3、Kibana
1)、创建kibana文件
2)、将以下内容添加到文件
#!/bin/sh
#chkconfig: 2345 80 05
#description: Kibana
case "$1" in
start)
su elsearch<<!
cd /usr/local/elk/6.2.4/kibana-6.2.4-linux-x86_64
./bin/kibana &
!
echo "Kibana startup"
;;
esac
exit $?
3)、保存上述文件后,将文件移动到/etc/init.d/目录下,并对文件做如下设置
chmod +x elsearch
4)、设置开机自动启动
chkconfig --add kibana
九、故障记录
1、运行Elasticsearch报如下错误
java.lang.RuntimeException: can not run elasticsearch as root
故障原因:
出于系统安全层面考虑,elasticsearch不能使用root用户运行
解决方案:
新建用户用于运行elasticsearch软件
groupadd elsearch
useradd elsearch -g elsearch -p elasticsearch
更改elasticsearch文件夹及内部文件所属用户及用户组
chown -R elsearch:elsearch elasticsearch-6.2.4
2、在更改elasticsearch.yml的监听地址后,运行Elasticsearch报错:
[2018-12-04T14:51:01,451][INFO ][o.e.b.BootstrapChecks ] [O3gvwcD] bound or publishing to a non-loopback address, enforcing bootstrap checks ERROR: [2] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
故障原因:
序号[1]的原因是Elasticsearch的文件描述符配置要求为32k或64k
序号[2]的原因是操作系统的vm.max_map_count参数设置太小,需要调整该参数
解决方案:
序号[1]的解决方案为修改安全配置文件vi /etc/security/limits.conf,在该文件末尾加入如下内容:
elsearch soft nofile 65536
elsearch hard nofile 65536
* soft nproc 4096
* hard nproc 4096
其中elsearch是用户名,*表示所有用户
序号[2]的解决方案为修改/etc/sysctl.conf的配置,在文件后直接添加vm.max_map_count=655360,或者在root用户下执行sysctl -w vm.max_map_count=655360,可以使用sysctl -a | grep "vm.max_map_count"查看更改结果
3、安装x-pack时提示如下错误:
Exception in thread "main" java.nio.file.NoSuchFileException: /usr/local/elk/elasticsearch-6.5.1/plugins/.installing-7782325561649031705/plugin-descriptor.properties
故障原因:
没有使用正确权限运行文件
解决方法:
切换到elasticsearch的执行账户下,再运行该命令。
4、在elesticreasearch中安装x-pack时报错以下文开头:
Exception in thread "main" java.net.UnknownHostException: usr
故障原因:
x-pack文件夹没有赋予elasticsearch运行账户可执行权限
解决方法:
在root用户下执行赋权命令
chown -R elsearch:elsearch x-pack-6.2.4.zip
5、Kibana中安装X-Pack时,一直卡在Optimizing and caching browser bundles...,最后报错或者进程自动被kill,再次运行Kibana时会有报错
故障原因:
Kibana安装X-Pack需要更多的虚拟内存空间
解决方法:
为服务器添加虚拟内存空间,在将虚拟内存提升到4G 以上后问题解决
6、安装Elasticsearch会报如下错误
which: no java in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
could not find java; set JAVA_HOME or ensure java is in PATH
故障原因:
操作系统中没有安装Java
解决方法:
为操作系统安装Java,本次测试使用的是JDK-8,在测试使用JDK-11发现会报错误,具体安装方法见前文
十、参考文档
本文借鉴了以下文章的内容
http://www.54tianzhisheng.cn/2017/09/09/Elasticsearch-install/
https://blog.csdn.net/tzs_1041218129/article/details/78907350
https://my.oschina.net/liuyuantao/blog/1798724
https://blog.csdn.net/whg18526080015/article/details/73737546
https://www.elastic.co/guide/en/logstash/current/config-examples.html