Docker極簡部署Kafka+Zookeeper+ElasticStack
阿新 • • 發佈:2020-03-17
之前寫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
最後,如果本文對你有幫助,歡迎推薦、評論,轉載請註明出處。
原始碼地址: