filebeat 5.3.1 结合 rancher 和 data-volume 实现横向扩展

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容

  • 关键词: filebeat logstash docker docker-compose PS : 本篇文章的改进...
    eason02阅读 3,701评论 2 5
  • Docker从2013年发布第一个版本以来,已经火遍全球,技术迭代也比较频繁,其周边产品和技术也越来越丰富。Doc...
    归海听雪阅读 12,119评论 7 44
  • 以下原文转载于(https://docs.docker.com/docker-for-mac/)(想找中文版的最新...
    Veekend阅读 7,491评论 0 17
  • 《感恩父母感恩节》 感恩父母感恩节, 跪乳羔羊世人颂。 慈悲功德平凡事,敬畏神灵孝父母。 心怀感恩报答意,洗脚暖心...
    洋州客阅读 393评论 0 1
  • 列车,总是一个承载着久别重逢后的喜悦与依依惜别后的悲伤的象征。相守的日子总是那么快,那么短暂。十月的北方,阴雨连绵...
    西青阅读 210评论 0 1