【问题标题】:Log Elasticsearch requests/queries to stdout for a docker instance using docker-compose使用 docker-compose 将 Elasticsearch 请求/查询记录到 docker 实例的标准输出
【发布时间】:2020-07-08 02:50:23
【问题描述】:

我正在尝试使用 dockerhub 上的普通 docker 容器在本地(出于开发目的)运行 Elasticsearch。

当我在本地运行实例时,我希望看到所有查询都转储到 stdout/console,以便我可以轻松查看我的 elastic-SDK 客户端创建/编写/执行的查询。

我在这个地方看到了一些 cmets,表明可以通过自定义各种设置来完成,例如:

index.search.slowlog.threshold.query.debug: 0s
index.search.slowlog.threshold.fetch.debug: 0s
index.indexing.slowlog.threshold.index.debug: 0s

但我不确定如何通过 docker-compose 执行此操作。

我尝试了以下方法,但 ES 在启动时崩溃了:

version: '3.5'

services:

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.2.0
    container_name: my-elasticsearch
    networks:
      - my-network
    ports:  
      - "9200:9200"
      - "9300:9300"
    environment:
      - discovery.type=single-node
      - index.indexing.slowlog.threshold.index.deb=0s
      - index.search.slowlog.threshold.fetch.debug=0s
      - index.search.slowlog.threshold.query.debug=0s

有办法吗?

【问题讨论】:

  • 非常感谢您接受答案:D,希望您也已经投票了:p

标签: docker elasticsearch logging docker-compose


【解决方案1】:

为版本等于或大于 5.X 添加另一个答案,

  1. 这些是当前使用的主要版本。
  2. Elasticsearch 5.X 已弃用相关设置,在 elasticsearch.yml 中使用它们会引发以下错误:

弹性搜索 | {“类型”:“服务器”,“时间戳”: “2020-04-04T10:18:57,720Z”、“级别”:“警告”、“组件”: “o.e.c.s.SettingsModule”,“cluster.name”:“ami-es”,“node.name”: “e35893907d50”,“消息”: "\n**************************************************** ******************************************\n在节点级别配置中找到索引级别设置。\n \n因为 elasticsearch 5.x 索引级别设置不能在节点上设置 \n像 elasticsearch.yaml 这样的配置,在系统属性中或 命令行 \narguments。为了升级所有索引的设置 必须通过 \n/${index}/_settings API 更新。除非所有设置 是动态的,所有索引都必须关闭\n才能应用 upgradeIndices 将来创建的应该使用索引模板\nto 设置默认值。 \n\n请确保所有必需的值都已更新 通过执行在所有索引上:\n\ncurl -XPUT 'http://localhost:9200/_all/_settings?preserve_existing=true' -d '{\n \"index.indexing.slowlog.threshold.index.debug\" : \"0ms\",\n \"index.search.slowlog.threshold.fetch.debug\" : \"0ms\",\n \"index.search.slowlog.threshold.query.debug\" : \"0ms\"\n}'\n****************************************** ************************************************\n" }

基本上是为了解决它,而不是在elasticsearch.yml 中提及它们,只需点击下面的 API 即可。

PUT http://{{hostname}}:{{es-port}}/{{index-name}}/_settings

{
    "index.indexing.slowlog.threshold.index.warn": "0s",
    "index.indexing.slowlog.threshold.index.info": "0s",
    "index.indexing.slowlog.threshold.index.debug": "0s",
    "index.indexing.slowlog.threshold.index.trace": "0s",
    "index.indexing.slowlog.level": "info",
    "index.indexing.slowlog.source": "1000"
}

【讨论】:

  • 所以我必须使用 API 来打开设置,而不是使用一些 env-var 或一些引导设置?
  • @Pure.Krome,是的,根据您在 docker-compose 中的弹性版本,您需要打开这些设置,好消息是这些是动态的,因此您可以立即验证它。
【解决方案2】:

对于低于 5.X 的 Elasticsearch 版本(这些是特定于索引的设置,从 ES 版本 5.X 开始已弃用)

Elasticsearch.yml

cluster.name: "my-es-cluster" 
network.host: 0.0.0.0
index.search.slowlog.threshold.query.debug: 0ms
index.search.slowlog.threshold.fetch.debug: 0ms
index.indexing.slowlog.threshold.index.debug: 0ms

Docker-compose.yml 内容

version: '2.2'

services:
  #Elasticsearch Docker Images: https://www.docker.elastic.co/
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.0
    container_name: elasticsearch
    environment:
      - xpack.security.enabled=false
      - discovery.type=single-node
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    cap_add:
      - IPC_LOCK
    volumes:
      - ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    ports:
      - 9200:9200
      - 9300:9300

volumes:
  elasticsearch-data:
    driver: local

编辑:根据 OPs cmets,

  1. 您可以将 elasticsearch.yml 保存在 localhost 的任何位置,但需要在 volume 部分下正确引用,最好将其保存在 docker-compose 文件旁边,然后使用 ./ 表示基于 *nix 的系统中的当前文件夹。
  2. 是的,需要使用此处给出的内容创建 docker-compose.yml 并更改卷部分,以便使用本地中存在的 elasticsearch.yml 文件来创建具有相同设置和配置的 Elasticsearch docker在 localhost 的配置文件中。
  3. Docker for elasticsearch in this compose file *nix 因此无需更改卷中: 部分之后的卷部分,但在此之前它是您的本地主机文件系统,因此请相应地进行更改。

如果您遇到任何问题,请告诉我,我们很乐意为您提供进一步帮助。

【讨论】:

  • 非常感谢您的精彩回复。所以让我做对了,首先我需要 1) 创建一个 elasticsearch.yml 文件,并将其放在我的本地主机上的某个位置。 2)将docker-compose.yml文件改成上面的。 3) 更改 volume 部分,以便 ES 使用我的 localhost 文件(在容器实例之外)作为它的配置。旁注:我在 Windows 电脑上,所以我猜音量必须不同。
  • 哦-抱歉..我忘了还问...您能否发布一个我应该创建的elasticsearch.yml文件的非常快速的示例?它字面意思是一个包含这三个设置的空文件?
  • @Pure.Krome,请给我一些时间,我会提供这个
  • @Pure.Krome,正如我所承诺的那样,我提供了我的答案 :),抱歉耽搁了,但忙于工作,最后在周末有一些时间来完成它,它涉及复制问题,调试等
猜你喜欢
  • 2015-07-15
  • 1970-01-01
  • 2020-10-12
  • 2016-02-22
  • 1970-01-01
  • 2022-10-24
  • 2018-10-27
  • 1970-01-01
  • 2018-06-08
相关资源
最近更新 更多