目标:从Docker-Compose启动弹性堆栈时加载Kibana保存的对象。
我有一个" export.json"来自Kibana的对象,包含我的默认索引,10多个可视化和仪表板设置。我能够从Docker-Compose成功启动Elastic Stack并手动加载对象,但是在容器启动时它不会自动加载它。
我需要找到一种以编程方式加载此对象的方法,因为我将根据正在运行的容器部署多个对象。换句话说(使用伪配置):
test1
container a # code to run
container b # code send metrics
test1_export.json # display metrics
test2
container c # code to run
container d # code send metrics
test2_export.json # display metrics
使用这些定义:
> run test1
将执行两个Docker-Compose文件,一个用于运行代码,另一个用于运行Elastic Stack。后者还需要加载export.json对象。
此方法来自this config file:
Kibana使用Elasticsearch中的索引来存储已保存的搜索,可视化和仪表板。如果索引尚未存在,Kibana会创建一个新索引。
同样来自here:
Kibana将其所有状态保存在Elasticsearch中,特别是在.kibana索引中。不需要在Kibana容器的本地文件系统上保留任何状态。
然而,每当我重新启动容器时,Kibana都会从头开始。
直接从这个Kibana用户指南中,我试图将kibana.yml配置文件存储在容器中。但是,这个语法在开始时打破了Kibana。以下是两个文件:
kibana.yml
kibana.index: ".kibana"
搬运工-compose.yml
version: '2'
services:
elasticsearch:
container_name: elasticsearch
image: docker.elastic.co/elasticsearch/elasticsearch:5.5.1
ports:
- "9200:9200"
expose:
- 9200
restart: unless-stopped
environment:
- "transport.host=127.0.0.1"
- "xpack.security.enabled=false"
volumes:
- "./elasticsearch/data/:/usr/share/elasticsearch/data"
logstash:
container_name: logstash
build: ../../modules/logstash
image: logstash:5.5.1
kibana:
container_name: kibana
image: docker.elastic.co/kibana/kibana:5.5.1
restart: unless-stopped
ports:
- "5601:5601"
depends_on:
- elasticsearch
environment:
- "ELASTICSEARCH_URL: http://elasticsearch:9200"
expose:
- 5601
volumes:
- "./kibana.yml:/usr/share/kibana/config/kibana.yml"
我的问题:
我的环境是Linux / Centos7。
答案 0 :(得分:2)
我建议将ELK作为指南带到本网站。我已安装此网站,我非常满意。
答案 1 :(得分:2)
这是Docker的常见问题。一种解决方案是短期容器,以您想要的方式配置所有内容;例如运行shell脚本。
看看Elastic的堆栈演示,它们只是using this approach。
搬运工-compose.yml :
# Run a short-lived container to set up Logstash.
setup_logstash:
image: centos:7
volumes: ['./scripts/setup-logstash.sh:/usr/local/bin/setup-logstash.sh:ro']
# The script may have CR/LF line endings if using Docker for Windows, so
# make sure that they don't confuse Bash.
command: ['/bin/bash', '-c', 'cat /usr/local/bin/setup-logstash.sh | tr -d "\r" | bash']
environment: ['ELASTIC_PASSWORD=${ELASTIC_PASSWORD}']
networks: ['stack']
depends_on: ['elasticsearch']
setup-logstash.sh :
#!/bin/bash
set -euo pipefail
es_url=http://elastic:${ELASTIC_PASSWORD}@elasticsearch:9200
# Wait for Elasticsearch to start up before doing anything.
until curl -s $es_url -o /dev/null; do
sleep 1
done
# Set the password for the logstash_system user.
# REF: https://www.elastic.co/guide/en/x-pack/6.0/setting-up-authentication.html#set-built-in-user-passwords
until curl -s -H 'Content-Type:application/json' \
-XPUT $es_url/_xpack/security/user/logstash_system/_password \
-d "{\"password\": \"${ELASTIC_PASSWORD}\"}"
do
sleep 2
echo Retrying...
done
运行您需要的任何cURL命令,以您希望的方式配置Kibana。