一键启动 filebeat 5.1.1 集成 logstash

关键词: 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

一键启动 filebeat 5.1.1 集成 logstash_第1张图片

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

通过直接安装在宿主机上的方式

  1. 使用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 
    
  2. 配置filebeatlogstash 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
  1. 启动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

  1. Clone GIT folder 到本地,建议放在user HOME下,eg:/home/user1/

    cd ~ 
    git clone https://github.com/easonlau02/filebeat.git
    
  2. 修改配置文件:~/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.*"
  1. 使用gen-config.sh生成filebeat.ymldocker-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/
    ....
  1. 使用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:

一键启动 filebeat 5.1.1 集成 logstash_第2张图片

回到discovery查看我们通过filebeat发送的日志:

一键启动 filebeat 5.1.1 集成 logstash_第3张图片

至此,filebeat service安装并启动成功,你可以根据你的需要选择不同的安装方式,第二种是经过抽离以及优化的,有问题大家下面评论。未完待续....

** 文章所有步骤都是经过实践检验并可行,若有问题,下方请评论

——END——
作者 : Eason,专注各种技术、平台、集成,不满现状,喜欢改改改
文章、技术合作
Email : [email protected]

你可能感兴趣的:(一键启动 filebeat 5.1.1 集成 logstash)