Skip to content

Commit

Permalink
GH-420: Kibana for DDEV
Browse files Browse the repository at this point in the history
- Enable Kibana
- Use docker-compose.kibana_extra.yaml to only override
  the image version to match ES
  • Loading branch information
sampoturve committed Aug 13, 2024
1 parent 29deea6 commit c489643
Show file tree
Hide file tree
Showing 7 changed files with 353 additions and 0 deletions.
14 changes: 14 additions & 0 deletions .ddev/addon-metadata/ddev-kibana/manifest.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
name: ddev-kibana
repository: janopl/ddev-kibana
version: v1.7.2
dependencies:
- elasticsearch
install_date: "2024-08-13T15:20:00+03:00"
project_files:
- docker-compose.kibana.yaml
- ./kibana/config.yml
- ./kibana/Dockerfile
- ./kibana/healthcheck.sh
- ./kibana/docker-compose.kibana8.yaml
global_files: []
removal_actions: []
31 changes: 31 additions & 0 deletions .ddev/docker-compose.kibana.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#ddev-generated
services:
kibana:
container_name: ddev-${DDEV_SITENAME}-kibana
hostname: ${DDEV_SITENAME}-kibana
build:
context: ./kibana
dockerfile: Dockerfile
args:
- KIBANA_VERSION=7.17.14
expose:
- "5601"
environment:
KIBANA_VERSION: 7.17.14
ELASTICSEARCH_HOSTS: '["http://ddev-${DDEV_SITENAME}-elasticsearch:9200"]'
VIRTUAL_HOST: $DDEV_HOSTNAME
HTTP_EXPOSE: 5600:5601
HTTPS_EXPOSE: 5601:5601
labels:
com.ddev.site-name: ${DDEV_SITENAME}
com.ddev.approot: $DDEV_APPROOT
volumes:
- ./kibana/config.yml:/usr/share/kibana/config/kibana.yml
depends_on:
elasticsearch:
condition: service_healthy
healthcheck:
test: ["CMD-SHELL", "[ -f /tmp/healthcheck.sh ]"]
interval: 60s
timeout: 30s
retries: 3
6 changes: 6 additions & 0 deletions .ddev/docker-compose.kibana_extra.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Overrides for default Kibana configuration.
services:
kibana:
build:
args:
- KIBANA_VERSION=8.10.2
18 changes: 18 additions & 0 deletions .ddev/kibana/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#ddev-generated

ARG KIBANA_VERSION

FROM kibana:$KIBANA_VERSION

USER root

# installed jq for parse json curl response
RUN apt-get update
RUN apt-get -y install jq

# copy healthcheck.sh to container
RUN mkdir -p /tmp
COPY healthcheck.sh /tmp/healthcheck.sh
RUN chmod +x /tmp/healthcheck.sh

USER kibana
177 changes: 177 additions & 0 deletions .ddev/kibana/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
#ddev-generated

# For more configuration options see the configuration guide for Kibana in
# https://www.elastic.co/guide/index.html

# =================== System: Kibana Server ===================
# Kibana is served by a back end server. This setting specifies the port to use.
#server.port: 5601

# Specifies the address to which the Kibana server will bind. IP addresses and host names are both valid values.
# The default is 'localhost', which usually means remote machines will not be able to connect.
# To allow connections from remote users, set this parameter to a non-loopback address.
#server.host: "localhost"

# Enables you to specify a path to mount Kibana at if you are running behind a proxy.
# Use the `server.rewriteBasePath` setting to tell Kibana if it should remove the basePath
# from requests it receives, and to prevent a deprecation warning at startup.
# This setting cannot end in a slash.
#server.basePath: ""

# Specifies whether Kibana should rewrite requests that are prefixed with
# `server.basePath` or require that they are rewritten by your reverse proxy.
# Defaults to `false`.
#server.rewriteBasePath: false

# Specifies the public URL at which Kibana is available for end users. If
# `server.basePath` is configured this URL should end with the same basePath.
#server.publicBaseUrl: ""

# The maximum payload size in bytes for incoming server requests.
#server.maxPayload: 1048576

# The Kibana server's name. This is used for display purposes.
#server.name: "your-hostname"

# =================== System: Kibana Server (Optional) ===================
# Enables SSL and paths to the PEM-format SSL certificate and SSL key files, respectively.
# These settings enable SSL for outgoing requests from the Kibana server to the browser.
#server.ssl.enabled: false
#server.ssl.certificate: /path/to/your/server.crt
#server.ssl.key: /path/to/your/server.key

