This demo generates high-volume Apache logs using flog, processes them with OpenTelemetry Collector, and visualizes them in OpenObserve with custom parsing and dashboards.
- Ubuntu 20.04 or later
- Root or sudo access
- Internet connectivity
- OpenObserve account (cloud or self-hosted)
webinar-demo/
├── docker/
│ ├── docker_setup.sh
│ └── docker-compose.yml
├── otel/
│ └── otel-config.yaml
├── vrl/
│ └── apache-parsing-functions.vrl
├── pipelines/
│ └── apache-log-pipeline.json
└── README.md
Navigate to the docker directory and run the setup script:
cd docker/
chmod +x docker_setup.sh
./docker_setup.shImportant: Log out and log back in after Docker installation for group changes to take effect.
Test Docker installation:
docker run hello-world
docker-compose --versionCopy the docker-compose.yml file to your project directory:
# From the docker/ directory
cp docker-compose.yml ../
cd ..Create logs directory and start containers:
mkdir -p /tmp/logs
docker-compose up -dCheck container status:
docker-compose psVerify logs are being generated at high volume:
# Check log files exist and are growing
ls -lrth /tmp/logs/
# Monitor real-time log generation
watch -n 2 'ls -lh /tmp/apache/ && echo "=== Log Counts ===" && wc -l /tmp/logs/*.log'
# View sample logs
tail -f /tmp/logs/apache_combined.logExpected output:
- apache_common.log: ~1,000 logs/second
- apache_combined.log: ~12,500 logs/second
- apache_error.log: ~160 logs/second
- Total: ~13,660 logs/second
Follow the official OpenObserve documentation for installing OpenTelemetry Collector on Ubuntu:
- Visit OpenObserve Documentation
- Navigate to "Data Sources" → "OpenTelemetry"
- Follow the Ubuntu installation steps
- Stop the collector service before configuration:
sudo systemctl stop otel-collector
Replace the default OTel configuration with the provided config:
# Backup existing config
sudo cp /etc/otel-collector/config.yaml /etc/otel-collector/config.yaml.backup
# Copy new configuration
sudo cp otel/otel-config.yaml /etc/otel-collector/config.yaml
# Update the configuration with your OpenObserve details
sudo nano /etc/otel-collector/config.yamlRequired updates in config.yaml:
- Replace
YOUR_OPENOBSERVE_ENDPOINTwith your OpenObserve URL - Replace
YOUR_BASE64_CREDENTIALSwith base64(username:password) - Update log file paths if different from
/tmp/apache/
To generate base64 credentials:
echo -n 'your_username:your_password' | base64Restart the OTel Collector with new configuration:
# Start the service
sudo systemctl start otel-collector
sudo systemctl enable otel-collector
# Check status
sudo systemctl status otel-collector
# Monitor logs for any errors
sudo journalctl -u otel-collector -fVerify logs are being processed:
# Check for successful log ingestion
sudo journalctl -u otel-collector --since "5 minutes ago" | grep -i "successfully sent"In OpenObserve web interface:
- Navigate to Functions section
- Click Add Function
- Copy content from
vrl/apache-parsing-functions.vrl - Create function with name:
apache_log_parser - Save the function
The VRL functions will:
- Parse Apache Common and Combined log formats
- Extract HTTP status categories (2xx, 3xx, 4xx, 5xx)
- Convert response sizes to integers
- Add geo-location data for IP addresses
- Extract browser and OS information from user agents
- In OpenObserve, go to Pipelines section
- Click Import Pipeline
- Upload the file
pipelines/apache-log-pipeline.json - Associate the pipeline with your
apache_logsstream - Enable the pipeline
The pipeline will automatically apply the VRL parsing functions to incoming logs.
Check that logs are being parsed correctly:
- Go to Logs section in OpenObserve
- Select the
apache_logsstream - Verify parsed fields are present:
http_status_categoryresponse_size_intrequest_methoduser_agent_browsergeo_country- etc.
OTel Collector not reading logs:
# Check file permissions
ls -la /tmp/logs/
sudo chown otel-collector:otel-collector /tmp/logs/*.log
# Verify config syntax
sudo /usr/local/bin/otelcol-contrib --config=/etc/otel-collector/config.yaml --dry-runHigh CPU usage:
# Reduce log generation if needed
docker-compose down
# Edit docker-compose.yml to reduce -d values or increase -s values
docker-compose up -dOpenObserve connection issues:
# Test connectivity
curl -X POST "https://api.openobserve.ai/api/your_org/default/v1/logs" \
-H "Authorization: Basic YOUR_BASE64_CREDENTIALS" \
-H "Content-Type: application/json" \
-d '{"test": "message"}'Expected throughput:
- Log Generation: ~13,660 logs/second
- OTel Processing: ~820,000 logs/minute
- OpenObserve Ingestion: Depends on plan/instance size
- Dashboard Refresh: Real-time (sub-second)
To stop and remove all components:
# Stop log generators
docker-compose down
# Stop OTel Collector
sudo systemctl stop otel-collector
# Remove log files
sudo rm -rf /tmp/apache/
# Remove Docker images (optional)
docker system prune -fFor issues:
- Check OTel Collector logs:
sudo journalctl -u otel-collector -f - Check Docker container logs:
docker-compose logs - Verify OpenObserve connectivity and credentials
- Monitor system resources for bottlenecks