在之前的文章中,我介绍了如何使用Filebeat把一个日志文件直接写入到Elasticsearch中,或通过Logstash的方法写到Elasticsearch中。在今天的文章中,我们来介绍如何运用Filebeat模块来把nginx日志导入到Elasticsearch中,并进行分析。
Filebeat模块为您提供了一种快速处理常见日志格式的快速方法。 它们包含默认配置,Elasticsearch接收节点管道定义和Kibana仪表板,以帮助您实施和部署日志监视解决方案。
Filebeat提供了几种不同的方式来启用模块。 您可以:
- 在modules.d目录中启用模块配置
-
运行Filebeat时启用模块
-
在filebeat.yml文件中启用模块配置
今天我们采用第一种方法来展示如何使用Filebeat所提供的模块功能来对nginxlog进行分析。
下载测试数据
我已经上传了一个测试数据,它位于:https://github.com/liu-xiao-guo/nginx_log_file。我们可以通过如下的方法来下载这个测试数据:
git clone https://github.com/liu-xiao-guo/nginx_log_file
等我们把测试数据克隆下来后,我们可以通过如下的方法来解压,并把它存于到一个我们喜欢的目录中。
unzip nginx.zip
我们发现它里面含有一个叫做nginx.log的文件。它的大小有227M。它里面含有1万个nginx的日志。
如何得到安装帮助
我们可以先打开我们的Kibana,并点击Kibana左上角的home图标:
点击“Add log data”,然后,我们可以看到:
点击“Nginx logs”,然后,你就就可以看到比较全的安装步骤:
安装Filebeat
我们可以根据不同的操作系统来进行如下不同的安装:
deb:
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.1-amd64.deb
sudo dpkg -i filebeat-7.3.1-amd64.deb
rpm:
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.1-x86_64.rpm
sudo rpm -vi filebeat-7.3.1-x86_64.rpm
mac:
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.1-darwin-x86_64.tar.gz
tar xzvf filebeat-7.3.1-darwin-x86_64.tar.gz
brew:
brew tap elastic/tap
brew install elastic/tap/filebeat-full
linux:
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.1-linux-x86_64.tar.gz
tar xzvf filebeat-7.3.1-linux-x86_64.tar.gz
这样我们的Filebeat就安装好了。请注意:由于ELK迭代比较快,我们可以把上面的版本7.3.1替换成我们需要的版本即可。我们先不要运行Fliebeat。
使用Filebeat模块
当我们安装完Filebeat后,我们可以看到在Filebeat的安装目录下的文件结果如下:
$ pwd
/Users/liuxg/elastic/filebeat-7.3.0-darwin-x86_64
(base) localhost:filebeat-7.3.0-darwin-x86_64 liuxg$ ls -F
LICENSE.txt filebeat.reference.yml filebeat_es.yml
NOTICE.txt filebeat.template.json kibana/
README.md filebeat.yml logs/
data/ filebeat1.yml module/
fields.yml filebeat2.yml modules.d/
filebeat* filebeat_apache.yml sample.log
在这里,我们可以看到它里面有一个叫做filebeat.yml的配置文件,还有一个叫做modules.d的文件夹。在filebeat.yml中,我们做如下的修改:
setup.kibana:
host: "localhost:5601"
output.elasticsearch:
hosts: ["localhost:9200"]
在这里,我们把host都指向我们的localhost,这是因为我们的elasticsearch及Kibana都安装在本地的电脑上。这个地址需要根据自己实际的部署的地址改变而改变。
显示Filebeat支持的模块
$ ./filebeat modules list
Enabled:
nginx
Disabled:
apache
auditd
cisco
coredns
elasticsearch
envoyproxy
googlecloud
haproxy
icinga
iis
iptables
kafka
kibana
logstash
mongodb
mssql
mysql
nats
netflow
osquery
panw
postgresql
rabbitmq
redis
santa
suricata
system
traefik
zeek
我们可以看出来目前已经被启动的模块是nginx。它可以通过如下方式来启动:
./filebeat modules enable nginx
当然我们也可以通过如下的方式来关闭这个模块:
./filebeat modules disable nginx
针对我们今天的练习,我们需要启动nginx模块。
我们可以通过如下的命令查看在modules.d目录下的文件变化:
$ pwd
/Users/liuxg/elastic/filebeat-7.3.0-darwin-x86_64
(base) localhost:filebeat-7.3.0-darwin-x86_64 liuxg$ ls modules.d
apache.yml.disabled mssql.yml.disabled
auditd.yml.disabled mysql.yml.disabled
cisco.yml.disabled nats.yml.disabled
coredns.yml.disabled netflow.yml.disabled
elasticsearch.yml.disabled nginx.yml
envoyproxy.yml.disabled osquery.yml.disabled
googlecloud.yml.disabled panw.yml.disabled
haproxy.yml.disabled postgresql.yml.disabled
icinga.yml.disabled rabbitmq.yml.disabled
iis.yml.disabled redis.yml.disabled
iptables.yml.disabled santa.yml.disabled
kafka.yml.disabled suricata.yml.disabled
kibana.yml.disabled system.yml.disabled
logstash.yml.disabled traefik.yml.disabled
mongodb.yml.disabled zeek.yml.disabled
我们可以看到nginx.yml文件的最后没有“disabled”字样,表明它已经被启动成功。我们进一步编辑这个nginx.yml文件:
# Module: nginx
# Docs: https://www.elastic.co/guide/en/beats/filebeat/7.3/filebeat-module-nginx.html
- module: nginx
# Access logs
access:
enabled: true
# Set custom paths for the log files. If left empty,
# Filebeat will choose the paths depending on your OS.
var.paths: ["/Users/liuxg/data/nginx.log"]
# Error logs
error:
enabled: true
# Set custom paths for the log files. If left empty,
# Filebeat will choose the paths depending on your OS.
#var.paths: ["/var/log/nginx/error.log"]
在这里,我把文件路径/Users/liuxg/data/nginx.log写入到该文件,这是因为我的nginx.log文件是位于这个路径的。
启动模块
为了能够使得我们的nginx模块能够正确地被Kibana显示,我们必须运行如下的命令:
./filebeat setup
$ pwd
/Users/liuxg/elastic/filebeat-7.3.0-darwin-x86_64
(base) localhost:filebeat-7.3.0-darwin-x86_64 liuxg$ ./filebeat setup
Index setup finished.
Loading dashboards (Kibana must be running and reachable)
Loaded dashboards
Loaded machine learning job configurations
Loaded Ingest pipelines
注意:在安装或升级Filebeat时,或在启用新模块后,必须执行setup命令
运行Filebeat
上面我们已经配置好,下面我们通过如下的命令来把我们的nginx日志导入到我们的Elasticsearch中:
./filebeat -e
我们可以在Kibana的“Dev tools”可以看到最新被创建的index:
这里的filebeat-7.3.0是一个alias,它指向我们刚被创建的一个index,比如filebeat-7.3.0-2019.09.28-000001。
在这里显示的数据是10,000,其实这不是一个真实的文档的数目。它的真实的文档个数是:
这里要注意的一件事是响应中的hits.total。 它具有10,000和“ relation” =“ gte”的值。 索引中实际上有984,887个文档,我们已经创建了全部。 在7.0版发布之前,hits.total始终用于表示符合查询条件的文档的实际数量。 在Elasticsearch 7.0版中,如果匹配数大于10,000,则不会计算hits.total。 这是为了避免为给定查询计算精确匹配文档的不必要开销。 我们可以通过将track_total_hits = true作为请求参数来强制进行精确匹配的计算。
一旦数据被导入到Elasticsearch中,我们就可以开始对数据进行分析了。
运用Kibana来分析数据
在之前我们已经通过./filebeat setup命令,已经把针对nginx的模块仪表盘导入到Kibana中了。下面我们就可以使用标准的dashboard来对nginx数据进行展示及分析。
打开Discover查看数据,index pattern选择filebeat-*,把时间选择到2018年10月-2018年12月停止
来源:CSDN
作者:Elastic专属
链接:https://blog.csdn.net/UbuntuTouch/article/details/101604717