使用docker compose将Elasticsearch请求/查询记录到docker实例的stdout



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

当我在本地运行实例时,我希望看到所有查询都被转储到stdout/console,这样我就可以很容易地看到我的弹性SDK客户端创建/组成/执行了什么查询。

我在这个地方看到了一些评论,建议可以通过自定义各种设置来完成,比如:

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

有办法吗?

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

  1. 这些是当前使用的主要版本
  2. Elasticsearch 5.X不赞成使用有问题的设置,在elasticsearch.yml中使用它们会引发以下错误:

elasticsearch|{"type":"server","timestamp":"2020-04-04T10:18:57720Z","级别":"警告","组件":"o.e.c.s.SettingsModule","cluster.name":"ami es","node.name"e35893907d50","消息":"\n*************************************\n在节点级配置上找到索引级设置。\n\n自不能在节点上设置elasticsearch5.x索引级别设置\在系统属性或命令行\narguments.为了升级所有索引设置必须通过\n/${index}/settings API更新。除非所有设置是动态的,必须关闭所有索引\n才能应用upgradeIndices将来创建的索引应该使用索引模板\n设置默认值。\\n\n请确保所有必需的值都已更新在所有索引上执行:\n\ncrl-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://{{主机名}}:{端口}/{索引名}/设置

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

对于低于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

编辑:根据操作人员的意见,

  1. 您可以将elasticsearch.yml保存在localhost中的任何位置,但需要正确引用volume部分,最好将其保存在docker compose文件旁边,然后使用。/这意味着基于*nix的系统中的当前文件夹
  2. 是的,需要用这里给出的内容创建docker-compose.yml,并更改卷部分,这样本地中的elasticsearch.yml文件将用于创建具有localhost配置文件中提到的相同设置和配置的Elasticsearch docker
  3. Docker在这个组成文件*nix中进行弹性搜索,因此不需要在卷中的:部分之后更改卷部分,但在此之前它是您的localhost文件系统,因此需要相应地更改它

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

最新更新