Overview
This template provides a production‑ready ELK Stack as a Monk runnable. You can:- Run it directly to get a managed ELK deployment with all necessary components
- Inherit it in your own stack to seamlessly add logging, search, and analytics capabilities
What this template manages
- Elasticsearch container (search and analytics engine)
- Logstash container (data processing pipeline)
- Kibana container (visualization and management interface)
- Nginx container (reverse proxy)
- Network services on multiple ports
- Persistent volumes for data storage
- Custom configuration files for all components
Quick start (run directly)
- Load templates
- Run ELK stack with defaults
- Access Kibana
http://localhost (default port 80).
Running directly uses the defaults defined in this template’s variables. To customize settings like ports or JVM options, you should either:
- Preferred: inherit and override variables as shown below
- Alternative: fork/clone and edit the
variablesinelk/stack.yaml, thenmonk load MANIFESTand run
Configuration
Key variables you can customize in this template:${monk-volume-path}/elasticsearch/data and ${monk-volume-path}/kibana/data on the host.
Configuration files
You can find configuration files in the/files directory:
These files are automatically mounted into the containers. You can modify them before loading to customize the stack behavior.
Use by inheritance (recommended for apps)
Inherit the ELK stack in your logging infrastructure and customize it:http://localhost:8080.
Stack components
The ELK stack includes the following runnables:elk/elasticsearch- Search and analytics engine (ports 9200, 9300)elk/kibana- Visualization interface (port 5601)elk/logstash- Data processing pipeline (ports 5044, 50000, 9600)elk/nginx- Reverse proxy (port 80)
Ports and connectivity
- Nginx proxy: TCP port
80(configurable vianginx-listen-port)- Exposed to host for external access to Kibana
- Elasticsearch HTTP API: TCP port
9200- Used by Kibana, Logstash, and applications
- Elasticsearch internal: TCP port
9300- Internal cluster communication
- Kibana: TCP port
5601- Proxied through Nginx
- Logstash Beats: TCP port
5044- For receiving logs from Beats agents
- Logstash TCP: TCP port
50000- For receiving logs via TCP
- Logstash API: TCP port
9600- Monitoring and management
connection-hostname("\<connection-name>") to resolve component hostnames.
Persistence and configuration
Data paths (persisted to host volumes):- Elasticsearch data:
${monk-volume-path}/elasticsearch/data:/usr/share/elasticsearch/data - Kibana data:
${monk-volume-path}/kibana/data:/usr/share/kibana/data
Features
- Elasticsearch: Distributed search and analytics engine with single-node configuration by default
- Logstash: Flexible data collection and transformation pipeline with customizable filters
- Kibana: Rich visualization and exploration interface for your data
- Nginx: Secure reverse proxy with customizable configuration for external access
- Auto-connectivity: Components are pre-configured to communicate with each other
- Health monitoring: Built-in health checks and dependency management
Logs and shell access
Related templates
- Integrate with monitoring tools (Prometheus, Grafana)
- Use with alerting systems (PagerDuty, Slack, email)
- Combine with log shippers (
filebeat/,metricbeat/,fluentbit/) - Connect to application stacks for centralized logging
Troubleshooting
- Ensure all required ports are available: Check that ports 80, 5601, 9200, 9300, 5044, 50000, and 9600 are not in use.
- Verify JVM heap settings are appropriate for your system: The default 256MB may be too low for production workloads. Increase via
elasticsearch-jvm-optionsandlogstash-jvm-options. - Elasticsearch requires sufficient memory: If Elasticsearch fails to start, check available memory. Production deployments typically need at least 2GB heap.
- Check that all components start in the correct order: Dependencies are configured, but network issues can cause timeouts.
- Ensure host volumes are writable: Containers run as user
1000, ensure volume paths have appropriate permissions.

