首页 > 解决方案 > 使用 docker-compose 为 ELK 推荐的 RAM 比率

问题描述

我有一个 8GB RAM 的生产服务器。我希望在服务器上托管弹性、logstash 和 kibana。使用码头工人撰写。

每个容器的推荐 java 大小内存大小是多少。我该如何配置这个。

我的docker-compose样子如下

---
version: '3'
services

  kibana:
    build:
      context: kibana/
    container_name: kibana
    volumes:
      - ./kibana/config/:/usr/share/kibana/config:ro
    networks: ['elk']
    depends_on:
      - elasticsearch
    restart: always

  elasticsearch:
    build:
      context: elasticsearch/
    container_name: elasticsearch
    networks: ['elk']
    volumes:
      - ./elastic-data:/usr/share/elasticsearch/data
      - ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
    restart: always
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    environment:
      - cluster.name=es-docker
      - node.name=node1
      - bootstrap.memory_lock=true

  logstash:
      build:
        context: logstash/
      container_name: logstash
      volumes:
        - ./logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf:ro
      networks: ['elk']
      ports:
        - "5044:5044"
      depends_on:
        - elasticsearch
      restart: always

networks: {elk: {}}

现在在弹性文档上搜索,我看到了一些设置,比如 - "ES_JAVA_OPTS=-Xms512m -Xmx512m"

所以我想知道.. 对于上面的 docker-compose,我应该允许 java 堆大小/内存限制的哪些设置以及如何更新 compose 以包含它。

我的想法是 4GB 弹性 2GB logstash 1GB Kibana

为主机保留 1GB

标签: elasticsearchdocker-composeelastic-stackproduction-environment

解决方案


继续我们在上面评论中的讨论,假设大小是正确的,你现在需要做的是按照讨论的大小调整每个 Docker 容器的大小。请注意,由于您没有使用 Swarm,因此您实际上不需要使用 v3 格式,v2 就足够了,因此我修改了version下面的行。我还在容器部分添加mem_limit了每个容器和堆大小。environmentelasticsearch

version: '2.3'
services

  kibana:
    build:
      context: kibana/
    container_name: kibana
    volumes:
      - ./kibana/config/:/usr/share/kibana/config:ro
    networks: ['elk']
    depends_on:
      - elasticsearch
    restart: always
    mem_limit: 1g

  elasticsearch:
    build:
      context: elasticsearch/
    container_name: elasticsearch
    networks: ['elk']
    volumes:
      - ./elastic-data:/usr/share/elasticsearch/data
      - ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
    restart: always
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    environment:
      - cluster.name=es-docker
      - node.name=node1
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms2g -Xmx2g"
    mem_limit: 4g

  logstash:
      build:
        context: logstash/
      container_name: logstash
      volumes:
        - ./logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf:ro
      networks: ['elk']
      ports:
        - "5044:5044"
      depends_on:
        - elasticsearch
      restart: always
      mem_limit: 2g
      environment:
        - "LS_JAVA_OPTS=-Xmx1g -Xms1g"

networks: {elk: {}}

推荐阅读