使用 docker-compose 的 ELK 的推荐 RAM 比率

Recommended RAM ratios for ELK with docker-compose

我有一个 8GB RAM 的生产服务器。我希望在服务器上托管 elastic、logstash 和 kibana。使用 docker 撰写。

每个容器的推荐 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: {}}

现在在 elastic documentatino 上四处搜索,我看到了一些设置,比如 - "ES_JAVA_OPTS=-Xms512m -Xmx512m"

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

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

为主机预留 1GB

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

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: {}}