Docker極簡部署Kafka+Zookeeper+ElasticStack


之前寫ELK部分時有朋友問有沒有能一鍵部署的Kafka+ELK,寫本文主要是填這個坑,基本上配置已經集中在一兩個文件中了,理論上此配置支持ElasticStack 7.x所有版本

本文所有配置與代碼均在本人Github中可以找到:https://github.com/hellxz/QuickDeployElasticStack

測試環境

  • 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修改內存限制

$ sudo vim /etc/security/limits.conf
#添加如下內容並保存退出
* soft memlock unlimited
* hard memlock unlimited

修改系統限制文件打開數、線程數等

$ sudo vim /etc/systemd/system.conf
#最下方添加,參數值可以更大些
DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity

重啟主機執行命令systemctl daemon-reexec

修改vm.map計數的操作系統限制 並 禁用swap

$ sudo vim /etc/sysctl.conf
#添加如下內容,如有配置,請修改
vm.max_map_count=262144
vm.swappiness=0
#保存退出
$ sudo sysctl -p
#立即永久生效

有興趣的可以寫Shell腳本自動配置,本人覺得這些配置最好還是對系統管理員或部署人員可見為好

Clone 倉庫到本地

git clone https://github.com/hellxz/QuickDeployElasticStack.git
cd QuickDeployElasticStack

文件結構如下

.
├── docker-compose.yml
├── .env
├── logstash-pipeline
│   └── logstash.conf
└── README.md

修改配置文件.env

按需修改.env文件

#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

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的文件夾下執行一行命令即可啟動

docker-compose up -d

部署后修改配置

部署后修改配置的問題再所難免,處理也較簡單

修改 docker-compose.yml 的話,執行部署命令會檢測變更

docker-compose up -d

非上述文件的話,需要判斷變動配置會影響哪些容器,如:

  • Kafka依賴Zookeeper

  • Logstash依賴Es與Kafka

  • Kibana依賴Es

    分別按依賴關系重啟容器即可(被依賴的如果變動需要先重啟)不被依賴的直接重啟

docker restart 容器ID或Name

后續

本文源碼直接去Github上看吧,技術含量不高,主要是為了方便大家部署ELK

最后,如果本文對你有幫助,歡迎推薦、評論,轉載請注明出處。

源碼地址:https://github.com/hellxz/QuickDeployElasticStack


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM