文章目錄
Filebeat 自訂 Elasticsearch index name
這個是之前筆記 使用 filebeat 將 Redis slowlog 存至 Elasticsearch 遇到的狀況,筆記使用當時最新版本: 8.6.1
,但團隊在部份環境還在使用 7.X
造成 index 名稱雜亂
filebeat 7.X 預設 index 名稱是
filebeat-{agent.version}-{yyyy.MM.dd}-{序號}
,filebeat 8.X 預設 index 名稱是
filebeat-{agent.version}
為了符合團隊 kibana dashboard 的處理,調整 index 名稱是必要的,但嘗試了一下發現幾個 google 來的答案沒有提及版本的差異,造成無法設定成期望的名稱,仔細翻閱官方文件才找到原因,紀錄一下加深印象
因為是 使用 filebeat 將 Redis slowlog 存至 Elasticsearch 遇到的狀況,範例主架構就延用上次內容不另外準備,只更新版本
基本環境說明
- macOS Ventura 13.2
- docker desktop 4.2.0(70708)
- Engine 20.10.10
- Compose 1.29.2
- docker images
- elastic/elasticsearch:8.7.0
- elastic/elasticsearch:.7.17.9
- elastic/kibana:8.7.0
- elastic/kibana:7.17.9
- redis:7.0.10
- docker.elastic.co/beats/filebeat:8.7.0
- docker.elastic.co/beats/filebeat:7.17.9
filebeat config
filebeat.modules: - module: redis log: enabled: false slowlog: enabled: true var.hosts: ["redis:6379"] output.elasticsearch: enabled: true hosts: ["http://elasticsearch:9200"]
docker compose
elasticsearch 7.17
version: "3.9" services: elasticsearch: image: elastic/elasticsearch:7.17.9 environment: - discovery.type=single-node - ES_JAVA_OPTS=-Xms1g -Xmx1g - xpack.security.enabled=false volumes: - esdata:/usr/share/elasticsearch/data ports: - target: 9200 published: 9200 kibana: image: kibana:7.17.9 ports: - target: 5601 published: 5601 depends_on: - elasticsearch redis: image: redis:7.0.10 ports: - target: 6379 published: 6379 redisbeat: image: docker.elastic.co/beats/filebeat:7.17.9 volumes: - ./redisbeats7.yml:/usr/share/filebeat/filebeat.yml:ro depends_on: - elasticsearch volumes: esdata: driver: local
elasticsearch 8.7
version: "3.9" services: elasticsearch: image: elastic/elasticsearch:8.7.0 environment: - discovery.type=single-node - ES_JAVA_OPTS=-Xms1g -Xmx1g - xpack.security.enabled=false volumes: - esdata:/usr/share/elasticsearch/data ports: - target: 9200 published: 9200 kibana: image: kibana:8.7.0 ports: - target: 5601 published: 5601 depends_on: - elasticsearch redis: image: redis:7.0.10 ports: - target: 6379 published: 6379 redisbeat: image: docker.elastic.co/beats/filebeat:8.7.0 volumes: - ./redisbeats8.yml:/usr/share/filebeat/filebeat.yml:ro depends_on: - elasticsearch volumes: esdata: driver: local
設定方式
filebeat 7:redisbeats7.yml
- 修改
setup.ilm.rollover_alias
與setup.ilm.pattern
setup.ilm.enabled
預設已啟用預設
ilm
是啟用,index 的 pattern 由ilm
接管,詳細內容可以參考官方文件:Elastic Docs ›Filebeat Reference [7.17] ›How to guidesfilebeat.modules: - module: redis log: enabled: false slowlog: enabled: true var.hosts: ["redis:6379"] output.elasticsearch: enabled: true hosts: ["http://elasticsearch:9200"] setup.ilm.enabled: auto setup.ilm.rollover_alias: "redis" setup.ilm.pattern: "{now/d}"
- 修改
filebeat 8:redisbeats8.yml
修改
output.elasticsearch.index
、setup.template.name
與setup.template.pattern
修改
output.elasticsearch.index
需一併設定setup.template.name
與setup.template.pattern
,詳細內容可以參考官方文件:Elastic Docs ›Filebeat Reference [8.7] ›How to guidesfilebeat.modules: - module: redis log: enabled: false slowlog: enabled: true var.hosts: ["redis:6379"] output.elasticsearch: enabled: true hosts: ["http://elasticsearch:9200"] index: "redis-%{+yyyy.MM}" setup.template.name: "redis" setup.template.pattern: "redis-*"
心得
反覆測試了好幾次才發現在 filebeat 不同版本間設定方式不一樣的問題,類似的狀況我還額外在實際部署時遇到:環境使用 helm 安裝 elastic/filebeat
,filebeat 7 與 8 的 value 有比較大幅度的調整。以我的例子來說,我需要用 8.X 的 chart 但 filebeat 則需要使用 7.X
除此之外我自己測試時的另一個狀況是:filebeat 需要與 elasticsearch 使相同版本,否則會收不到資料,我快速看了 log 是 metadata 不同造成的
完整原始碼:yowko/filebeat-custom-index
參考資訊
文章作者 Yowko Tsai
上次更新 2023-04-10
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。