Automatically import Kibana dashboards Facilitate the spin up of the environment by importing the Kibana dashboard and creating the empty gerrit elasticsearch index Change-Id: I921c9c469d740d79a3f75bd54e7221bfd81c694b
diff --git a/dashboard-importer/Dockerfile b/dashboard-importer/Dockerfile new file mode 100644 index 0000000..4aa6a13 --- /dev/null +++ b/dashboard-importer/Dockerfile
@@ -0,0 +1,7 @@ +FROM taskrabbit/elasticsearch-dump:v3.3.1 + +RUN apk add --no-cache curl + +COPY docker-entrypoint.sh wait-for-elasticsearch ./kibana-config / + +ENTRYPOINT /docker-entrypoint.sh
diff --git a/dashboard-importer/credentials.env b/dashboard-importer/credentials.env new file mode 100644 index 0000000..02177e6 --- /dev/null +++ b/dashboard-importer/credentials.env
@@ -0,0 +1,2 @@ +ES_USER=elastic +ES_PWD=changeme
diff --git a/dashboard-importer/docker-entrypoint.sh b/dashboard-importer/docker-entrypoint.sh new file mode 100755 index 0000000..fdfcbea --- /dev/null +++ b/dashboard-importer/docker-entrypoint.sh
@@ -0,0 +1,15 @@ +#!/bin/sh +/wait-for-elasticsearch + +echo "** Creating Gerrit index" +curl -XPUT "http://$ES_USER:$ES_PWD@elasticsearch:9200/gerrit?pretty" -H 'Content-Type: application/json' + +echo "** Importing Kibana setting from: " +for file in `ls -v /*.json`; + do echo "--> $file"; + /usr/lib/node_modules/elasticdump/bin/elasticdump \ + --output=http://$ES_USER:$ES_PWD@elasticsearch:9200/.kibana \ + --input=$file \ + --type=data \ + --headers '{"Content-Type": "application/json"}'; +done;
diff --git a/dashboard-importer/kibana-config/00_config.json b/dashboard-importer/kibana-config/00_config.json new file mode 100644 index 0000000..cc5f7a8 --- /dev/null +++ b/dashboard-importer/kibana-config/00_config.json
@@ -0,0 +1,12 @@ +{ + "_index": ".kibana", + "_type": "config", + "_id": "5.5.2", + "_score": 1, + "_source": { + "buildNum": 15443, + "xPackMonitoring:allowReport": true, + "xPackMonitoring:showBanner": true, + "defaultIndex": "gerrit" + } +}
diff --git a/dashboard-importer/kibana-config/10_index-pattern.json b/dashboard-importer/kibana-config/10_index-pattern.json new file mode 100644 index 0000000..6b2c233 --- /dev/null +++ b/dashboard-importer/kibana-config/10_index-pattern.json
@@ -0,0 +1,11 @@ +{ + "_index": ".kibana", + "_type": "index-pattern", + "_id": "gerrit", + "_score": 1, + "_source": { + "title": "gerrit", + "notExpandable": true, + "fields": "[{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"added_lines\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"author\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"author.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"day\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"deleted_lines\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"email\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"email.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"email_alias\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"email_alias.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"hour\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"last_commit_date\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"month\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"name.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"num_commits\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"num_files\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"organization\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"organization.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"project\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"project.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"year\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true}]" + } +}
diff --git a/dashboard-importer/wait-for-elasticsearch b/dashboard-importer/wait-for-elasticsearch new file mode 100755 index 0000000..6f05499 --- /dev/null +++ b/dashboard-importer/wait-for-elasticsearch
@@ -0,0 +1,21 @@ +#!/bin/sh + +wait_for() { + for i in `seq 30` ; do + curl -f -u $ES_USER:$ES_PWD http://elasticsearch:9200/_cluster/health > /dev/null 2>&1 + + result=$? + if [ $result -eq 0 ] ; then + if [ $# -gt 0 ] ; then + exec "$@" + fi + exit 0 + fi + echo "* Waiting for Elasticsearch ($i/30)" + sleep 2 + done + echo "Operation timed out" >&2 + exit 1 +} + +wait_for "$@"
diff --git a/docker-compose.yaml b/docker-compose.yaml index 7c646e1..a7300e1 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml
@@ -2,7 +2,26 @@ services: - elasticsearch: + dashboard-importer: + build: dashboard-importer + networks: + - ek + env_file: + - ./dashboard-importer/credentials.env + links: + - elasticsearch + - kibana + + kibana: + image: docker.elastic.co/kibana/kibana:5.5.2 + ports: + - "5601:5601" + networks: + - ek + depends_on: + - elasticsearch + + elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:5.5.2 ports: - "9200:9200" @@ -14,15 +33,6 @@ networks: - ek - kibana: - image: docker.elastic.co/kibana/kibana:5.5.2 - ports: - - "5601:5601" - networks: - - ek - depends_on: - - elasticsearch - networks: ek: