Elastic Stack [docker-elk] docker 使用 API 调用创建入口点索引
Elastic Stack [docker-elk] docker entry-point index creation using API calls
我正在使用 elastic stack 、elasticsearch logstash 和 kibana 开发一个项目。
现在的目标是使用docker到运行堆栈。基于此 https://github.com/deviantony/docker-elk 我将 docker-compose 配置为 运行 我自己的管道和我自己的解析。
我面临的问题是自动配置(创建索引模板 and/or 索引)。我知道我调用 use curl 来执行 API 调用,在搜索后我发现了入口点 shell 脚本,我尝试从官方图像复制脚本并添加我的 curl -XPUT 调用在那里,但它不起作用。
所以我的下一个反应是打开 CLI 并输入我的 curl 调用,它工作正常。
所以我的问题是如何在容器启动时 运行 我的 API 自动调用,我对 docker 和弹性堆栈还很陌生。
谢谢!
编辑:
所以我使用基本的 bash 图像和 curl 在我的 Dockerfile 上使用 运行 命令安装。
现在我在让服务进行通信时遇到问题(我将它们都放在同一个网络中)我可能做错了所以我得到:
curl: (7) Failed to connect to localhost port 9200: Connection refused
编辑:
更新了我的脚本以在不公开端口的情况下调用 elasticsearch:9200,现在工作正常!
我还认为脚本没有等待 elasticsearch 完成执行脚本。
这是我的 docker-compose 文件:
version: '3.2'
services:
elasticsearch:
build:
context: elasticsearch/
args:
ELK_VERSION: $ELK_VERSION
volumes:
- type: bind
source: ./elasticsearch/config/elasticsearch.yml
target: /usr/share/elasticsearch/config/elasticsearch.yml
read_only: true
- type: volume
source: elasticsearch
target: /usr/share/elasticsearch/data
ports:
- "9200:9200"
- "9300:9300"
environment:
ES_JAVA_OPTS: "-Xmx256m -Xms256m"
ELASTIC_PASSWORD: changeme
# Use single node discovery in order to disable production mode and avoid bootstrap checks.
# see: https://www.elastic.co/guide/en/elasticsearch/reference/current/bootstrap-checks.html
discovery.type: single-node
networks:
- elk
configurator:
build:
context: configurator/
networks:
- elk
depends_on:
- elasticsearch
logstash:
build:
context: logstash/
args:
ELK_VERSION: $ELK_VERSION
volumes:
- type: bind
source: ./logstash/config
target: /usr/share/logstash/config
read_only: true
- type: bind
source: ./logstash/pipeline
target: /usr/share/logstash/pipeline
read_only: true
- type: bind
source: ./logstash/data
target: /usr/share/logstash/data
ports:
- "5044:5044"
- "5000:5000/tcp"
- "5000:5000/udp"
- "9600:9600"
environment:
LS_JAVA_OPTS: "-Xmx256m -Xms256m"
networks:
- elk
depends_on:
- configurator
kibana:
build:
context: kibana/
args:
ELK_VERSION: $ELK_VERSION
volumes:
- type: bind
source: ./kibana/config/kibana.yml
target: /usr/share/kibana/config/kibana.yml
read_only: true
ports:
- "5601:5601"
networks:
- elk
depends_on:
- configurator
networks:
elk:
driver: bridge
volumes:
elasticsearch:
创建一个新的手工 docker 图像(或使用一个好的启动图像),将您需要在启动时发出的 API 调用添加到启动脚本中。确保,它验证是否需要执行调用或所有调用都已由先前的 运行.
完成
接下来将图像添加到您的合成中,并使用 depends_on
选项使其依赖于 elasticsearch 服务。这将确保您的集群在启动 'init container'.
之前 运行ning
现在,启动时,将启动所需的服务(如果尚未启动 运行ning),然后启动 init 容器。
可选:使初始化容器默认不启动,但只有在明确启动时才启动。例如,查看启用 x 选项的监控服务 here
向服务添加 healthchecks 是一种很好的做法。如果您不这样做,docker 将仅根据容器状态 (运行ning=healthly) 假设服务健康。但是 elasticsearch 有一个更长的 bootstrap 我们需要等待的过程。
将以下内容添加到 elasticsearch:
healthcheck:
test: ["CMD-SHELL", "curl --silent --fail localhost:9200/_cluster/health || exit 1"]
interval: 30s
timeout: 30s
retries: 5
并将其添加到配置器服务中:
depends_on:
elasticsearch:
condition: service_healthy
我正在使用 elastic stack 、elasticsearch logstash 和 kibana 开发一个项目。 现在的目标是使用docker到运行堆栈。基于此 https://github.com/deviantony/docker-elk 我将 docker-compose 配置为 运行 我自己的管道和我自己的解析。
我面临的问题是自动配置(创建索引模板 and/or 索引)。我知道我调用 use curl 来执行 API 调用,在搜索后我发现了入口点 shell 脚本,我尝试从官方图像复制脚本并添加我的 curl -XPUT 调用在那里,但它不起作用。 所以我的下一个反应是打开 CLI 并输入我的 curl 调用,它工作正常。
所以我的问题是如何在容器启动时 运行 我的 API 自动调用,我对 docker 和弹性堆栈还很陌生。
谢谢!
编辑:
所以我使用基本的 bash 图像和 curl 在我的 Dockerfile 上使用 运行 命令安装。
现在我在让服务进行通信时遇到问题(我将它们都放在同一个网络中)我可能做错了所以我得到:
curl: (7) Failed to connect to localhost port 9200: Connection refused
编辑:
更新了我的脚本以在不公开端口的情况下调用 elasticsearch:9200,现在工作正常!
我还认为脚本没有等待 elasticsearch 完成执行脚本。
这是我的 docker-compose 文件:
version: '3.2'
services:
elasticsearch:
build:
context: elasticsearch/
args:
ELK_VERSION: $ELK_VERSION
volumes:
- type: bind
source: ./elasticsearch/config/elasticsearch.yml
target: /usr/share/elasticsearch/config/elasticsearch.yml
read_only: true
- type: volume
source: elasticsearch
target: /usr/share/elasticsearch/data
ports:
- "9200:9200"
- "9300:9300"
environment:
ES_JAVA_OPTS: "-Xmx256m -Xms256m"
ELASTIC_PASSWORD: changeme
# Use single node discovery in order to disable production mode and avoid bootstrap checks.
# see: https://www.elastic.co/guide/en/elasticsearch/reference/current/bootstrap-checks.html
discovery.type: single-node
networks:
- elk
configurator:
build:
context: configurator/
networks:
- elk
depends_on:
- elasticsearch
logstash:
build:
context: logstash/
args:
ELK_VERSION: $ELK_VERSION
volumes:
- type: bind
source: ./logstash/config
target: /usr/share/logstash/config
read_only: true
- type: bind
source: ./logstash/pipeline
target: /usr/share/logstash/pipeline
read_only: true
- type: bind
source: ./logstash/data
target: /usr/share/logstash/data
ports:
- "5044:5044"
- "5000:5000/tcp"
- "5000:5000/udp"
- "9600:9600"
environment:
LS_JAVA_OPTS: "-Xmx256m -Xms256m"
networks:
- elk
depends_on:
- configurator
kibana:
build:
context: kibana/
args:
ELK_VERSION: $ELK_VERSION
volumes:
- type: bind
source: ./kibana/config/kibana.yml
target: /usr/share/kibana/config/kibana.yml
read_only: true
ports:
- "5601:5601"
networks:
- elk
depends_on:
- configurator
networks:
elk:
driver: bridge
volumes:
elasticsearch:
创建一个新的手工 docker 图像(或使用一个好的启动图像),将您需要在启动时发出的 API 调用添加到启动脚本中。确保,它验证是否需要执行调用或所有调用都已由先前的 运行.
完成接下来将图像添加到您的合成中,并使用 depends_on
选项使其依赖于 elasticsearch 服务。这将确保您的集群在启动 'init container'.
现在,启动时,将启动所需的服务(如果尚未启动 运行ning),然后启动 init 容器。
可选:使初始化容器默认不启动,但只有在明确启动时才启动。例如,查看启用 x 选项的监控服务 here
向服务添加 healthchecks 是一种很好的做法。如果您不这样做,docker 将仅根据容器状态 (运行ning=healthly) 假设服务健康。但是 elasticsearch 有一个更长的 bootstrap 我们需要等待的过程。
将以下内容添加到 elasticsearch:
healthcheck:
test: ["CMD-SHELL", "curl --silent --fail localhost:9200/_cluster/health || exit 1"]
interval: 30s
timeout: 30s
retries: 5
并将其添加到配置器服务中:
depends_on:
elasticsearch:
condition: service_healthy