1分钟系列-Filebeat 采集数据保存到 Elasticsearch

Posted by Yezhiwei on May 13, 2020

Filebeat 采集日志到架构

从上面的架构图中,我们可以看到 Beats 与 Nginx 部署在同一台机器上,目的是收集 Nginx 上的访问日志进行分析

读取 Nginx 日志文件

读取文件配置

# 配置读取日志文件 filebeat-log.yml
filebeat.inputs: 
- type: log
  enabled: true
  paths:
    - /usr/local/nginx/logs/*.log 
setup.template.settings:
  index.number_of_shards: 3 
output.console:
  pretty: true
  enable: true

启动执行

cd /usr/local/filebeat-7.6.2-linux-x86_64

./filebeat -e -c filebeat-log.yml

# 参数说明
-e: 输出到标准输出,默认输出到syslog和logs下 
-c: 指定配置文件

如下图,监听到 /usr/local/nginx/logs 目录下的 access.logerror.log

并且立刻读取到之前日志的内容,如下图:

后面会分享如何将 access.logerror.log 分开采集

测试观察输出

访问 Nginx(安装请参考 https://yezhwi.github.io/java/2020/05/11/1%E5%88%86%E9%92%9F%E7%B3%BB%E5%88%97-Nginx-%E5%AE%89%E8%A3%85-%E5%87%86%E5%A4%87%E8%AE%BF%E9%97%AE%E6%97%A5%E5%BF%97/)首页, 等待一会儿会在控制台上输出如下图所示信息,message 字段就是 Nginx 的访问日志

输出到 Elasticsearch 日志文件

写入 Elasticsearch 配置

# 配置读取日志文件 filebeat-es.yml
filebeat.inputs: 
- type: log
  enabled: true
  paths:
    - /usr/local/nginx/logs/*.log 

# 指定索引的分区数
setup.template.settings:
  index.number_of_shards: 3 
# 指定 ES 的配置
output.elasticsearch: 
  hosts: ["192.168.111.238:9200", "192.168.111.239:9200", "192.168.111.240:9200"]

启动执行

cd /usr/local/filebeat-7.6.2-linux-x86_64

./filebeat -e -c filebeat-es.yml

测试观察输出

访问 Nginx 首页,在 es head 的概览中看到新索引,如下图:

在数据浏览查看索引数据,如下图:

下一步计划

我们发现数据采集到的日志数据都在 message 属性里,下一步分享如何利用模块格式化日志信息,以及在 Kibana 中查看数据