【拆分版】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以關閉集群

本文系原創文章,謝絕轉載

posted @ 2019-06-26 09:58 東北小狐貍 閱讀(...) 評論(...) 編輯 收藏
内部期期公开一波中特