filebeat 5.3.1 結合 rancher 和 data-vo

z_paul發表於2021-09-09

關鍵詞: filebeat logstash rancher scale- out

PS:好久沒有更新文章了,這次帶來還是filebeat,經歷了幾個階段的改進,固化下了這套filebeat的解決方案。

本篇文章的目標

圖片描述

背景

上一篇文章 主要介紹了直接安裝的方式和生成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.xDocker engine > 1.12.xDocker-compose > 1.11.xrancher : > 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 2017Starting 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或者rancher支援v2,可以直接使用

# ~/filebeat-scale-out/docker-compose.yml.v1configuredata:
    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,專注各種技術、平臺、整合,不滿現狀,喜歡改改改
文章、技術合作



作者:eason02
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/75/viewspace-2821388/,如需轉載,請註明出處,否則將追究法律責任。

相關文章