# =================== System: Elasticsearch ===================
# The URLs of the Elasticsearch instances to use for all your queries.
#elasticsearch.hosts: ["http://localhost:9200"]

# If your Elasticsearch is protected with basic authentication, these settings provide
# the username and password that the Kibana server uses to perform maintenance on the Kibana
# index at startup. Your Kibana users still need to authenticate with Elasticsearch, which
# is proxied through the Kibana server.
#elasticsearch.username: "kibana_system"
#elasticsearch.password: "pass"

# Kibana can also authenticate to Elasticsearch via "service account tokens".
# Service account tokens are Bearer style tokens that replace the traditional username/password based configuration.
# Use this token instead of a username/password.
# elasticsearch.serviceAccountToken: "my_token"

# Time in milliseconds to wait for Elasticsearch to respond to pings. Defaults to the value of
# the elasticsearch.requestTimeout setting.
#elasticsearch.pingTimeout: 1500

# Time in milliseconds to wait for responses from the back end or Elasticsearch. This value
# must be a positive integer.
#elasticsearch.requestTimeout: 30000

# The maximum number of sockets that can be used for communications with elasticsearch.
# Defaults to `Infinity`.
#elasticsearch.maxSockets: 1024

# Specifies whether Kibana should use compression for communications with elasticsearch
# Defaults to `false`.
#elasticsearch.compression: false

# List of Kibana client-side headers to send to Elasticsearch. To send *no* client-side
# headers, set this value to [] (an empty list).
#elasticsearch.requestHeadersWhitelist: [ authorization ]

# Header names and values that are sent to Elasticsearch. Any custom headers cannot be overwritten
# by client-side headers, regardless of the elasticsearch.requestHeadersWhitelist configuration.
#elasticsearch.customHeaders: {}

# Time in milliseconds for Elasticsearch to wait for responses from shards. Set to 0 to disable.
#elasticsearch.shardTimeout: 30000

# =================== System: Elasticsearch (Optional) ===================
# These files are used to verify the identity of Kibana to Elasticsearch and are required when
# xpack.security.http.ssl.client_authentication in Elasticsearch is set to required.
#elasticsearch.ssl.certificate: /path/to/your/client.crt
#elasticsearch.ssl.key: /path/to/your/client.key

# Enables you to specify a path to the PEM file for the certificate
# authority for your Elasticsearch instance.
#elasticsearch.ssl.certificateAuthorities: [ "/path/to/your/CA.pem" ]

# To disregard the validity of SSL certificates, change this setting's value to 'none'.
#elasticsearch.ssl.verificationMode: full

# =================== System: Logging ===================
# Set the value of this setting to off to suppress all logging output, or to debug to log everything. Defaults to 'info'
#logging.root.level: debug

# Enables you to specify a file where Kibana stores log output.
#logging.appenders.default:
# type: file
# fileName: /var/logs/kibana.log
# layout:
# type: json

# Logs queries sent to Elasticsearch.
#logging.loggers:
# - name: elasticsearch.query
# level: debug

# Logs http responses.
#logging.loggers:
# - name: http.server.response
# level: debug

# Logs system usage information.
#logging.loggers:
# - name: metrics.ops
# level: debug

# =================== System: Other ===================
# The path where Kibana stores persistent data not saved in Elasticsearch. Defaults to data
#path.data: data

# Specifies the path where Kibana creates the process ID file.
#pid.file: /run/kibana/kibana.pid

# Set the interval in milliseconds to sample system and process performance
# metrics. Minimum is 100ms. Defaults to 5000ms.
#ops.interval: 5000

# Specifies locale to be used for all localizable strings, dates and number formats.
# Supported languages are the following: English (default) "en", Chinese "zh-CN", Japanese "ja-JP", French "fr-FR".
#i18n.locale: "en"

# =================== Frequently used (Optional)===================

# =================== Saved Objects: Migrations ===================
# Saved object migrations run at startup. If you run into migration-related issues, you might need to adjust these settings.

# The number of documents migrated at a time.
# If Kibana can't start up or upgrade due to an Elasticsearch `circuit_breaking_exception`,
# use a smaller batchSize value to reduce the memory pressure. Defaults to 1000 objects per batch.
#migrations.batchSize: 1000

