diff --git a/.ddev/addon-metadata/ddev-kibana/manifest.yaml b/.ddev/addon-metadata/ddev-kibana/manifest.yaml new file mode 100644 index 0000000..a466918 --- /dev/null +++ b/.ddev/addon-metadata/ddev-kibana/manifest.yaml @@ -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: [] diff --git a/.ddev/docker-compose.kibana.yaml b/.ddev/docker-compose.kibana.yaml new file mode 100644 index 0000000..68f258b --- /dev/null +++ b/.ddev/docker-compose.kibana.yaml @@ -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 diff --git a/.ddev/docker-compose.kibana_extra.yaml b/.ddev/docker-compose.kibana_extra.yaml new file mode 100644 index 0000000..e96eaa1 --- /dev/null +++ b/.ddev/docker-compose.kibana_extra.yaml @@ -0,0 +1,6 @@ +# Overrides for default Kibana configuration. +services: + kibana: + build: + args: + - KIBANA_VERSION=8.10.2 diff --git a/.ddev/kibana/Dockerfile b/.ddev/kibana/Dockerfile new file mode 100644 index 0000000..a0dff86 --- /dev/null +++ b/.ddev/kibana/Dockerfile @@ -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 \ No newline at end of file diff --git a/.ddev/kibana/config.yml b/.ddev/kibana/config.yml new file mode 100644 index 0000000..82d104e --- /dev/null +++ b/.ddev/kibana/config.yml @@ -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 diff --git a/.ddev/kibana/docker-compose.kibana8.yaml b/.ddev/kibana/docker-compose.kibana8.yaml new file mode 100644 index 0000000..0549399 --- /dev/null +++ b/.ddev/kibana/docker-compose.kibana8.yaml @@ -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 \ No newline at end of file diff --git a/.ddev/kibana/healthcheck.sh b/.ddev/kibana/healthcheck.sh new file mode 100644 index 0000000..55faa54 --- /dev/null +++ b/.ddev/kibana/healthcheck.sh @@ -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; \ No newline at end of file