Fork me on GitHub
Fork me on GitHub

Filebeat日志收集器

Beats工具

Beats是elastic公司的一款轻量级数据采集产品,它是从packetbeat发展出来的数据收集器系统,它包含了几个子产品:

  • Packetbeat(用于监控网络流量)
  • Filebeat(用于监听日志数据)
  • Metricbeat(用于搜集CPU、内存、磁盘的信息以及Nginx、Redis等服务的数据)
  • Winlogbeat(用于搜集windows事件日志)
  • Heartbeat(用于监控服务的可用性)

Beats可以直接把数据发送给Elasticsearch或者发送给Logstash,然后Logstash发送给Elasticsearch,然后进行后续的数据分析活动。
由于他们都是基于libbeat写出来的,提供了统一的数据发送方法,输入配置解析,日志记录框架等功能。所有的beat工具,在配置上基本相同,只是input输入的地方各有差异。
如果有其他特殊需求,可以使用Go语言借助libbeat库方便地开发自己的Beat工具,社区中有很多工具可以参考。

Logstash和Filebeat

上一篇文章中介绍过,Logstash是跑在JVM上的,需要消耗较多的系统资源,而Filebeat则是一个轻量级的日志采集工具,占用资源更少。我们完全可以在每台机器上安装启动个Filebeat,由Filebeat来采集日志,将数据传输给Redis或者Kafka,然后logstash去获取,利用filter功能过滤分析,然后存储到elasticsearch中。架构图如下:

环境信息

主机名 操作系统版本 IP地址 安装软件
hadoop16 CentOS 7.0 172.16.206.16 elasticsearch-5.6.3.zip、kibana-5.6.3-linux-x86_64.tar.gz
spark32 CentOS 7.0 172.16.206.32 logstash-5.6.3.tar.gz、filebeat-5.6.3-linux-x86_64.tar.gz、Nginx
osb30 Redhat 6.5 172.16.206.30 redis-3.2.2.tar.gz

安装配置Redis

安装Redis

# yum install readline-devel pcre-devel openssl-devel -y
# cd /usr/local/
# tar zxf redis-3.2.2.tar.gz 
# cd redis-3.2.2/
# make
# make install

配置Redis

# cd /usr/local/redis-3.2.2/
# cp redis.conf /etc/
# vim /etc/redis.conf

1.打开/etc/redis.conf,将daemonize处修改为yes。

2.配置Redis持久化策略
使用RDB和AOF双持久化策略:其中默认开启了RDB持久化,我们只需要开启AOF持久化。

3.配置redis日志文件

4.配置数据文件存放路径,在/目录下面创建/RedisData目录

# mkdir /RedisData

5.修改Redis监听地址

6.修改Redis监听端口

7.在redis3.2之后,redis增加了protected-mode,在这个模式下,即使注释掉了bind 127.0.0.1,再访问redis的时候还是报错,所以要如下设置

启动/停止Redis

启动:

# /usr/local/bin/redis-server /etc/redis.conf

停止:

# /usr/local/redis-3.2.2/src/redis-cli -p 6400 shutdown

安装配置Filebeat

filebeat的工作流程:当开启filebeat程序的时候,它会启动一个或多个探测器(prospectors)去检测指定的日志目录或文件,对于探测器找出的每一个日志文件,filebeat启动收割进程(harvester),每一个收割进程读取一个日志文件的新内容,并发送这些新的日志数据到处理程序(spooler),处理程序会集合这些事件,最后filebeat会发送集合的数据到你指定的地点(Elasticsearch、Logstash、Kafka或者Redis)。

安装Filebeat

[root@spark32 opt]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.6.3-linux-x86_64.tar.gz
[root@spark32 opt]# ln -sv filebeat-5.6.3-linux-x86_64 filebeat
‘filebeat’ -> ‘filebeat-5.6.3-linux-x86_64’
[root@spark32 opt]# cd filebeat

配置Filebeat

1.定义你的日志文件的路径(一个或多个)
对于大多数的基本filebeat配置,可以定义一个单一探测器针对一个单一的路径,例如:
filebeat.prospectors:

- input_type: log
  paths:
    - /usr/local/openresty/nginx/logs/host.access.log
  #json.keys_under_root: true 若收取日志格式为json的log,请开启此配置

2.定义输出日志,我这里输出到redis中

output.redis:
  hosts: ["172.16.206.30:6400"]
  #password: "my_password"
  key: "filebeat"
  db: 0
  timeout: 5

启动Filebeat

测试配置文件语法:

# cd /opt/filebeat/
# ./filebeat -configtest -e

启动:

# ./filebeat &

查看数据是否进入redis:

[root@osb30 src]# ./redis-cli -p 6400 
127.0.0.1:6400> help @LIST
127.0.0.1:6400> LLEN filebeat
(integer) 15
127.0.0.1:6400> LINDEX filebeat 1
"{\"@timestamp\":\"2017-10-23T07:13:37.551Z\",\"beat\":{\"hostname\":\"spark32\",\"name\":\"spark32\",\"version\":\"5.6.3\"},\"input_type\":\"log\",\"message\":\"172.16.4.81 - - [19/Oct/2017:09:47:17 +0800] \\\"GET /favicon.ico HTTP/1.1\\\" 404 576 \\\"http://172.16.206.32:808/\\\" \\\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36\\\" \\\"-\\\"\",\"offset\":439,\"source\":\"/usr/local/openresty/nginx/logs/host.access.log\",\"type\":\"log\"}"

浏览器访问下nginx,再次查看redis数据:

127.0.0.1:6400> LLEN filebeat
(integer) 16

安装配置Elasticsearch

关于Elasticsearch的安装部署详见上一篇博客《ELK实战》

安装配置Logstash

Logstash从redis中取数据,输出结果到Elasticsearch中。关于Logstash的安装部署详见上一篇博客《ELK实战》

配置Logstash

# cd /opt/logstash-5.6.3/conf
# vim logstash_redis.conf
input {
  redis {
    host  =>  "172.16.206.30"
    port  =>  "6400"
    data_type  =>  "list"
    key  =>  "filebeat"
  }
}

filter {
  grok {
    match => { "message" => "%{NGINXACCESS}" }
  }
}

output {
  elasticsearch {
    hosts    =>  ["172.16.206.16:9200"]
    action   =>  "index"
    index    =>  "filebeat-%{+YYYY.MM.dd}"
  }
}

启动Logstash

[root@spark32 logstash-5.6.3]# bin/logstash -f /opt/logstash-5.6.3/conf/logstash_redis.conf &

查看redis中的数据,发现已经全部被消费了:

127.0.0.1:6400> LLEN filebeat
(integer) 0

查看Elasticsearch中的索引:

# curl -XGET '172.16.206.16:9200/_cat/indices'
yellow open filebeat-2017.10.23 PQe6qyVfSSG7GHQJUOPWtA 5 1 18 0 92.8kb 92.8kb

安装配置Kibana

关于Kibana的安装部署详见上一篇博客《ELK实战》
浏览器访问:http://172.16.206.16:5601/
1.左侧菜单点击“Management”,点击“Index Patterns”。

2.点击“Create Index Pattern”。

3.输入索引名字,点击“Create”

4.点击Discover,选择上一步创建的索引。