• 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

  • 相关阅读:
    YTU 2405: C语言习题 牛顿迭代法求根
    学军中学推理社2017届招新试题
    UWP开发入门系列笔记之(零):UWP的前世今生
    微信开发基础教程
    text-align:center与<CENTER>的区别
    css中em与px的区别
    text-align 属性规定元素中的文本的水平对齐方式。
    常用颜色代码
    CSS中font-style的属性有Italic oblique,它们俩的区别是什么呢?
    css对大小写不敏感,空格不会影响css在浏览器的工作效果
  • 原文地址:https://www.cnblogs.com/hellxz/p/quick-deploy-kafka-elk.html
Copyright © 2020-2023  润新知