关键词: filebeat
logstash
docker
docker-compose
PS : 本篇文章的改进版本,请点击filebeat 5.3.1 结合 rancher 和 data-volume 实现横向扩展
Background
上一篇文章《结合docker快速搭建启动ELK日志收集平台》讲到搭建ELK service,这一章主要为了通过filebeat发送日志文件到前面我们所搭建的ELK平台里边
Filebeat
在beats中,filebeat作为轻量级的logs shipper,帮助用户将无数client端上的log文件以一种轻量级的方式转发并集中日志和文件到ELK stack中,主要通过elasticsearch或者logstash指定的port进行日志转发,本文主要讲filebeat和logstash的integration
Introduction
filebeat:轻量级logs shipper,在beats中发送应用日志文件的表现尤为突出,拥有backpressure-sensitive协议会让filebeat知道当logstash忙于处理数据的时候,自动减缓读取日志文件内容的速度,给logstash足够的resource,等到logstash恢复正常之后再回到正常的读取与发送速度。
Prerequisite
OS : Centos 7.x
# 如果选择快速启动的方式必须有一下两个要求
Docker engine > 1.12.x
Docker-compose > 1.11.x
安装并启动filebeat service
通过直接安装在宿主机上的方式
-
使用RPM安装官方rpm package
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.1.1-x86_64.rpm sha1sum filebeat-5.1.1-x86_64.rpm rpm -vi filebeat-5.1.1-x86_64.rpm
-
配置
filebeat
与logstash
host,相关配置文件:/etc/filbeat/filebeat.yml
filebeat配置默认连接elasticsearch,这里我们主要使用logstash,把无关的配置注释掉:#-------------------------- Elasticsearch output ------------------------------ # output.elasticsearch: # hosts: ["localhost:9200"]
在logstash下面配置logstash host配置并去掉注释,这里我们以filebeat和logstash在同一台机器为例,相应的logstash host为localhost:
#----------------------------- Logstash output --------------------------------
#output.logstash:
hosts: ["localhost:5044"]
index: "logstash-%{+yyyy.MM.dd}"
配置日志目录,注意缩进,这里我们以/var/log/*.log
为例,配置也支持*号通配:
- input_type: log
# Paths that should be crawled and fetched. Glob based paths.
paths:
- /var/log/*.log
- 启动filebeat service
systemctl start filebeat systemctl status filebeat
LC_ALL=C systemctl status filebeat \* filebeat.service - filebeat Loaded: loaded (/usr/lib/systemd/system/filebeat.service; disabled; vendor preset: disabled) Active: active (running) since Sat 2017-03-25 03:59:03 EDT; 43s ago Docs: https://www.elastic.co/guide/en/beats/filebeat/current/index.html Main PID: 16277 (filebeat) Memory: 2.5M CGroup: /system.slice/filebeat.service `-16277 /usr/share/filebeat/bin/filebeat -c /etc/filebeat/filebeat.yml -path.home /usr/share/filebea... Mar 25 03:59:03 elk systemd[1]: Started filebeat. Mar 25 03:59:03 elk systemd[1]: Starting filebeat...
启动成功。
通过docker-compose
-
Clone GIT folder 到本地,建议放在user HOME下,eg:
/home/user1/
cd ~ git clone https://github.com/easonlau02/filebeat.git
-
修改配置文件:
~/filebeat/.env
# ~/filebeat/.env # environment environment=PROD # Logstash host LOGSTASH_HOST=localhost # for docker compose volumes: replacement, use absolute path, eg: /var/log/nginx # if multiple path, use space to separate them, eg: VOLUME_FOLDER_LIST="path1 path2 ... ..." VOLUME_FOLDER_LIST="/var/log/nginx/" # for filebeat.hml paths: replacement, support regex, eg: /var/log/nginx/*.log # if mutiple file pattern, use space to separate them, eg: PROSPECT_FILE_PATTERN_LIST="path1/*.log path2/*.log.* path3/access.log path4/access.*" PROSPECT_FILE_PATTERN_LIST="/var/log/nginx/*.log"
上述基本配置属性是启动filebeat的基本属性:
-
environment:
和ELK一样用来区分日志环境 -
LOGSTASH_HOST:
: 指定logstash host,这里以localhost为(与logstash在同一台机器,默认经过5044 port),如果不在同一台机器,需指定logstash的hostname,并确port:5044可以访问 -
VOLUME_FOLDER_LIST:
配置需要发送的日志文件所在的文件夹绝对路径,eg:如果需要发送/var/log/nginx
下的所有.log
结尾的日志文件,需修改为VOLUME_FOLDER_LIST="/var/log/nginx/"
,如果有多个文件夹,则使用空格分开,例如VOLUME_FOLDER_LIST="path1 path2 ... ..."
-
PROSPECT_FILE_PATTERN_LIST:
filebeat真正读取的文件路径,具体到文件,可以使用*号通配,eg:/var/log/nginx/*.log
,记住要具体到文件,而不是文件夹,如果有多中不同文件夹的日志需要发送,同样使用空格分开,eg:PROSPECT_FILE_PATTERN_LIST="path1/*.log path2/*.log.* path3/access.log path4/access.*"
- 使用gen-config.sh生成
filebeat.yml
和docker-compose.yml
文件$ cd ~/filebeat/ $ chmod +x gen-config.sh $ ./gen-config.sh VOLUME_FOLDER_LIST=/var/log/nginx/ PROSPECT_FILE_PATTERN_LIST=/var/log/nginx/*.log -rw-rw-r--. 1 user1 user1 504 Mar 25 04:24 docker-compose.yml -rw-rw-r--. 1 user1 user1 788 Mar 25 04:24 filebeat.yml
查看~/filebeat/filebeat.yml
filebeat.prospectors:
- input_type: log
paths:
- /var/log/nginx/*.log
.....
output.logstash:
# The Logstash hosts
hosts: ["${logstash}:5044"]
index: "logstash-%{+yyyy.MM.dd}"
......
~/filebeat/docker-compose.yml
version: '2'
services:
filebeat:
image: eason02/filebeat:5.1.1
container_name: filebeat-image
restart: always
environment:
- env=${environment}
- logstash=${LOGSTASH_HOST}
network_mode: host
....
volumes:
- ./5.1.1/logs:/etc/filebeat/logs
- ./5.1.1/data:/etc/filebeat/data
- ./filebeat.yml:/etc/filebeat/filebeat.yml
- /var/log/nginx/:/var/log/nginx/
....
- 使用docker-compose启动filebeat service
$ cd ~/filebeat/
$ docker-compose up -d
# ouput
Creating filebeat-image
$ docker container ls -f name=filebeat-image
# output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bb77764beb8a eason02/filebeat:5.1.1.1 "/docker-entrypoin..." 2 minutes ago Up 2 minutes filebeat-image
通过Kibana查看日志localhost:5601
如果ELK没有收集过日志,当访问kibana的时候要求先建立index:
回到discovery查看我们通过filebeat发送的日志:
至此,filebeat service安装并启动成功,你可以根据你的需要选择不同的安装方式,第二种是经过抽离以及优化的,有问题大家下面评论。未完待续....
** 文章所有步骤都是经过实践检验并可行,若有问题,下方请评论
——END——
作者 : Eason
,专注各种技术、平台、集成,不满现状,喜欢改改改
文章、技术合作
Email : eason.lau02@hotmail.com</small>