filebeat 5.3.1 结合 rancher 和 data

作者: eason02 | 来源:发表于2017-07-16 01:54 被阅读296次

    关键词: filebeat logstash rancher scale- out

    PS:好久没有更新文章了,这次带来还是filebeat,经历了几个阶段的改进,固化下了这套filebeat的解决方案。

    本篇文章的目标

    背景

    上一篇文章《一键启动 filebeat 5.1.1 集成 logstash》 主要介绍了直接安装的方式和生成filebeat配置文件然后通过docker-compose.yml一键启动filebeat service,在开篇之前先讲讲之前的痛点,可能你有体会。

    痛点

    1. 使用.env来配置环境变量,太过于依赖文件夹,不便于横向扩展
    2. docker-compose.yml依赖于.env文件,不方便使用rancher快速部署
    3. filebeat.yml文件使用本地挂载在container中,不易于托管,并且比较单一,不太适用于多种项目应用共用一个filebeat

    filebeat-scale-out的改进

    1. 取消.env,将变量直接注入到docker-compose.yml,可以单独使用docker-compose启动,也可以使用rancher部署启动
    2. 使用configuredata(data-volume)托管filebeat.yml,脱离宿主机本地文件夹的限制,为横向扩展奠定基础
    3. 支持多项目多应用不同filebeat.yml

    开始

    环境需求

    OS : Centos 7.x
    Docker engine > 1.12.x
    Docker-compose > 1.11.x
    rancher : > v1.1.2
    

    复制git folder

    git clone git@github.com:easonlau02/filebeat-scale-out.git
    
    [user@lab filebeat-scale-out]$ LC_ALL=C tree .
    .
    |-- Dockerfile                                       #filebeat image Dockerfile
    |-- Dockerfile.data-volumes                          #configuredat(filebeat-data-volume) image
    |-- LICENSE
    |-- README.md
    |-- build_filebeat_data_volume.sh                    #构建configuredat(filebeat-data-volume) image脚本
    |-- build_filebeat_image.sh                          #构建filebeat image脚本
    |-- config                                           #filebeat.yml配置管理文件夹
    |   `-- defaul
    |       |-- filebeat.yml
    |       `-- filebeat.yml.sample
    |-- docker-compose.yml                               #启动filebeat service的docker-compose.yml file, v2
    |-- docker-compose.yml.v1                            #启动filebeat service的docker-compose.yml file, v1
    |-- docker-entrypoint.sh                             #filebeat启动入口文件
    `-- migrate_registry_from_forwarder_to_filebeat.sh   #.logstash-forwarder转化为filebeat的脚本,方便升级为filebeat
    
    2 directories, 12 files
    
    

    准备好configuredata

    1. 建议将log按照这样的pattern存放:/home/user/logs/*/*.log,第一个星号代表不同的应用程序,第二个星号代表所有以.log结尾的日志文件,本例子按照这样的方式来配置filebeat.yml,如果你有不同的pattern,可以修改git folder中的默认filebeat.yml文件:~/filebeat-scale-out/config/default/filebeat.yml, 以下是相关的prospectors:
      - input_type: log
        paths:
           - /var/log/nginx/*.log
      
        fields_under_root: true
      
        document_type: nginx-logs
      
        ignore_older: 24h
      
      - input_type: log
        paths: 
          - ${applog_folder}/*/*.log
      
        fields_under_root: true
      
        document_type: app-logs
      
        ignore_older: 24h
      
    • ${applog_folder} :这个参数后面会在docker-compose文件中讲到
    • /var/log/nginx/*.log :这个是nginx web server默认的log path,和application log不同,这种不需要使用参数化的配置来配置log路径
    • 如果你有不同的项目应用,需要用不同的filebeat,你可以在文件件~/filebeat-scale-out/config/下面创建一个或者多个指定名字的文件夹,每个文件夹下面和default一样,存放一个filebeat.yml,根据你的需求来为不同的项目应用改写filebeat.yml,这个文件夹的名字后面会用到,请记住这个文件的名字
    1. 下面来使用脚本来生成你自己的configuredata(filebeat-data-volume)

      [user@lab ~]$ cd ~/filebeat-scale-out/
      [user@lab filebeat-scale-out]$ ./build_filebeat_data_volume.sh
      RelatePath : .
      Date: Sat Jul 15 12:49:53 EDT 2017
      Starting to build data config volume for filebeat....
      Docker file : ./Dockerfile.data-volumes
      Docker build context directory :.
      =================================================
      Found docker file : ./Dockerfile.data-volumes
      Sending build context to Docker daemon   127 kB
      Step 1 : FROM eason02/busybox:latest
      ---> c75bebcdd211
      Step 2 : MAINTAINER Eason Lau <eason.lau02@hotmail.com>
      ---> Using cache
      ---> 32d466ef8024
      Step 3 : RUN mkdir -p /etc/filebeat
      ---> Using cache
      ---> aeae50577003
      Step 4 : COPY ./config/ /etc/filebeat/
      ---> Using cache
      ---> 0d752f07a240
      Step 5 : RUN ls -R /etc/filebeat/
      ---> Using cache
      ---> 25ea99aaabd4
      Successfully built 25ea99aaabd4
      =================================================
      Date: Sat Jul 15 12:49:53 EDT 2017
      [user@lab filebeat-scale-out]$ 
      
      

    配置docker-compose.yml并启动filebeat service

    1. 这里以docker-compose.yml.v1为例,如果有更高版本的docker-compose或者rancher支持v2,可以直接使用docker-compose.yml
    # ~/filebeat-scale-out/docker-compose.yml.v1
    configuredata:
        labels:
          io.rancher.container.pull_image: always
        image: eason02/filebeat-data-volume:latest
        volumes:
          - /etc/filebeat
        command:
          - tail
          - -f
          - /etc/filebeat/default/filebeat.yml
    filebeat:
        image: eason02/filebeat:5.3.1
        container_name: filebeat-5.3.1
        restart: always
        labels:
          io.rancher.scheduler.global: 'true'
          io.rancher.sidekicks: configuredata
          io.rancher.container.pull_image: always
        environment:
          - env=QA
          - logstash=localhost
          - config=default
          - applog_folder=/home/user/logs
        net: host
        volumes_from:
          - configuredata
        volumes:
          - /var/lib/filebeat/:/etc/filebeat/data
          - /var/log/nginx/:/var/log/nginx/
          - /home/user/logs:/home/user/logs
        log_opt:
          max-file: '5'
          max-size: 20m
    

    docker-compose.yml配置说明:

    • configuredata:
      volumes:
       - /etc/filebeat            #用来提供filebeat config给filebeat container使
      
      labels:
       io.rancher.container.pull_image: always    # 在upgrade或者第一次启动的时候自动拿最新的image,此处为rancher配置相关
      
    • filebeat:
    environment:
     - env=QA                   # 环境配置,便于区分
     - logstash=localhost       # 配置logstash的host,不需要port,例如:host-logstash
     - config=default           # 指定加载哪个filebeat.yml
                                  #上面说到自定义创建的文件夹名字就是需要在这里指定说明
                                  # 才可以加载到相应的filebeat.yml
                                  # 说到这里你大概知道如何实现多项目应用一个filebeat的设计原则了吧
     - applog_folder=/home/user/logs      #默认的filebeat.yml中需要指定日志文件的路径
                                            #根据我们上面约定好的规则,需要指定它为/home/user/logs
                                            #才可以将我们的log映射到container里边,让filebeat根据filebeat.yml扫描日志
       ```
       ```
    volumes:          # 根据你的需求mount文件件
     - /var/lib/filebeat/:/etc/filebeat/data     # 日志偏移量文件,需要mount出来,不然重启filebeat会丢失而重复发送之前的日志
     - /home/user/logs:/home/user/logs   # 把日志文件件mount进filebeat container中,必须与applog_folder一致
     - /var/log/nginx/:/var/log/nginx/           # nginx日志文件夹
    
       ```
       ```
    labels:
       io.rancher.scheduler.global: 'true'               # 当新的host加入rancher时,自动部署,rancher配置相关
       io.rancher.sidekicks: configuredata               # 添加configuredata为filebeat container的辅助service
       io.rancher.container.pull_image: always           # upgrade或者第一次启动的时候,保持最新的image
       ```
       ```
    volumes_from:
     - configuredata        # 将托管filebeat.yml配置的service作为filebeat container的mount point
                              # 可直接将configuredata开放的volume挂在到当前container中
    
    1. 使用rancher自动部署到所有host上面
    • 如果你只需要使用默认的filebeat.yml,你可以直接根据你的需求修改上面相关的配置,直接将修改的docker-compose文件放入rancher中直接启动就可以了
    • 如果你需要使用自己定制化,或者多项目的模式,你可能需要将以下image标记为你自己的docker image然后push到你自己的repository上面
    eason02/filebeat:5.3.1
    eason02/filebeat-data-volume:latest
    

    然后修改docker-compose中的image,将其修改为你自己的images,然后再放到rancher中启动filebeat

    1. 不使用rancher,直接在虚拟机上启动,修改相关配置,用docker-compose启动

    2. 附上我使用rancher部署的filebeat stack

      filebeat-scale-out.png
      说实在的,如果不用rancher,让我逐个机器都去跑一次docker-compose up -d,我是拒绝的。
      好了,两点了,睡觉了。有什么问题下方留言,我会帮你解答的,欢迎有偿定制。

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

    ——END——
    作者 : Eason,专注各种技术、平台、集成,不满现状,喜欢改改改
    文章、技术合作
    Email : eason.lau02@hotmail.com
    GitHub : https://github.com/easonlau02

    相关文章

      网友评论

        本文标题:filebeat 5.3.1 结合 rancher 和 data

        本文链接:https://www.haomeiwen.com/subject/acvihxtx.html