实验:ELK实时日志分析平台环境搭建
这一篇博文是在服务器上做的
虚拟机上的markdown格式下载
1.ELK简介
(1) ELasticSearch:Elasticsearch是一个高度可伸缩的开源全文搜索和分析引擎。它允许用户快速和接近实时地存储、搜索和分析大量数据。
(2) Logstash:Logstash是一个开源的服务器端数据处理管道,可以同时从多个数据源获取数据,并对其进行转换、过滤、增强等,然后将其发送到其地方。
(3) Beats:Beats是用于单用途数据托运人的平台,它们以轻量级代理的形式安装,并将来自成百上千台机器的数据发送到Logstash或Elasticsearch。包含:filebeat,metricbeat,packetbeat等。
(4) Kibana:Kibana是一个开源的分析和可视化平台,设计用于和Elasticsearch一起工作,可以用来搜索,查看,并和存储在Elasticsearch索引中的数据进行交互,轻松地执行高级数据分析,并且以各种图标、表格和地图的形式可视化数据。
2. 实验环境
(1) 通过VMWare等虚拟机软件搭建Ubuntu系统进行实验
(2) JDK环境:请自行为Ubuntu安装JDK(Server JRE),并配置环境变量(sudo apt install openjdk-8-jdk-headless)
3. ELK环境搭建
(1) 环境布局
演示布局如下图所示:
在实际应用中,Beats和Logstash一般是部署在不同服务器上的。由于服务器资源有限,这里演示时将两者部署在同一个服务器上。
(2) 软件包下载
https://www.elastic.co/downloads/past-releases#elasticsearch
下载ElasticSearch、Logstash、Kibana、Beats(FileBeat、MetricBeat、PacketBeat等)
创建elk目录
mkdir /usr/local/elk
(3) ElasticSearch部署:
① 解压文件到上一步创建的/usr/local/elk目录下
tar -zxvf elasticsearch-6.7.1.tar.gz -C /usr/local/elk/
Elasticsearch目录结构:
Bin | 二进制脚本,例如ES启动脚本elasticsearch |
Lib | ES依赖包目录,包含ES用到的jar包 |
Logs | 日志文件目录 |
Config | 配置文件目录,elasticsearch.yml为ES的配置文件 |
Modules | ES模块目录 |
Plugins | 一些常用插件 |
Data | ES索引等数据默认存放在根目录下的data文件夹里,初次运行ES后便会自动生成,也可在config/elasticsearch.yml更改数据存放路径 |
② 配置ES
使用vim打开elasticsearch.yml(关于vim的基本使用请自行学习)
cd /usr/local/elk/elasticsearch-6.7.1
vim config/elasticsearch.yml
这里只进行最基础的配置,当然也可以使用ES默认的配置
③ 运行Elasticsearch
1) 前置操作
当我们在root用户下启动ES时,会有以下报错:
这是出于系统安全考虑设置的条件。由于ElasticSearch可以接收用户输入的脚本并且执行,为了系统安全考虑,建议创建一个单独的用户用来运行ElasticSearch。
新用户的密码为:zhang2000
cd /usr/local/elk/
ls
groupadd elk
useradd elk-user -g elk
passwd elk-user
chown -R elk-user:elk elasticsearch-6.7.1/
cd elasticsearch-6.7.1/
ls -alh
2) 启动ES
可以直接先改文件,跳转至下面直接修改的标签操作也可以
切换到elk-user用户,进入bin文件夹,运行elasticsearch文件,后面的&表示后台运行
su elk-user
cd bin
./elasticsearch &
观察到有WARN等问题,开始处理这些错误
先将这个elasticsearch进程杀死,上面进程号写的是26127(随机的,每个人的不一样)
如果不知道也可以使用命令查看:
1.查找ES进程
ps -ef | grep elastic
2.杀掉ES进程
kill -9 26127(进程号)
直接修改
报错里有
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
这是垃圾处理器不建议使用了,我们换成UseU1GC
进入/usr/local/elk/elasticsearch-6.7.1/config将jvm.options文件稍作修改
将UseConcMarkSweepGC换成UseU1GC
vim /usr/local/elk/elasticsearch-6.7.1/config/jvm.options
对于
[2022-06-23T13:40:38,563][WARN ][o.e.b.BootstrapChecks ] [yn2OCgc] max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
vim里输入i,左下角会显示插入表示开始修改文件了,修改完成后输入ESC键,然后输入:wq回车就好了。
然后切换到root用户下,使用vim修改/etc下的sysctl.conf文件
su root
vim /etc/sysctl.conf
我的文件里是空的,所以加了过后有效行也只有一行
接着修改最后一个问题:
[2022-06-23T13:40:38,563][WARN ][o.e.b.BootstrapChecks ] [yn2OCgc] max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
先修改文件:
vim /etc/security/limits.conf
在文件中添加
* soft nofile 65536
* hard nofile 65536
然后重新登录用户:
su root
最后验证是否生效
ulimit -H -n
现在再启动ES:
su elk-user
cd /usr/local/elk/elasticsearch-6.7.1/bin
./elasticsearch &
可以看到全是INFO只有一个WARN,经过搜索发现可以不用管。
再尝试访问本地的9200端口:
curl http://localhost:9200
输出正确,最后查看进程号,并且关闭进程:
查看进程号:
ps -ef | grep elastic
可以看到进程号是7266,其实在你启动ES的时候,输出的第一条信息就是进程的PID,如下,所以是对应的
关闭进程号,再次查看:也可以等外网访问完成了再关闭
kill -9 你的进程号(我的就是7266)
ps -ef | grep elastic
可以看到进程已被杀死,剩下的仍在运行的是当前命令
3) 验证ES外网是否可以访问
curl 10.64.26.86:9200
每个人的地址不同,后面就是你的服务器地址加端口号9200
再在windows上试试访问http://10.64.26.86:9200(前面的地址是自己的)
你会发现无访问此网站,为什么呢?我们之前使用tomcat的时候做了一件什么事?
开启防火墙,所以我们来试试
firewall-cmd --zone=public --add-port=9200/tcp --permanent
systemctl restart firewalld.service
再次访问http://10.64.26.86:9200/
成功啦
(4) Kibana部署:
① 解压文件到 /usr/local/elk
首先进入elk目录,再解压:
cd /usr/local/elk
tar -zxvf kibana-6.7.1-linux-x86_64.tar.gz -C /usr/local/elk
解压需要一小会儿
Kibana重要目录结构:
Bin | 包括kibana在内的启动kibana服务和kibana-plugin来安装插件的二进制脚本 |
Config | 包括kibana.yml的配置文件 |
Data | 由kibana和它的插件写入磁盘的数据文件的位置 |
Optimize | 源码编译后的文件,浏览器实际访问的资源 |
Plugins | 插件目录 |
Node_modules | 第三方依赖库 |
② 配置Kibana
使用vim打开kibana.yml
vim /usr/local/elk/kibana-6.7.1-linux-x86_64/config/kibana.yml
③ 运行Kibana
1) 启动Kibana
进入kibana的bin文件夹
cd /usr/local/elk/kibana-6.7.1-linux-x86_64/bin
ls
运行kibana
./kibana &
报了4个warning
一个error
warning不想改了,校园网断了,睡了一晚第二天再启动的时候error没了,增加了个warning,查询后发现无伤大雅…然后关了进程再启动一次,这个warning也消失了…
2) 查看kibana是否正确运行:
ps -ef | grep kibana
ps -ef | grep node
netstat -tunlp | grep 5601
第一条命令检查kibana是否启动,显然没查询到PID,第二条命令检查node是否运行,显然是在运行,由于kibana在node里运行,且使用5601端口,第三条命令说明Kibana已经在运行
3) 验证Kibana外网是否可访问
打开浏览器,输入地址:x.x.x.x:5601(x.x.x.x是你部署kibana的服务器地址),如果显示该页面,则表示成功访问。
显然会失败,为什么呢?(实验指南上没说开启防火墙的端口,坏。
因为又忘记打开防火墙的5601端口了
firewall-cmd --zone=public --add-port=5601/tcp --permanent
systemctl restart firewalld.service
设置后再次访问:
点击try our sample data,就有指导上的页面了
(5) Logstash部署:
① 切换至部署个人项目的服务器,解压文件到/usr/local/elk
cd /usr/local/elk
tar -zxvf logstash-6.7.1.tar.gz -C /usr/local/elk
看一下目录下有些啥
cd /usr/local/elk/logstash-6.7.1
ls
Logstash重要目录结构:
Bin | 脚本程序 |
Config | 存放配置文件,包括logstash.yml |
Data | 存放数据 |
② 配置logstash管道
在config文件夹中创建logstash.conf文件
可以
cd config
ls
vim logstash.conf
然后输入
也可以在xftp里右键logstash-sample.conf用记事本编辑,然后复制里面的内容,接着右键空白处新建logstash.conf,然后粘贴。
当然最简单的是直接不建。
③ 启动logstash
先打开防火墙的5044端口:
firewall-cmd --zone=public --add-port=5044/tcp --permanent
systemctl restart firewalld.service
cd /usr/local/elk/logstash-6.7.1/bin
如果你新建了logstash.conf则使用下面一条命令:
./logstash -f ../config/logstash.conf &
如果没有新建logstash.conf,则使用:
./logstash -f ../config/logstash-sample.conf &
后面的参数是管道配置文件,改变的就是管道配置文件名,其实内容都是一样的
warning直接看不见,后面有一个WARN:Ignoring the ‘pipelines.yml’ file because modules or command line options are specified。
如果没有指定logstash.conf(就是上面命令后面跟的参数文件)作为管道配置文件,logstash会默认读取pipelines.yml作为管道配置文件,而我们没有编辑pipelines.yml,会出现以下错误。(摘自实验指南)
(6) Beats部署
在配置文件中设置输出到logstash,所以output下面的elasticsearch全部注释
① 解压文件到/usr/local/elk
cd /usr/local/elk
tar -zxvf filebeat-6.7.1-linux-x86_64.tar.gz -C /usr/local/elk
tar -zxvf packetbeat-6.7.1-linux-x86_64.tar.gz -C /usr/local/elk
tar -zxvf metricbeat-6.7.1-linux-x86_64.tar.gz -C /usr/local/elk
② 配置并部署filebeat
1) 配置filebeat
使用vim编辑filebeat.yml配置文件
cd /usr/local/elk/filebeat-6.7.1-linux-x86_64
vim filebeat.yml
注意:elasticsearch里的内容需要全部注释,默认是有配置的
解释如下:
2) 启动filebeat
cd /usr/local/elk/filebeat-6.7.1-linux-x86_64
./filebeat &
查看filebeat是否运行成功
ps -ef | grep beat
③ 配置并部署metricbeat
1) 配置metricbeat
cd /usr/local/elk/metricbeat-6.7.1-linux-x86_64
vim metricbeat.yml
2) 启动metricbeat
启动服务
./metricbeat &
查看是否启动成功
ps -ef | grep beat
④ 配置并部署packetbeat
1) 配置packetbeat
cd /usr/local/elk/packetbeat-6.7.1-linux-x86_64
vim vim packetbeat.yml
2) 启动packetbeat
./packetbeat &
ps -ef | grep beat
4. 使用Kibana
(1) 访问Kibana
对于我的本次实验,即访问http://10.64.26.86:5601
(2) 设置Index索引
进入Discover选项
点击Create index pattern
(3) 查看数据
在这之前你必须确保你要使用的beat的服务是开着的
ps -ef | grep beat
如果没有打开,可以到相应的文件夹下像之前那样打开服务
① 切换索引查看接收到的数据
② 查看日志
本次演示配置采集日志文件如下图所示:
我没有配置mysql。
下面这个没有配置:
点击kibana左侧菜单的Logs选项进入日志查询界面。
在搜索框中输入log.file.path:”想要查看的日志文件名”, 例如”/var/log/mysqld.log”。回车查询即可搜索到匹配的日志文件内容进行查看。
打开服务器/var/log/mysqld.log文件验证日志内容一致,即采集成功。
(4) 使用仪表盘
① 查看kibana提供的仪表盘加载是否成功
② 选择适合的仪表盘进行查看
1) 使用metricbeat仪表盘
后面根据指南进行就好。