# The maximum payload size for indexing batches of upgraded saved objects.
# To avoid migrations failing due to a 413 Request Entity Too Large response from Elasticsearch.
# This value should be lower than or equal to your Elasticsearch cluster’s `http.max_content_length`
# configuration option. Default: 100mb
#migrations.maxBatchSizeBytes: 100mb

# The number of times to retry temporary migration failures. Increase the setting
# if migrations fail frequently with a message such as `Unable to complete the [...] step after
# 15 attempts, terminating`. Defaults to 15
#migrations.retryAttempts: 15

# =================== Search Autocomplete ===================
# Time in milliseconds to wait for autocomplete suggestions from Elasticsearch.
# This value must be a whole number greater than zero. Defaults to 1000ms
#unifiedSearch.autocomplete.valueSuggestions.timeout: 1000

# Maximum number of documents loaded by each shard to generate autocomplete suggestions.
# This value must be a whole number greater than zero. Defaults to 100_000
#unifiedSearch.autocomplete.valueSuggestions.terminateAfter: 100000

### encryption key generate by ./bin/kibana-encryption-key generate command
xpack.encryptedSavedObjects.encryptionKey: a90aed72d393a50e22d622c25d7a5079
xpack.reporting.encryptionKey: 8af30ceea35f064a776b7458176d44d8
xpack.security.encryptionKey: 599ac94fc22d39512af7b6fc52e5fd7c
server.publicBaseUrl: "https://drupal-project.ddev.site"
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://elasticsearch:9200"]
monitoring.ui.container.elasticsearch.enabled: true
14 changes: 14 additions & 0 deletions .ddev/kibana/docker-compose.kibana8.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#ddev-generated
services:
kibana:
build:
context: ./kibana
dockerfile: Dockerfile
args:
- KIBANA_VERSION=8.10.2
environment:
KIBANA_VERSION: 8.10.2
ELASTICSEARCH_HOSTS: '["http://ddev-${DDEV_SITENAME}-elasticsearch:9200"]'
VIRTUAL_HOST: $DDEV_HOSTNAME
HTTP_EXPOSE: 5600:5601
HTTPS_EXPOSE: 5601:5601
93 changes: 93 additions & 0 deletions .ddev/kibana/healthcheck.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
#!/usr/bin/sh
#ddev-generated

#######################################
# Check green status
# Arguments:
# status name
# Returns:
# 0 if thing was correct status, non-zero on error.
#######################################
checkGreenStatus()
{
if [ "$status" = "green" ]; then
printf "%s is green \n" "$1";
else
printf "%s is not green, status is %2\n" "$1" "$status";
exit 1;
fi
}

#######################################
# Check available status
# Arguments:
# status name
# Returns:
# 0 if thing was correct status, non-zero on error.
#######################################
checkAvailableStatus()
{
if [ "$status" = "available" ]; then
printf "All plugins are %s \n" "$1";
else
printf "%s is not available, status is %2 \n" "$1" "$status";
exit 1;
fi
}

#######################################
# Set globally status from curl response
# Arguments:
# address, json dot notation to check status
# Returns:
# non-zero on error.
#######################################
setStatusFromAddress()
{
status=$(curl -s --location "$1" --header 'Content-Type: application/json' | jq --raw-output "$2");
}

#######################################
# Check version of elastic search
# Arguments:
# -
# Returns:
# void
#######################################
checkVersion()
{
case ${KIBANA_VERSION} in
7.*|8.0.0)
setStatusFromAddress "http://elasticsearch:9200/_cluster/health" ".status";
checkGreenStatus "elastic";

setStatusFromAddress "http://kibana:5601/api/status" ".status.overall.state";
checkGreenStatus 'kibana';
;;
8.*|9.0.0)
setStatusFromAddress "http://elasticsearch:9200/_cluster/health" ".status";
checkGreenStatus "elastic";

setStatusFromAddress "http://kibana:5601/api/status" ".status.overall.level";
checkAvailableStatus 'available';
;;
esac
}

#######################################
# Main
#######################################
printf "HealthCheck \n" 3>&1;

if command -v curl >/dev/null 2>&1 && command -v jq >/dev/null 2>&1
then
printf "Check Status for kibana: \n" 3>&1;
checkVersion;

exit 0;
else
printf "Not found curl and/or jq \n" 3>&1;
exit 1;
fi

exit 0;

0 comments on commit c489643

Please sign in to comment.