zoukankan      html  css  js  c++  java
  • 【拆分版】Docker-compose构建Logstash多实例,基于7.1.0

    【拆分版】Docker-compose构建Logstash多实例

    写在最前

    说起Logstash,这个组件并没有什么集群的概念,与其说是集群,不如说是各自去收集日志分析过滤存储到Elasticsearch中。这里做个多实例的Logstash,其实本质上只是为Logstash指定好占用的端口,输入输出的配置的挂载,如是而已。

    本文配置为红框中的部分:Logstash多节点收集的数据,统统输出数据到es-tribe,让这个协调节点自己去负载均衡写入数据。

    配置详见git仓库 https://github.com/hellxz/docker-logstash-multiple.git
    如有疑问或本文写得有出入的地方,期望评论指定。

    目录结构

    ├── docker-ls-multiple-down.sh
    ├── docker-ls-multiple-up.sh
    ├── logstash-01
    │   ├── config
    │   │   ├── logstash.conf
    │   │   └── logstash.yml
    │   ├── docker-compose.yml
    │   └── .env
    ├── logstash-02
    │   ├── config
    │   │   ├── logstash.conf
    │   │   └── logstash.yml
    │   ├── docker-compose.yml
    │   └── .env
    └── logstash-03
        ├── config
        │   ├── logstash.conf
        │   └── logstash.yml
        ├── docker-compose.yml
        └── .env
    
    

    文件说明

    logstash-01举例说明

    .envdocker-compose.yml提供了Logstash配置文件目录的位置,如果不放置到其他位置,无需更改

    # .env file for docker-compose default. please be careful.
    # logstash config dir mount set. change inside dir config file to change logstash cluster settings.
    # default use relation path. don't change if you don't know what means.
    LOGSTASH_CONFIG_DIR=./config
    

    docker-compose.yml 为docker-compose的配置文件,这里只读取了.env的配置文件的路径,并把路径下的logstash.conf挂载到容器中logstash目录下pipeline/logstash.conf,挂载logstash.yml到logstash目录下config/logstash.yml

    version: "3"
    services:
        logstash-1:
            image: logstash:7.1.0
            container_name: logstash-1
            volumes:
                - ${LOGSTASH_CONFIG_DIR}/logstash.conf:/usr/share/logstash/pipeline/logstash.conf:rw
                - ${LOGSTASH_CONFIG_DIR}/logstash.yml:/usr/share/logstash/config/logstash.yml:rw
            network_mode: "host"
    

    logstash.conf为模板文件,输入输出以及配置都可以在这里修改

    input {     #输入
      kafka {	#使用kafka方式输入
        bootstrap_servers => "kafka1:9092,kafka2:9093,kafka3:9094" #kafka集群节点列表
        topics => ["all_logs"] #订阅名为all_logs的topic
        group_id => "logstash" #设置组为logstash
        codec => json #转换为json
      }
    }
    
    filter { #过滤分词等都在这里配置,暂时未配置
    
    }
    
    output {     #输出
      elasticsearch { #输出到es
        hosts => ["10.2.114.110:9204"] #es的路径
        index => "all-logs-%{+YYYY.MM.dd}" #输出到es的索引名称,这里是每天一个索引
        #user => "elastic"
        #password => "changeme"
      }
      stdout {
        codec => rubydebug
      }
    }
    
    

    此处设置并不是本文中的重点,有兴趣和需要请参考其它文章的相关配置

    logstash.yml 为logstash的配置文件,只写了些与集群相关的,还有更多请参考其它文章.

    # set now host ip to http.host
    http.host: 10.2.114.110
    # set the es-tribe-node host. let logstash monitor the es.
    xpack.monitoring.elasticsearch.hosts:
    - http://10.2.114.110:9204
    # enable or disable the logstash monitoring the es.
    xpack.monitoring.enabled: true
    
    

    这里没有指定Logstash启动时的端口号,Logstash默认端口为9600,多实例在同主机时,会自动分配9600后的端口
    另外两个脚本文件,仅在使用同一台主机时使用,便捷启动/关闭多节点Logstash

    使用说明

    1. 需要确保多台主机均能正常ping通
    2. 确保Zookeeper集群与Kafka集群已经启动,并且Logstash订阅的borkers的列表能对得起来
    3. 确保Elasticsearch集群正常启动
    4. 宿主机/etc/hosts添加kafka1kafka2kafka3映射到对应的kafka所在的宿主机ip
    5. 修改每个Logstash目录下的config/logstash.conf中的输出es部分的ip到es-tribe对应的宿主机ip
    6. 修改每个Logstash目录下的config/logstash.yml中的http.host为当前宿主机ip, 修改xpack.monitoring.elasticsearch.hosts为当前es-tribe宿主机ip与port
    7. 进入每个Logstash目录执行docker-compose up -d以启动集群,执行docker-compose down以关闭集群

    本文系原创文章,谢绝转载

  • 相关阅读:
    bzoj 1017 魔兽地图DotR
    poj 1322 chocolate
    bzoj 1045 糖果传递
    poj 3067 japan
    timus 1109 Conference(二分图匹配)
    URAL 1205 By the Underground or by Foot?(SPFA)
    URAL 1242 Werewolf(DFS)
    timus 1033 Labyrinth(BFS)
    URAL 1208 Legendary Teams Contest(DFS)
    URAL 1930 Ivan's Car(BFS)
  • 原文地址:https://www.cnblogs.com/hellxz/p/docker_logstash_mutiple_nodes.html
Copyright © 2011-2022 走看看