Category 1: Local Docker
Fully local testing with Docker Compose
- Prometheus + Alertmanager
- Elasticsearch + Kibana
- Grafana
- SigNoz (separate setup)
Complete guide to testing Overwatch integrations locally using Docker Compose, with support for Prometheus, Elasticsearch, Grafana, and more.
Integrations fall into three testing categories:
Category 1: Local Docker
Fully local testing with Docker Compose
Category 2: Cloud Free Tiers
Cloud services with free tiers
Category 3: Webhook Tunneling
Cloud with local webhook testing
# Start all testing services using Docker Compose profilesdocker compose --profile testing up -d
# Or start specific servicesdocker compose up -d prometheus alertmanager elasticsearch kibana grafana
# Check service statusdocker compose ps
# View service logsdocker compose logs -f prometheus| Service | URL | Credentials |
|---|---|---|
| Prometheus | http://localhost:9090 | None |
| Alertmanager | http://localhost:9093 | None |
| Elasticsearch | http://localhost:9200 | elastic / elastic_password_123 |
| Kibana | http://localhost:5601 | elastic / elastic_password_123 |
| Grafana | http://localhost:3001 | admin / admin123 |
Status: ✅ Fully implemented in docker-compose.yml
Start Services
docker compose up -d prometheus alertmanagerAccess Prometheus UI
open http://localhost:9090Create Integration in Overwatch
Navigate to: http://localhost:3000/dashboard/integrations
http://prometheus:9090http://alertmanager:9093Test PromQL Query
curl http://localhost:9090/api/v1/query?query=upTrigger Test Alert
The configuration includes a test alert that fires immediately:
- alert: TestAlertAlwaysFiring expr: vector(1) for: 0s labels: severity: warning environment: testing annotations: summary: "Test alert that always fires"Check http://localhost:9093 for alerts, and verify webhook delivery in Overwatch incidents.
What to Test: Log analysis, API key authentication, integration connectivity
Start Services
docker compose up -d elasticsearch kibanaWait for Elasticsearch Health
docker logs -f overwatch-elasticsearch# Wait for "started" messageConfigure Kibana User (Required for Kibana 8.x)
docker compose exec elasticsearch curl -X POST -u elastic:elastic_password_123 \ "http://localhost:9200/_security/user/kibana_system/_password" \ -H 'Content-Type: application/json' \ -d '{"password": "kibana_password_123"}'
# Restart Kibana to apply credentialsdocker compose restart kibanaWait for Kibana (may take 1-2 minutes)
docker logs -f overwatch-kibana# Look for: "Kibana is now available"Create API Key for Overwatch
curl -X POST "http://localhost:9200/_security/api_key" \ -u elastic:elastic_password_123 \ -H "Content-Type: application/json" \ -d '{ "name": "overwatch-integration", "role_descriptors": { "overwatch_role": { "cluster": ["monitor", "manage_watcher"], "indices": [ { "names": ["logs-*", ".watcher-history-*"], "privileges": ["read", "view_index_metadata"] } ] } }}'Response (save the “encoded” value):
{ "id": "VuaCfGcBCdbkQm-e5aOx", "name": "overwatch-integration", "api_key": "ui2lp2axTNmsyakw9tvNnw", "encoded": "VnVhQ2ZHY0JDZGJrUW0tZTVhT3g6dWkybHAyYXhUTm1zeWFrdzl0dk5udw=="}Create Integration in Overwatch
Navigate to: http://localhost:3000/dashboard/integrations
http://elasticsearch:9200Index Test Logs
curl -X POST "http://localhost:9200/logs-test/_doc" \ -u elastic:elastic_password_123 \ -H "Content-Type: application/json" \ -d '{ "timestamp": "'$(date -u +%Y-%m-%dT%H:%M:%S.%3NZ)'", "level": "ERROR", "message": "Test error for Overwatch integration", "service": "test-service" }'Access Kibana UI
open http://localhost:5601# Login: elastic / elastic_password_123What to Test: Dashboard embedding, alert rules, data source queries
Start Grafana
docker compose up -d grafanaAccess Grafana UI
open http://localhost:3001# Login: admin / admin123Create API Key
In Grafana UI:
Create Integration in Overwatch
Navigate to: http://localhost:3000/dashboard/integrations
http://grafana:3000Create Test Dashboard and Alert
Use Grafana UI to create test dashboards and configure alert rules.
What to Test: OpenTelemetry traces, metrics, logs, alert rules
# Clone SigNoz repositorygit clone https://github.com/SigNoz/signoz.git testing/signozcd testing/signoz/deploy/docker/clickhouse-setup
# Start SigNozdocker compose up -d
# SigNoz UI: http://localhost:3301# Backend API: http://localhost:8080Free Trial: 14-day full-feature trial
Navigate to: http://localhost:3000/dashboard/integrations
https://api.datadoghq.comDD_API_KEY=YOUR_API_KEY \DD_SITE="datadoghq.com" \bash -c "$(curl -L https://s3.amazonaws.com/dd-agent/scripts/install_script_agent7.sh)"Create monitors in Datadog UI to trigger alerts.
Free Tier: 100 GB/month data ingest, 1 free user
Navigate to: http://localhost:3000/dashboard/integrations
https://api.newrelic.comFollow New Relic documentation to install APM agents: https://docs.newrelic.com/docs/apm/agents/
Free Trial: 14-day trial with full features
https://your-overwatch.com/api/v1/webhooks/pagerduty/{integration_id}For testing webhooks from cloud services locally:
Install ngrok
# macOSbrew install ngrok
# Or download from https://ngrok.com/downloadStart ngrok Tunnel
ngrok http 8000
# Your webhook URL becomes:# https://abcd1234.ngrok.io/api/v1/webhooks/{platform}/{integration_id}Configure Webhook in External Service
Use the ngrok URL in your external service configuration:
Monitor Webhook Traffic
Access ngrok web interface: http://localhost:4040
Free Tier: Unlimited with 10,000 message history
ngrok http 8000# Copy forwarding URL: https://abcd1234.ngrok.iohttps://abcd1234.ngrok.io/api/v1/webhooks/slack/{integration_id}/commandshttps://hooks.slack.com/services/T00/B00/XXXXSetup Phase
Connection Testing
Data Ingestion Testing
API Operations Testing
Health Monitoring Testing
Cleanup
Webhook Not Received:
# Check Overwatch logsdocker compose logs -f backend | grep webhook
# Verify webhook URL is correctecho "http://backend:8000/api/v1/webhooks/{type}/{integration_id}"
# Test webhook manuallycurl -X POST http://localhost:8000/api/v1/webhooks/prometheus/{id} \ -H "Content-Type: application/json" \ -d '{"status": "firing", "alerts": [{"labels": {"alertname": "test"}}]}'Connection Test Fails:
# Check network connectivity from backend containerdocker exec overwatch-backend curl -v http://prometheus:9090/api/v1/status/config
# Verify credentialsdocker exec overwatch-backend env | grep API
# Check integration statuscurl http://localhost:8000/api/v1/integrations/{id}/health \ -H "Authorization: Bearer $TOKEN"Quota Still Blocks After Delete:
# Verify soft delete workeddocker compose exec postgres psql -U overwatch -c \ "SELECT id, name, deleted_at FROM integrations WHERE organization_id = 'YOUR_ORG_ID';"
# Should show deleted_at timestamp for deleted integration
# If quota still blocks, restart backenddocker compose restart backend# Stop and remove testing servicesdocker compose --profile testing down
# Stop but keep datadocker compose stop prometheus alertmanager elasticsearch kibana grafana
# Remove volumes (WARNING: deletes all data)docker compose --profile testing down -v# Start all testing servicesdocker compose --profile testing up -d
# Start specific servicedocker compose up -d prometheus alertmanager
# Check service statusdocker compose ps
# View logsdocker compose logs -f prometheus
# Restart servicedocker compose restart prometheus
# Stop testing servicesdocker compose --profile testing down# Prometheusopen http://localhost:9090
# Alertmanageropen http://localhost:9093
# Elasticsearch (elastic/elastic_password_123)open http://localhost:9200
# Kibana (elastic/elastic_password_123)open http://localhost:5601
# Grafana (admin/admin123)open http://localhost:3001
# Overwatch Web UIopen http://localhost:3000/dashboard/integrationsFor testing assistance, contact support@overwatch-observability.com.
Related Documentation: