之前写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

Docker极简部署Kafka+Zookeeper+ElasticStack的更多相关文章

  1. .Net Core in Docker极简入门(下篇)

    Tips:本篇已加入系列文章阅读目录,可点击查看更多相关文章. 目录 前言 开始 Docker-Compose 代码修改 yml file up & down 镜像仓库 最后 前言 上一篇[. ...

  2. 小白的docker极简入门(二)、5分钟教你玩转docker安装

    0-前言 上一篇中,我们已经安装后Linux了,我们需要在Linux下安装docker,然后才能在docker中安装和部署各种应用 同样,5分钟教你完成docker正确安装和使用, 不是纸上谈兵,不是 ...

  3. .Net Core in Docker极简入门(上篇)

    目录 前言 开始 环境准备 Docker基础概念 Docker基础命令 Docker命令实践 构建Docker镜像 Dockerfile bulid & run 前言 Docker 是一个开源 ...

  4. Docker极简入门:使用Docker运行Java程序

    运行简单的Java程序 先在当前目录创建App.java文件 public class App{ public static void main(String[] args){ String os = ...

  5. Docker极简入门:使用Docker-Compose 运行网站浏览量统计Demo

    Docker-Compose 是一个可以对 Docker 容器集群的快速编排的工具,能够减轻您心智和手指的负担. 简单的来说 Docker-Compose 就是将你运行多个容器的命令编写到了一起,类似 ...

  6. Docker极简入门:使用Docker-Compose 搭建redis集群

    为了构建一个集群,我们首先要让 redis 启用集群模式 一个简单的配置文件如下redis.conf # redis.conf file port 6379 cluster-enabled yes c ...

  7. 在Docker环境下部署Kafka

    参考:https://blog.csdn.net/u011537073/article/details/70767064

  8. asp.net core 发布到docker 极简步骤

    1.使用dotnet命令发布项目 2.把发布成功的文件通过scp等工具发布到linux服务器上,在当前目录下新建一个dockerfile 3.使用asp.net core镜像为底包构建一个新的镜像 4 ...

  9. 转 docker 部署 kafka

    原文链接 http://blog.csdn.net/snowcity1231/article/details/54946857 -e KAFKA_BROKER_ID=1 -e ZK=zk -p 909 ...

随机推荐

  1. docker E: Unable to locate package nginx

    在使用docker容器时,有时候里边没有安装vim,敲vim命令时提示说:vim: command not found,这个时候就需要安装vim,可是当你敲apt-get install vim命令时 ...

  2. proxmox新版本使用了lxc容器,导致以前的vzlist命令无法使用,于是自己写了一个脚本来获取所有半虚拟化主机的信息状态

    #!/usr/bin/env python #encoding:utf-8 # desc:用来描述各个主机信息 import os #CTID NPROC STATUS IP_ADDR HOSTNAM ...

  3. DIP|PCN|CoevDB|PID|Y2H|RosettaDock Serve|元基因组学|微生物多样性

    生命组学: 比较真核生物有关呼吸链的gene是比较核外编码基因,因为与呼吸有关的功能在线粒体上,线粒体位于核外.想要查看两种基因是否具有相互作用,可以对不同物种的编码ATP6 和ATP8的直系同源基因 ...

  4. the Uneducated are|anymore|that| so as to |die from|die of|

    定冠词加上某些形容词可以泛指一类人,谓语动词一般用复数形式,the uneducated泛指未受过教育的人, the Uneducated are more to be pitied than bla ...

  5. jQuery ajax中的参数含义

    所有options均可选,下面简要说明每个option 1.async 默认为true,即请求为异步请求,这也是ajax存在的意义.但同时也可以将这个参数设置为false,实现同步请求.(同步请求会锁 ...

  6. Ubuntu12.10下安装Python3

    设置Python3.2为默认版本 ubuntu12.10下默认安装了Python2.7和Python3.2.3,并且设置了Python2.7为默认的版本,因此如果讨厌麻烦的话,可以直接将Python3 ...

  7. Luogu_1966_火柴排队

    题目描述 涵涵有两盒火柴,每盒装有\(n\)根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为:$ \sum (a_i-b_i)^2 ...

  8. 从假图片到假新闻,AI就这样“控制”了我们

    在评论某位新蹿红的明星时,围观群众总是习惯性地先从长相上来判定,如"像周润发和梁朝伟的合体"."刘德华和郭富城的合体"等--反正比"黄渤和王宝强的合体 ...

  9. [Python_scrapy图片爬取下载]

    welcome to myblog Dome地址 爬取某个车站的图片 item.py 中 1.申明item 的fields class PhotoItem(scrapy.Item): # define ...

  10. AI:是猫还是狗,这是个问题

    如果你不喜欢小猫和小狗,你可能不知道他们具体是哪一种品种,但是一般来说,你都能区分出这是猫还是狗,猫和狗的特征还是不一样的,那我们如何用机器学习的方法训练一个网络区分猫狗呢? 我们选用的是 Kaggl ...