作者近日在一台笔记本电脑上搭建了ELK,包括Elasticsearch, Logstash和Kibana,版本都是6.2.4。注意只用了一台电脑。并且用Winlogbeat收集本机的日志,供ELK分析。在搭建过程中走过许多坑,特在此分享经验,供同学者参考。
电脑:Lenovo K2450笔记本,4G内存,Windows 7 64位专业中文版
虚拟化环境:VirtualBox 5.2.12
在VirtualBox中创建一个虚拟机,2132M内存,安装操作系统CentOS 7.2 64位。
2.1更新Linux系统软件包
$yum update
2.2变更主机名
$hostname elk-test
2.3增加一个用户
因为Elasticsearch不能在root账号下运行,所以需要创建一个账号,作者使用的是elk-test。
$useradd elk-test
把elk-test加入sudo列表。改用root账号,先获得修改权限。
$chmod u+w /etc/sudoers
再修改文件。
$vi /etc/sudoers
在root账号那一行下边增加一行。
elk-test ALL=(ALL) ALL
以下当遇有需要管理员权限的操作就可以用sudo了。
2.4 虚拟机的网卡设置
这个虚拟机设置了两块虚拟网卡,第1块设置为“仅主机(Host-Only)网络”,第2块设置为“桥接网络”。作者的目的是使虚拟机得到一个独立的IP地址。关于VirtualBox虚拟机网络设置问题,网上的许多帖子介绍,有兴趣的读者可以自行寻找。
由于作者的虚拟机是最小化安装,所以没有ifconfig命令,十分不便,于是运行以下命令安装网络工具。
$yum install net-tools.x86_64
运行ifconfig命令后,知道从DHCP得到的IP地址是192.168.1.112。
2.5 安装JDK
作者曾经尝试安装JDK9但在配置时总是遇到问题,所以安装了JDK8。
作者的网络环境中有一台群晖NAS,上面开启了FTP服务。作者的理念是:一切软件安装包、配置文件也要像代码一样,进行版本管理。虽然FTP在版本管理方面不如GIT,考虑到FTP使用方便,而且搭建这个系统不需要与他人协作,所以就把安装包和各个版本的配置文件保存在FTP中,需要时下载下来。当然,用WinSCP一类工具软下载也很方便。
用以下命令从FTP上下载。
$cd /usr/program
$Curl –O ftp://username:[email protected]/Software/java/jdk-8u162-linux-x64.tar
解压缩。
$tar -vxf jdk-8u162-linux-x64.tar
JDK1.8安装在/usr/program/下,在/etc/profile.d/中写好java.sh文件。
进入/etc/profile.d/创建java.sh文件。
$vi java.sh
JAVA_HOME=/usr/program/jdk1.8.0_162
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=$CLASSPATH:$JAVA_HOME/lib
export JAVA_HOME PATH CLASSPATH
然后执行。
$source java.sh
再看看是否安装与配置正确。
$java -version
如果正常应该看到以下显示。
Winlogbeat是一个代理程序,它把Windows操作系统的日志传送给Logstash或者Elasticsearch。当然网内的其它Windows服务器上也可以安装这个Winlogbeat,经过配置后向Logstash传送日志。
安装包的下载地址为:https://artifacts.elastic.co/downloads/beats/winlogbeat/winlogbeat-6.2.4-windows-x86_64.zip
解压后,把文件夹放在C:\中。
修改winlogbeat.yml文件,设置日志收集参数,作者希望将这个电脑中的Windows日志发送给Logstash。所以修改了日志收集参数和转发服务器参数。
在Logstash output这一节中,将原例修改为:
hosts:[“192.168.1.112:5044”]
需要把Elasticsearch output 中的hosts一行注释。作者最初没有注释掉这一行,结果导致Winlogbeat工作不正常。
注意Window操作系统中的防火墙设置,要允许访问到Logstash的5044端口。
做好以上准备工作后,就可以安装Winlogbeat了。
以管理员身份运行Powershell,执行以下命令
PS C:\>.\install-service-winlogbeat.ps1
作者在运行后遇到错误,在网上查了一些资料,可以用以下命令解决。
PS C:\>set-executionpolicy remotesigned
回答:y
PS C:\>set-executionpolicy bypass
执行以上两条命令后,再运行,就可以安装上了。网上有贴子详细介绍了如何在Powershell下获得执行脚本的权限,有兴趣的读者可以自行在网上寻找。
最后就是运行Winlogbeat。
PS C:/>.\winlogbeat.exe -c winlogbeat.yml
没有报错,但也没有其它文章中写的有两行成功的提示。
安装包的下载地址为:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.tar.gz
作者同样是从FTP服务器上将安装文件下载到/usr/program中。
然后解压缩。
进入/usr/program/elasticsearch-6.2.4目录,运行以下命令。
$./bin/elasticsearch
如果看到类似以下内容,则说明运行正常。
Elasticsearch支持多节点运行,作者是单节点运行Elasticsearch,所以显示状态的屏幕输出没有什么意义。
作者在第一次运行时遇到系统报错,经查是内存不足造成的(最初只分配了一个G)。于是关掉虚拟机,把内存调高到2G,重启后再运行就好了。
如果不想看到运行状态,可以用以下命令,以守护进程方式运行Elasticsearch。
$./bin/elasticsearch -d
这时如果想看看是否安装成功,软件可以正常运行,可以在浏览器中输入地址:http://192.168.1.112:9200。
如果看到类似以下显示则说明Elasticsearch安装成功。
安装包的下载地址为:https://artifacts.elastic.co/downloads/kibana/kibana-6.2.4-linux-x86_64.tar.gz
作者同样是从FTP服务器上将安装文件下载到/usr/program中。
然后解压缩。
$sudo tar -xvf cabana-6.2.4-linux-x86_64.tar.gz
配置Kibana。
$vi config/kibana.yml
设置elasticsearch.url到Elasticsearch实例。
server.host:”192.168.1.112”
elasticsearch.url:”http://192.168.1.112:9200”
server.port:5601
server.host:”0.0.0.0”
配置完成后运行Kibana,
$ sudo ./bin/kibana
在浏览器内输入http://192.168.1.112:5601可以看到Kibana的界面。
安装包的下载地址为:https://artifacts.elastic.co/downloads/logstash/logstash-6.2.4.tar.gz
作者同样是从FTP服务器上将安装文件下载到/usr/program中。
然后解压缩。
在配置Logstash时,需要创建一个文件,这个文件以.conf为后缀,这个配置文件指定了要使用的插件以及每个插件的设置。可以引用配置中的事件字段并使用条件来处理符合特定条件的事件。 作者在logstash文件夹中创建了一个文件:logstash.conf,文件内容如下:
input{
beats{
port=>5044
}
stdin{}
}
output{
elasticsearch{
hosts=>"192.168.1.112:9200"
index=>"winlogbeat_index"
}
stdout{
codec=>rubydebug
}
}
作者在这里没有使用条件筛选(filter)。input下的beats是一个插件。output下指出了两种输出方式:elasticsearch和stdout,后者直接输出在命令行中,如果不想监视运行状态可以不要这一节。
以上安装工作全部完成后,逐一运行各个软件,观察运行效果。
7.1 在VirtualBox中运行CentOS虚拟机,使用elk-test账号登录。
运行Elasticsearch。
$cd /usr/program/elasticsearch-6.2.4
$./bin/elasticsearch -d
7.2 在虚拟机中运行Kibana。
$cd /usr/program/kibana-6.2.4-linux-x86_64
$./bin/kibana
7.3 运行Logstash。
运行一个PuTTY,通过PuTTY启动Logstash。
在PuTTY中登录192.168.1.112:22,账号是elk-test。运行Logstash。
$cd /usr/program/logstash-6.2.4
$./bin/logstash -f logstash.conf
7.4 在本机(Windows)中以管理员身份运行PowerShell。
PS C:\>cd /winlogbeat
PS C:..>.\winlogbeat.exe -c winlogbeat.yml
这时在Logstash运行界面(PuTTY)可以看到大量Windows的日志出现,说明beat在向logstash传递日志。
7.5 打开浏览器,输入http://192.168.1.112:5601。打开Kibana。
7.6 在Kibana中配置。
进入Management-Index Patterns,点击Create Index Patterns,在筛选格内填写win*或winlogbeat-index,完成创建工作。
7.7 在Kibana中查看日志。
在左边的导航栏中选择Discover。可以看到Windows日志,通过选择过滤器对内容进行筛选。
更多的ELK功能,作者还在学习中。