三分钟搭建ELK日志分析平台
初步认识ELK
所谓的ELK就是指三个组件的首字母集合:
Elasticsearch 是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎,使用 Java 语言编写。
Logstash 是一个具有实时渠道能力的数据收集引擎,主要用于日志的收集与解析,并将其存入 ElasticSearch中。
Kibana 是一款基于 Apache 开源协议,使用 JavaScript 语言编写,为 Elasticsearch 提供分析和可视化的 Web 平台。它可以在 Elasticsearch 的索引中查找,交互数据,并生成各种维度的表图。
由于这种架构下,Logstash的压力过大,所以在Logstash的前端加了一层轻量级的日志收集中间件:
引入Filebeat作为日志搜集器,主要是为了解决Logstash开销大的问题。相比Logstash,Filebeat 所占系统的 CPU 和内存几乎可以忽略不计。
因而最终形成的架构图如下:
开始搭建
本手册base在你已经有一定的Java编程基础
基础环境
系统环境:Centos6.8(使用vmware12虚拟机)
Java环境:1.8.0_161(由于ELK5.X和6.X版本最低要求是Java8,所以建议配置8以上版本)
软件包相关信息
软件版本:6.5.4
下载地址:
[官网下载地址] https://www.elastic.co/downloads
下载软件集合:Elasticsearch、Kibana、Logstash、FileBeat(都选择linux版的tar包进行下载)
下载后将安装包传输到虚拟机中。
安装开始
解压缩
首先安装解压缩到一个目录下面,个人习惯放在/opt下面
创建用户
因为ElasticSerach运行时不允许以root用户身份的,所以这里需要手动创建用户并分配权限,具体如下:
创建用户组:
groupadd elasticsearch
创建用户加入用户组:
useradd elasticsearch -g elasticsearch
-
设置ElasticSerach文件夹为用户elasticsearch所有:
chown -R elasticsearch.elasticsearch /opt/elasticsearch-6.5.4
修改系统环境
-
打开文件/etc/security/limits.conf,添加下面4处内容:
soft nofile 65536
hard nofile 131072
soft nproc 2048
hard nproc 4096
打开文件/etc/sysctl.conf,添加下面内容:
vm.max_map_count=65536
加载sysctl配置,执行命令:
sysctl -p
重启电脑,执行命令:
reboot
启动ES
切换到用户elasticsearch:
su elasticsearch
进入目录/opt/elasticsearch-6.5.4
执行启动命令:
bin/elasticsearch -d
,此时会在后台启动elasticsearch(如果启动报错没有权限的话,重新执行上面的chown那部分命令设置权限)查看启动日志可执行命令:
tail -f /opt/elasticsearch-6.5.4/logs/elasticsearch.log
执行curl命令检查服务是否正常响应:
curl 127.0.0.1:9200
,如果成功会有Json报文返回
注:6版本内核的linux系统启动es中会报错,可以通过修改config/elasticsearch.yml来纠正,在文件末尾添加
<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="shell" contenteditable="true" cid="n173" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">bootstrap.memory_lock: false
bootstrap.system_call_filter: false</pre>
配置启动Logstash
-
在目录/opt/elasticsearch-6.5.4下创建文件default.conf,内容如下
<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" contenteditable="true" cid="n190" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit;"># 监听5044端口作为输入
input {
beats {
port => "5044"
}
}数据过滤
filter {
grok {
match => {
"message" => "%{COMBINEDAPACHELOG}"
}
}
geoip {
source => "clientip"
}
}输出配置为本机的9200端口,这是ElasticSerach服务的监听端口
output {
elasticsearch {
hosts => ["127.0.0.1:9200"]
}
}</pre> 后台启动Logstash服务
nohup bin/logstash -f default.conf –config.reload.automatic &
查看启动日志:
tail -f nohup.out
,看到successfully
就表明启动成功
配置启动FileBeat
-
修改配置文件filebeat.yml,主要修改两个部分:日志存放位置以及输出
<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="shell" contenteditable="true" cid="n225" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit;">- type: log
Change to true to enable this prospector configuration.
enabled: True
Paths that should be crawled and fetched. Glob based paths.
读取 Nginx 的日志
paths:
- /var/logs/*.log
输出到本机的 LogStash
output.logstash:
The Logstash hosts
hosts: ["localhost:5044"]
</pre> -
配置完成后,启动Filebeat
<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" contenteditable="true" cid="n231" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit;"># FileBeat 需要以 root 身份启动,因此先更改配置文件的权限
sudo chown root filebeat.yml
sudo ./filebeat -e -c filebeat.yml -d "publish"</pre>
配置启动Kibana
进入Kibana的目录:/opt/kibana-6.5.4-linux-x86_64
-
修改配置文件config/kibana.yml,修改服务器主机名为相应的ip或者域名
<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" contenteditable="true" cid="n249" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit;">server.host: "192.168.21.128"</pre>
执行启动命令:
nohup bin/kibana &
查看启动日志:
tail -f nohup.out
在浏览器访问http://[ip]:5601
汉化Kibana
-
下载
上传至服务器然后解压
unzip kibana-hanhua.zip
-
开始汉化,注意python的版本不能过高,3.6的版本我试过是汉化不了的,换成2.7的可以了
<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="python" contenteditable="true" cid="n285" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit;">python main.py /home/kibana-6.2.3/</pre>
最后启动Kibana就可以看到汉化的界面