
All checks were successful
Test and Publish Templates / test-and-publish (push) Successful in 44s
7.4 KiB
7.4 KiB
Dropshell LogServer Template
A comprehensive centralized logging solution using the ELK Stack (Elasticsearch, Logstash, Kibana) for receiving, processing, and visualizing logs from multiple hosts.
Overview
This template deploys a full-featured ELK stack that:
- Receives logs from multiple sources via Beats protocol
- Stores and indexes logs in Elasticsearch
- Provides powerful search and visualization through Kibana
- Supports automatic log parsing and enrichment
- Handles Docker container logs and system logs from clients
Architecture
Components
-
Elasticsearch (7.17.x)
- Distributed search and analytics engine
- Stores and indexes all log data
- Provides fast full-text search capabilities
- Single-node configuration for simplicity (can be scaled)
-
Logstash (7.17.x)
- Log processing pipeline
- Receives logs from Filebeat clients
- Parses and enriches log data
- Routes logs to appropriate Elasticsearch indices
-
Kibana (7.17.x)
- Web UI for log exploration and visualization
- Create dashboards and alerts
- Real-time log streaming
- Advanced search queries
Features
Minimum Configuration Design
- Auto-discovery of log formats
- Pre-configured dashboards for common services
- Automatic index lifecycle management
- Built-in parsing for Docker and syslog formats
- Zero-configuration client connectivity
Log Processing
- Automatic timestamp extraction
- Docker metadata enrichment (container name, image, labels)
- Syslog parsing with severity levels
- JSON log support
- Multi-line log handling (stacktraces, etc.)
- Grok pattern matching for common formats
Security & Performance
- Mutual TLS (mTLS) authentication for client connections
- API key authentication as an alternative to certificates
- Per-client authentication with unique keys/certificates
- SSL/TLS encryption for all client connections
- Basic authentication for Kibana web access
- IP whitelisting for additional security
- Index lifecycle management for storage optimization
- Automatic old log cleanup
- Resource limits to prevent overconsumption
Port Configuration
- 5601: Kibana Web UI (HTTP/HTTPS with authentication)
- 9200: Elasticsearch REST API (HTTP) - internal only
- 5044: Logstash Beats input (TCP/TLS) - authenticated client connections
- 514: Syslog input (UDP/TCP) - optional, unauthenticated
- 24224: Fluentd forward input - optional Docker logging driver
Storage Requirements
- Minimum: 10GB for basic operation
- Recommended: 50GB+ depending on log volume
- Log Retention: Default 30 days (configurable)
Client Authentication
Authentication Methods
-
Mutual TLS (mTLS) - Recommended
- Each client gets a unique certificate signed by the server's CA
- Strongest security with mutual authentication
- Automatic certificate validation
-
API Keys
- Each client gets a unique API key
- Simpler to manage than certificates
- Good for environments where certificate management is difficult
-
Basic Auth (Not Recommended)
- Shared username/password
- Least secure, only for testing
Client Configuration
Clients using the logclient
template will:
- Authenticate using provided credentials (cert/key or API key)
- Establish encrypted TLS connection
- Ship all Docker container logs
- Ship system logs (syslog, auth, kernel)
- Maintain connection with automatic reconnection
- Buffer logs locally during network outages
Dashboard Features
Pre-configured Dashboards
- System Overview: Overall health and log volume metrics
- Docker Containers: Container-specific logs and metrics
- Error Analysis: Aggregated error logs from all sources
- Security Events: Authentication and access logs
- Application Logs: Parsed application-specific logs
Search Capabilities
- Full-text search across all logs
- Filter by time range, host, container, severity
- Save and share search queries
- Export search results
Resource Requirements
Minimum
- CPU: 2 cores
- RAM: 4GB
- Storage: 10GB
Recommended
- CPU: 4+ cores
- RAM: 8GB+
- Storage: 50GB+ SSD
Configuration Options
Environment Variables (service.env)
# Elasticsearch settings
ES_HEAP_SIZE=2g
ES_MAX_MAP_COUNT=262144
# Logstash settings
LS_HEAP_SIZE=1g
LS_PIPELINE_WORKERS=2
# Kibana settings
KIBANA_PASSWORD=changeme
KIBANA_BASE_PATH=/
# Log retention
LOG_RETENTION_DAYS=30
LOG_MAX_SIZE_GB=50
# Authentication Mode
AUTH_MODE=mtls # Options: mtls, apikey, basic
ENABLE_TLS=true
# mTLS Settings (if AUTH_MODE=mtls)
CA_CERT_PATH=/certs/ca.crt
SERVER_CERT_PATH=/certs/server.crt
SERVER_KEY_PATH=/certs/server.key
CLIENT_CERT_REQUIRED=true
# API Key Settings (if AUTH_MODE=apikey)
API_KEYS_PATH=/config/api-keys.yml
# Network Security
ALLOWED_IPS="" # Comma-separated list, empty = all
Usage
Installation
dropshell install logserver
Generate Client Credentials
For mTLS Authentication:
# Generate client certificate for a new host
dropshell exec logserver /scripts/generate-client-cert.sh hostname
# This creates hostname.crt and hostname.key files
For API Key Authentication:
# Generate API key for a new client
dropshell exec logserver /scripts/generate-api-key.sh hostname
# Returns an API key to configure in the client
Access Kibana
Navigate to https://<server-ip>:5601
in your browser.
Default credentials:
- Username:
elastic
- Password:
changeme
(change in service.env)
View Logs
dropshell logs logserver
Backup
dropshell backup logserver
Troubleshooting
Common Issues
-
Elasticsearch failing to start
- Check vm.max_map_count:
sysctl vm.max_map_count
(should be 262144+) - Verify sufficient memory available
- Check vm.max_map_count:
-
No logs appearing in Kibana
- Check Logstash is receiving data: port 5044 should be open
- Verify client connectivity
- Check index patterns in Kibana
-
High memory usage
- Adjust heap sizes in service.env
- Configure index lifecycle management
- Reduce retention period
Integration
This template is designed to work seamlessly with the logclient
template. Simply:
- Deploy this logserver
- Deploy logclient on each host you want to monitor
- Configure logclient with the logserver address
- Logs will automatically start flowing
Security Considerations
-
Authentication Setup
- Use mTLS for production environments
- Generate unique credentials for each client
- Rotate certificates/keys regularly
- Store credentials securely
-
Network Security
- Always use TLS encryption for client connections
- Configure IP whitelisting when possible
- Use firewall rules to restrict access
- Consider VPN or private networks
-
Access Control
- Change default Kibana password immediately
- Create read-only users for viewing logs
- Implement role-based access control (RBAC)
- Audit access logs regularly
-
Data Protection
- Regular backups of Elasticsearch indices
- Encrypt data at rest (optional)
- Monitor disk usage to prevent data loss
- Implement log retention policies
Maintenance
Daily Tasks
- Monitor disk usage
- Check for failed log shipments
- Review error dashboards
Weekly Tasks
- Verify all clients are reporting
- Check index health
- Review and optimize slow queries
Monthly Tasks
- Update ELK stack components
- Archive old indices
- Review retention policies
- Performance tuning based on usage patterns