OpenSibleOpenSible Stack Hub
← All blueprints

Kibana HA (Docker cluster)

OSS

Multi-node Kibana deployment (recommended 2 or 3 behind a load balancer) running the official Kibana Docker image. Every node runs one container managed by a dedicated systemd unit, all pointing at the same Elasticsearch backend via ELASTICSEARCH_HOSTS. Ships with a per-node HTTP health dashboard exposing Kibana + upstream Elasticsearch status.

by opensible· ⬇ 0 installs· Databases· v1.0.0· template kibana-cluster

Use in the OpenSible console

Open Infrastructure → Stack Hub Blueprints, switch the source to Cloud hub, then pick Kibana HA (Docker cluster) and press Use.

Requirements

  • ansible >=2.14

Default variables

defaults.json
{
  "nodes": [
    {
      "ip": "",
      "name": "kibana-1",
      "ssh_port": "",
      "ssh_user": ""
    },
    {
      "ip": "",
      "name": "kibana-2",
      "ssh_port": "",
      "ssh_user": ""
    }
  ],
  "become": true,
  "http_port": 5601,
  "cluster_id": "opensible-kibana",
  "open_firewall": true,
  "encryption_key": "",
  "kibana_version": "8.15.3",
  "health_http_port": 5680,
  "security_enabled": false,
  "ssh_port_default": 22,
  "ssh_user_default": "root",
  "elasticsearch_hosts": "http://10.0.0.11:9200,http://10.0.0.12:9200,http://10.0.0.13:9200",
  "health_http_enabled": true,
  "server_publicBaseUrl": "",
  "elasticsearch_password": "",
  "elasticsearch_username": "kibana_system",
  "kibana_lightweight_mode": true,
  "task_manager_maxWorkers": 5,
  "elasticsearch_pingTimeout": 60000,
  "task_manager_pollInterval": 10000,
  "elasticsearch_shardTimeout": 120000,
  "elasticsearch_sniffOnStart": false,
  "elasticsearch_requestTimeout": 300000,
  "elasticsearch_ssl_verificationMode": "full"
}

vars.example.yml

vars.example.yml
---
# Example variable overrides for the kibana-cluster blueprint.
# Copy into your project and adjust before running the playbook.

cluster_id: opensible-kibana
kibana_version: "8.15.3"

# Networking
http_port: 5601
# Optional public URL (used for generated links / reports).
server_publicBaseUrl: ""

# Per-node HTTP health dashboard (HTML + /health.json + /live).
health_http_enabled: true
health_http_port: 5680

# Upstream Elasticsearch cluster. Full URLs of every ES node — Kibana
# load-balances across them and follows failovers automatically.
elasticsearch_hosts:
  - "http://10.0.0.11:9200"
  - "http://10.0.0.12:9200"
  - "http://10.0.0.13:9200"

# When Elasticsearch runs with xpack.security.enabled=true, provide the
# credentials Kibana should use. `kibana_system` is the built-in user
# meant for this; store the password in an ansible-vault file.
security_enabled: false
elasticsearch_username: kibana_system
elasticsearch_password: ""
elasticsearch_ssl_verificationMode: full  # full | certificate | none

# Recommended for small self-hosted clusters. These values prevent the Kibana UI
# from timing out during saved-object migrations, Spaces navigation, and startup
# background tasks when Elasticsearch is healthy but slow under load.
elasticsearch_requestTimeout: 300000
elasticsearch_pingTimeout: 60000
elasticsearch_shardTimeout: 120000
elasticsearch_sniffOnStart: false
kibana_lightweight_mode: true
task_manager_maxWorkers: 5
# Task Manager poll interval in milliseconds. Kibana 8.15 requires a number.
task_manager_pollInterval: 10000

# Optional 32+ char key. In HA you MUST use the SAME key on every node
# so saved-object decryption works regardless of which Kibana serves the
# request. Leave blank only for a single-node lab.
encryption_key: ""

# Kibana nodes. Add 2+ and place a load balancer / reverse proxy in
# front (HAProxy, Nginx, Traefik, cloud LB) for real HA.
nodes:
  - { name: kibana-1, ip: 10.0.0.21, ssh_user: root, ssh_port: 22 }
  - { name: kibana-2, ip: 10.0.0.22, ssh_user: root, ssh_port: 22 }

open_firewall: true
become: true

Versions (1)

  • v1.0.0playbook.yml