1. 程式人生 > >Docker極簡部署Kafka+Zookeeper+ElasticStack

Docker極簡部署Kafka+Zookeeper+ElasticStack

之前寫ELK部分時有朋友問有沒有能一鍵部署的Kafka+ELK,寫本文主要是填這個坑,基本上配置已經集中在一兩個檔案中了,理論上此配置支援ElasticStack 7.x所有版本 本文所有配置與程式碼均在本人Github中可以找到: ## 測試環境 - Ubuntu 18.04 LTS - Docker 18.09.7 - docker-compose 1.24.0 - 主機IP:192.168.87.139 - ElasticStack 7.5.2 ## 埠號佔用表 | 服務名稱 | 預設埠號 | | ------------- | ------------------------- | | elasticsearch | 9200 | | logstash | 9600 | | kibana | 5601 | | zookeeper | 2181 | | kafka | 9090 | | kafka-manager | 9001(防止與cerebro衝突) | >
以上埠號本來想再提供自定義配置到 `.env` 檔案中的,有過度設計的嫌疑,所以就不放上去了 ## 部署ElasticStack的主機的配置 **為ES修改記憶體限制** ```bash $ sudo vim /etc/security/limits.conf #新增如下內容並儲存退出 * soft memlock unlimited * hard memlock unlimited ``` **修改系統限制檔案開啟數、執行緒數等** ```bash $ sudo vim /etc/systemd/system.conf #最下方新增,引數值可以更大些 DefaultLimitNOFILE=65536 DefaultLimitNPROC=32000 DefaultLimitMEMLOCK=infinity ``` **重啟主機** 或 **執行命令**:`systemctl daemon-reexec` **修改vm.map計數的作業系統限制 並 禁用swap** ```bash $ sudo vim /etc/sysctl.conf #新增如下內容,如有配置,請修改 vm.max_map_count=262144 vm.swappiness=0 #儲存退出 $ sudo sysctl -p #立即永久生效 ``` >
有興趣的可以寫Shell指令碼自動配置,本人覺得這些配置最好還是對系統管理員或部署人員可見為好 ## Clone 倉庫到本地 ```shell git clone https://github.com/hellxz/QuickDeployElasticStack.git cd QuickDeployElasticStack ``` 檔案結構如下 ``` . ├── docker-compose.yml ├── logstash-pipeline │   └── logstash.conf └── README.md ``` ## 修改配置檔案.env 按需修改.env檔案 ```shell #docker-compose.yml引用變數,便於單機部署ElasticStack #Author: Hellxz #=========================== 宿主機 配置項 =================================== #宿主機ip LOCALHOST_IP=192.168.87.139 #=========================== ElasticStack 共用配置 =========================== #ELK Docker映象版本號 ELASTIC_STACK_VERSION=7.5.2 #=========================== Elasticsearch 配置項 ============================ #Elastsearch JVM設定, Xms與Xmx保持相同,最大不要超過32G ES_JVM_OPTS=-Xms8g -Xmx8g #Elastsearch資料持載目錄與日誌目錄,需要對映到主機上 ES_DATA_DIR=/data/elk/es-data ES_LOGS_DIR=/data/elk/es-logs #=========================== Logstash 配置項 ================================= #Logstash 流水線工作執行緒數 LOGSTASH_PIPELINE_WORKERS=5 #Logstash JVM設定 LS_JAVA_OPTS=-Xms4g -Xmx4g #=========================== Kafka 配置項 ==================================== #Kafka主機名 #外部訪問kafka時,只需將客戶端主機hosts新增Kafka宿主機ip與此主機名的對映 #例如,"10.2.6.63 kafka1" KAFKA_HOSTNAME=kafka1 #Kafka資料目錄 KAFKA_DATA_DIR=/data/elk/kafka-data #Kafka JVM設定 KAFKA_JVM_OPTS=-Xms4g -Xmx4g #Kafka啟動時建立的Topics #格式為"topic名稱:分割槽數:副本數[:清理策略]", 多個topic以','分開 KAFKA_BOOTSTRAP_CREATE_TOPICS=logsTopic:5:1:compact #=========================== KafkaManager 配置項 ============================= #自定義KafkaManager埠號 KAFKA_MANAGER_PORT=9001 #============================ 自定義引數 ===================================== ``` ## 修改logstash-pipeline/logstash.conf ```bash input { kafka { bootstrap_servers =>
"kafka1:9090" #替換為kafka對映hosts名稱 topics => ["logsTopic"] consumer_threads => 3 group_id => "logstash" decorate_events => true codec => json } } filter { #這裡留給大家自由發揮 } output { elasticsearch { hosts => ["192.168.87.139:9200"] #es地址 index => "logs-%{+YYYY.MM.dd}" #user => "elastic" #password => "changeme" } stdout { codec => rubydebug } } ``` ## 快速部署 配置完前邊的部分後,只需要在docker-compose.yml的資料夾下執行一行命令即可啟動 ```shell docker-compose up -d ``` ## 部署後修改配置 部署後修改配置的問題再所難免,處理也較簡單 修改 `docker-compose.yml` 的話,執行部署命令會檢測變更 ```shell docker-compose up -d ``` 非上述檔案的話,需要判斷變動配置會影響哪些容器,如: - Kafka依賴Zookeeper - Logstash依賴Es與Kafka - Kibana依賴Es 分別按依賴關係重啟容器即可(被依賴的如果變動需要先重啟)不被依賴的直接重啟 ```shell docker restart 容器ID或Name ``` **後續** 本文原始碼直接去Github上看吧,技術含量不高,主要是為了方便大家部署ELK 最後,如果本文對你有幫助,歡迎推薦、評論,轉載請註明出處。 原始碼地址: