Monitoring and management service for Qdrant vector database clusters with real-time health monitoring, recovery and shard replication management.
- π Cluster Health Monitoring - Real-time health checks and status tracking
- π Automatic Recovery - Self-healing from cluster issues
- π Collection Metrics - Storage usage, shard distribution, replication status
- πΈ Flexible Snapshot Storage - S3-compatible storage (AWS S3, MinIO) or Kubernetes volumes
- π Storage Backend Switching - Toggle between S3 and Kubernetes storage via ConfigMap
- π Presigned URLs - Secure, time-limited download links for S3 snapshots
- π Prometheus Metrics - Built-in metrics export for monitoring
- π Web Dashboard - Modern UI for cluster management
- βΈοΈ Kubernetes Native - Pod management, StatefulSet operations, RBAC support
- π Secure Credentials - Kubernetes Secrets integration for S3 credentials
docker build -t vigilante:latest .
docker run -p 8080:8080 \
-e Qdrant__Nodes__0__Host=qdrant-node-1 \
-e Qdrant__Nodes__0__Port=6333 \
-e Qdrant__ApiKey=your-api-key \
vigilante:latestSee k8s/README.md for deployment instructions.
kubectl apply -f k8s/{
"Qdrant": {
"MonitoringIntervalSeconds": 30,
"HttpTimeoutSeconds": 5,
"EnableAutoRecovery": true,
"ApiKey": "your-api-key",
"Nodes": [
{ "Host": "localhost", "Port": 6333 }
],
"S3": {
"Enabled": false,
"BucketName": "snapshots",
"Region": "default"
}
}
}Key settings:
MonitoringIntervalSeconds: How often to check cluster health (default: 30)EnableAutoRecovery: Enable automatic recovery from cluster issues (default: true)S3.Enabled: Enable S3 storage for snapshots (default: true, set to false to use Kubernetes storage)
Vigilante supports S3-compatible storage for snapshots with flexible storage backend selection.
Storage Priority:
- S3 storage (if
Enabled: trueand credentials configured) - Kubernetes storage (pod volumes)
- Qdrant API (fallback)
Configuration Parameters:
| Parameter | Source | Description | Required |
|---|---|---|---|
Enabled |
ConfigMap | Enable/disable S3 storage | No (default: true) |
EndpointUrl |
Secret β appsettings | S3 endpoint URL | Yes (when Enabled=true) |
AccessKey |
Secret β appsettings | S3 access key | Yes (when Enabled=true) |
SecretKey |
Secret β appsettings | S3 secret key | Yes (when Enabled=true) |
BucketName |
ConfigMap only | S3 bucket name | Yes (when Enabled=true) |
Region |
ConfigMap only | S3 region | No (default: "default") |
Priority: Credentials from Environment Variables (Kubernetes Secret) override appsettings.json
To use Kubernetes storage (default for dev environment):
Edit ConfigMap (k8s/dev/configmap.yaml):
{
"Qdrant": {
"MonitoringIntervalSeconds": 120,
"HttpTimeoutSeconds": 3,
"EnableAutoRecovery": true,
"ApiKey": "test",
"S3": {
"Enabled": false,
"BucketName": "snapshots",
"Region": "default"
}
}
}To use S3 storage (default for production):
Edit ConfigMap (k8s/prod/configmap.yaml):
{
"Qdrant": {
"MonitoringIntervalSeconds": 30,
"HttpTimeoutSeconds": 5,
"EnableAutoRecovery": true,
"ApiKey": "your-api-key",
"S3": {
"Enabled": true,
"BucketName": "snapshots",
"Region": "us-east-1"
}
}
}Quick switch in Kubernetes:
- Edit ConfigMap:
kubectl edit configmap vigilante-config -n qdrant - Find the
"S3"section inside"Qdrant"and change"Enabled": falseto"Enabled": true(or vice versa) - Restart deployment:
kubectl rollout restart deployment/vigilante -n qdrant - Verify:
kubectl logs -n qdrant -l app=vigilante --tail=50 | grep -E "S3 storage is disabled|S3 storage is available"
Kubernetes (Production - Recommended):
Credentials are automatically loaded from environment variables (Kubernetes Secret):
# 1. Create secret with S3 credentials
kubectl create secret generic qdrant-s3-credentials \
--from-literal=endpoint-url='https://s3.amazonaws.com' \
--from-literal=access-key='your-access-key' \
--from-literal=secret-key='your-secret-key' \
-n qdrant
# 2. Secret is mounted as environment variables in deployment.yaml:
# S3__EndpointUrl, S3__AccessKey, S3__SecretKey
#
# 3. Non-secret settings (BucketName, Region, Enabled) come from ConfigMapPriority for S3 settings:
- Credentials (EndpointUrl, AccessKey, SecretKey): Environment variables (Secret) β appsettings.json
- Configuration (BucketName, Region, Enabled): ConfigMap only
For local development (without Kubernetes), you can specify all settings in appsettings.json:
{
"Qdrant": {
"S3": {
"Enabled": true,
"EndpointUrl": "https://s3.amazonaws.com",
"AccessKey": "your-access-key",
"SecretKey": "your-secret-key",
"BucketName": "snapshots",
"Region": "us-east-1",
"UsePathStyle": true
}
}
}GET /api/v1/cluster/status- Cluster health and statusGET /api/v1/collections/info- Collection metricsPOST /api/v1/cluster/replicate-shards- Shard replication
GET /api/v1/snapshots/info- List snapshots (S3 [if Enabled] β Kubernetes β Qdrant API)POST /api/v1/snapshots/{collectionName}- Create snapshotPOST /api/v1/snapshots/get-download-url- Generate presigned S3 download URLPOST /api/v1/snapshots/recover- Recover collection from snapshotPOST /api/v1/snapshots/download- Download snapshotDELETE /api/v1/snapshots/delete- Delete snapshot
POST /api/v1/kubernetes/delete-pod- Delete pod (triggers restart)POST /api/v1/kubernetes/manage-statefulset- Rollout/Scale StatefulSet
Swagger UI: http://localhost:8080/swagger
# Check which storage backend is being used
kubectl logs -n qdrant -l app=vigilante --tail=50 | grep -E "S3 storage|Fetching snapshots"
# Expected outputs:
# - S3 enabled: "S3 storage is available, fetching snapshots from S3"
# - S3 disabled: "S3 storage is disabled via configuration (Enabled=false)"# 1. Verify Enabled flag in ConfigMap
kubectl get configmap vigilante-config -n qdrant -o jsonpath='{.data.appsettings\.json}' | jq '.Qdrant.S3.Enabled'
# Should return: true
# 2. Check S3 credentials secret exists
kubectl get secret qdrant-s3-credentials -n qdrant
kubectl get secret qdrant-s3-credentials -n qdrant -o jsonpath='{.data}' | jq 'keys'
# Should show: ["access-key", "endpoint-url", "secret-key"]
# 3. Verify environment variables are mounted in pod
kubectl exec -n qdrant -l app=vigilante -- env | grep S3__
# Should show: S3__EndpointUrl, S3__AccessKey, S3__SecretKey
# 4. Check logs for S3 configuration errors
kubectl logs -n qdrant -l app=vigilante --tail=100 | grep -i s3# Switch to Kubernetes storage (disable S3)
kubectl patch configmap vigilante-config -n qdrant --type merge -p '
{
"data": {
"appsettings.json": "{\"Qdrant\":{\"MonitoringIntervalSeconds\":120,\"HttpTimeoutSeconds\":3,\"EnableAutoRecovery\":true,\"ApiKey\":\"test\",\"S3\":{\"Enabled\":false,\"BucketName\":\"snapshots\",\"Region\":\"default\"}}}"
}
}'
kubectl rollout restart deployment/vigilante -n qdrant
# Switch to S3 storage (enable S3)
kubectl patch configmap vigilante-config -n qdrant --type merge -p '
{
"data": {
"appsettings.json": "{\"Qdrant\":{\"MonitoringIntervalSeconds\":30,\"HttpTimeoutSeconds\":5,\"EnableAutoRecovery\":true,\"ApiKey\":\"test\",\"S3\":{\"Enabled\":true,\"BucketName\":\"snapshots\",\"Region\":\"default\"}}}"
}
}'
kubectl rollout restart deployment/vigilante -n qdrantdotnet restore
dotnet build
dotnet run --project src/Aer.Vigilante.csprojDashboard: http://localhost:8080
Metrics: http://localhost:8080/metrics
See LICENSE file for details.