1. 程式人生 > >【拆分版】 Docker-compose構建Logstash多例項,基於7.1.0

【拆分版】 Docker-compose構建Logstash多例項,基於7.1.0

【拆分版】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舉例說明

.envdocker-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

使用說明

  1. 需要確保多臺主機均能正常ping通
  2. 確保Zookeeper叢集與Kafka叢集已經啟動,並且Logstash訂閱的borkers的列表能對得起來
  3. 確保Elasticsearch叢集正常啟動
  4. 宿主機/etc/hosts新增kafka1kafka2kafka3對映到對應的kafka所在的宿主機ip
  5. 修改每個Logstash目錄下的config/logstash.conf中的輸出es部分的ip到es-tribe對應的宿主機ip
  6. 修改每個Logstash目錄下的config/logstash.yml中的http.host為當前宿主機ip, 修改xpack.monitoring.elasticsearch.hosts為當前es-tribe宿主機ip與port
  7. 進入每個Logstash目錄執行docker-compose up -d以啟動叢集,執行docker-compose down以關閉叢集

本文系原創文章,謝絕轉