Kibana和Docker-Compose:自动加载保存的对象

时间:2017-10-30 21:24:24

标签: docker elasticsearch docker-compose kibana-5

  

目标:从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"

我的问题:

  • 我现在在做什么不正确(只是保留Kibana)?
  • 如何加载" export.json"使用Docker-Compose的文件?理想情况下,我希望能够将Docker-Compose中的卷定义为Kibana查找对象的路径。

我的环境是Linux / Centos7。

2 个答案:

答案 0 :(得分:2)

- > https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elk-stack-on-ubuntu-14-04

我建议将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。