之前写 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.YAML
├── logstash-pipeline
│ └── logstash.conf
└── README.md
修改配置文件. env
按需修改. env 文件
- #docker-compose.YAML 引用变量, 便于单机部署 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.YAML 的文件夹下执行一行命令即可启动
docker-compose up -d
部署后修改配置
部署后修改配置的问题再所难免, 处理也较简单
修改 docker-compose.YAML 的话, 执行部署命令会检测变更
docker-compose up -d
非上述文件的话, 需要判断变动配置会影响哪些容器, 如:
Kafka 依赖 Zookeeper
Logstash 依赖 Es 与 Kafka
Kibana 依赖 Es
分别按依赖关系重启容器即可 (被依赖的如果变动需要先重启) 不被依赖的直接重启
docker restart 容器 ID 或 Name
后续
本文源码直接去 GitHub 上看吧, 技术含量不高, 主要是为了方便大家部署 ELK
来源: https://www.cnblogs.com/hellxz/p/quick-deploy-kafka-elk.html