filebeat 5.3.1 結合 rancher 和 data-vo
關鍵詞: filebeat
logstash
rancher
scale- out
PS:好久沒有更新文章了,這次帶來還是filebeat,經歷了幾個階段的改進,固化下了這套filebeat的解決方案。
本篇文章的目標
背景
上一篇文章 主要介紹了直接安裝的方式和生成filebeat配置檔案然後透過docker-compose.yml一鍵啟動filebeat service,在開篇之前先講講之前的痛點,可能你有體會。
痛點
使用.env來配置環境變數,太過於依賴資料夾,不便於橫向擴充套件
docker-compose.yml依賴於.env檔案,不方便使用rancher快速部署
filebeat.yml檔案使用本地掛載在container中,不易於託管,並且比較單一,不太適用於多種專案應用共用一個filebeat
filebeat-scale-out的改進
取消.env,將變數直接注入到docker-compose.yml,可以單獨使用docker-compose啟動,也可以使用rancher部署啟動
使用configuredata(data-volume)託管filebeat.yml,脫離宿主機本地資料夾的限制,為橫向擴充套件奠定基礎
支援多專案多應用不同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
-
建議將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,這個資料夾的名字後面會用到,請記住這個檔案的名字
-
下面來使用指令碼來生成你自己的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
這裡以為例,如果有更高版本的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中
使用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
不使用rancher,直接在虛擬機器上啟動,修改相關配置,用docker-compose啟動
-
附上我使用rancher部署的filebeat stack
filebeat-scale-out.png
說實在的,如果不用rancher,讓我逐個機器都去跑一次docker-compose up -d
,我是拒絕的。
好了,兩點了,睡覺了。有什麼問題下方留言,我會幫你解答的,歡迎有償定製。
** 文章所有步驟都是經過實踐檢驗並可行,若有問題,下方請評論。
——END——
作者 : Eason
,專注各種技術、平臺、整合,不滿現狀,喜歡改改改
文章、技術合作
作者:eason02
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/75/viewspace-2821388/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Filebeat
- Rancher 和知乎超大規模多叢集管理聯合實踐
- Windows安裝Filebeat遇到問題總結Windows
- BFS和Dijkstra結合
- Rancher 系列文章-Rancher 升級
- rancher
- filebeat輸出結果到elasticsearch的多個索引Elasticsearch索引
- rancher 和 Kubernetes有什麼區別?
- LlamaIndex RAG 和ReAct結合使用AIIndexReact
- `GitHub page` 和 `gitbook` 結合使用Github
- intervention/image和oss結合使用
- Rancher 系列文章-Rancher 對接 Active Directory 實戰
- 桌面上的Kubernetes和容器管理:Rancher Desktop
- OpenStack 與 Rancher
- docker rancher搭建Docker
- SwiftUI 怎麼和 Core Data 結合?SwiftUI
- Apache httpd和php的結合方式ApachehttpdPHP
- Celery #4 結合Flask和apscheduler使用Flask
- 華為分析5.3.1版本更新說明
- 結合ChatGPT和MINDSHOW自動生成PPTChatGPT
- 結合Spotlight和Alfred的效率工具 - HapiGoAlfredAPIGo
- Oracle中 Update和insert結合語法Oracle
- [譯] TypeScript 和 Babel:美麗的結合TypeScriptBabel
- Rancher RFO 正式 GA
- rancher安裝Openvpn
- 04 . Filebeat簡介原理及配置檔案和一些案例
- Electron結合React和TypeScript進行開發ReactTypeScript
- sed命令和find命令的結合的使用
- 結合實戰理解 Java 抽象類和介面Java抽象
- filebeat自動關閉解決
- filebeat+ELK配置及常用操作
- Filebeat的Registry檔案解讀
- ElasticSearch實戰系列八: Filebeat快速入門和使用---圖文詳解Elasticsearch
- rancher證書過期
- Go和JavaScript結合使用:抓取網頁中的影像連結GoJavaScript網頁
- 深度學習和圖形學渲染的結合和應用深度學習
- Java鎖的邏輯(結合物件頭和ObjectMonitor)Java物件Object
- 鏈遊開發:遊戲和NFT的結合遊戲