【拆分版】Docker-compose構建Logstash多實例
寫在最前
說起Logstash,這個組件並沒有什麼集群的概念,與其說是集群,不如說是各自去收集日誌分析過濾存儲到Elasticsearch中。這裏做個多實例的Logstash,其實本質上只是為Logstash指定好佔用的端口,輸入輸出的配置的掛載,如是而已。
本文配置為紅框中的部分:Logstash多節點收集的數據,統統輸出數據到es-tribe,讓這個協調節點自己去負載均衡寫入數據。
配置詳見git倉庫 https://github.com/hellxz/docker-logstash-multiple.git
如有疑問或本文寫得有出入的地方,期望評論指定。
目錄結構
├── docker-ls-multiple-down.sh
├── docker-ls-multiple-up.sh
├── logstash-01
│ ├── config
│ │ ├── logstash.conf
│ │ └── logstash.yml
│ ├── docker-compose.yml
│ └── .env
├── logstash-02
│ ├── config
│ │ ├── logstash.conf
│ │ └── logstash.yml
│ ├── docker-compose.yml
│ └── .env
└── logstash-03
├── config
│ ├── logstash.conf
│ └── logstash.yml
├── docker-compose.yml
└── .env
文件說明
以logstash-01
舉例說明
.env
為docker-compose.yml
提供了Logstash配置文件目錄的位置,如果不放置到其他位置,無需更改
# .env file for docker-compose default. please be careful.
# logstash config dir mount set. change inside dir config file to change logstash cluster settings.
# default use relation path. don't change if you don't know what means.
LOGSTASH_CONFIG_DIR=./config
docker-compose.yml
為docker-compose的配置文件,這裏只讀取了.env
的配置文件的路徑,並把路徑下的logstash.conf
掛載到容器中logstash目錄下pipeline/logstash.conf
,掛載logstash.yml
到logstash目錄下config/logstash.yml
version: "3"
services:
logstash-1:
image: logstash:7.1.0
container_name: logstash-1
volumes:
- ${LOGSTASH_CONFIG_DIR}/logstash.conf:/usr/share/logstash/pipeline/logstash.conf:rw
- ${LOGSTASH_CONFIG_DIR}/logstash.yml:/usr/share/logstash/config/logstash.yml:rw
network_mode: "host"
logstash.conf
為模板文件,輸入輸出以及配置都可以在這裏修改
input { #輸入
kafka { #使用kafka方式輸入
bootstrap_servers => "kafka1:9092,kafka2:9093,kafka3:9094" #kafka集群節點列表
topics => ["all_logs"] #訂閱名為all_logs的topic
group_id => "logstash" #設置組為logstash
codec => json #轉換為json
}
}
filter { #過濾分詞等都在這裏配置,暫時未配置
}
output { #輸出
elasticsearch { #輸出到es
hosts => ["10.2.114.110:9204"] #es的路徑
index => "all-logs-%{+YYYY.MM.dd}" #輸出到es的索引名稱,這裡是每天一個索引
#user => "elastic"
#password => "changeme"
}
stdout {
codec => rubydebug
}
}
此處設置並不是本文中的重點,有興趣和需要請參考其它文章的相關配置
logstash.yml
為logstash的配置文件,只寫了些與集群相關的,還有更多請參考其它文章.
# set now host ip to http.host
http.host: 10.2.114.110
# set the es-tribe-node host. let logstash monitor the es.
xpack.monitoring.elasticsearch.hosts:
- http://10.2.114.110:9204
# enable or disable the logstash monitoring the es.
xpack.monitoring.enabled: true
這裏沒有指定Logstash啟動時的端口號,Logstash默認端口為9600,多實例在同主機時,會自動分配9600后的端口
另外兩個腳本文件,僅在使用同一台主機時使用,便捷啟動/關閉多節點Logstash
使用說明
- 需要確保多台主機均能正常ping通
- 確保Zookeeper集群與Kafka集群已經啟動,並且Logstash訂閱的borkers的列表能對得起來
- 確保Elasticsearch集群正常啟動
- 宿主機
/etc/hosts
添加kafka1
、kafka2
、kafka3
映射到對應的kafka所在的宿主機ip - 修改每個Logstash目錄下的
config/logstash.conf
中的輸出es部分的ip到es-tribe對應的宿主機ip - 修改每個Logstash目錄下的
config/logstash.yml
中的http.host
為當前宿主機ip, 修改xpack.monitoring.elasticsearch.hosts
為當前es-tribe宿主機ip與port - 進入每個Logstash目錄執行
docker-compose up -d
以啟動集群,執行docker-compose down
以關閉集群
本文系原創文章,謝絕轉載
【精選推薦文章】
自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象
網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!
評比前十大台北網頁設計、台北網站設計公司知名案例作品心得分享
台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"