1 changed files with 0 additions and 145 deletions
@ -1,145 +0,0 @@ |
|||
#!/bin/bash |
|||
|
|||
# Vaultwarden Metrics Test Script |
|||
# This script tests the metrics endpoint functionality |
|||
|
|||
set -e |
|||
|
|||
# Configuration |
|||
VAULTWARDEN_URL="${VAULTWARDEN_URL:-http://localhost:8080}" |
|||
METRICS_TOKEN="${METRICS_TOKEN:-}" |
|||
METRICS_PATH="/metrics" |
|||
|
|||
echo "🔍 Testing Vaultwarden Metrics Endpoint" |
|||
echo "========================================" |
|||
echo "URL: ${VAULTWARDEN_URL}${METRICS_PATH}" |
|||
|
|||
# Function to test endpoint with different authentication methods |
|||
test_endpoint() { |
|||
local auth_method="$1" |
|||
local auth_header="$2" |
|||
local expected_status="$3" |
|||
|
|||
echo |
|||
echo "Testing ${auth_method}..." |
|||
|
|||
if [ -n "$auth_header" ]; then |
|||
response=$(curl -s -w "%{http_code}" -H "$auth_header" "${VAULTWARDEN_URL}${METRICS_PATH}") |
|||
else |
|||
response=$(curl -s -w "%{http_code}" "${VAULTWARDEN_URL}${METRICS_PATH}") |
|||
fi |
|||
|
|||
# Extract status code (last 3 characters) |
|||
status_code="${response: -3}" |
|||
content="${response%???}" |
|||
|
|||
echo "Status: $status_code" |
|||
|
|||
if [ "$status_code" = "$expected_status" ]; then |
|||
echo "✅ Expected status code $expected_status" |
|||
|
|||
if [ "$status_code" = "200" ]; then |
|||
# Verify it looks like Prometheus metrics |
|||
if echo "$content" | grep -q "^# HELP"; then |
|||
echo "✅ Response contains Prometheus metrics format" |
|||
|
|||
# Count metrics |
|||
metric_count=$(echo "$content" | grep -c "^vaultwarden_" || true) |
|||
echo "📊 Found $metric_count Vaultwarden metrics" |
|||
|
|||
# Show sample metrics |
|||
echo |
|||
echo "Sample metrics:" |
|||
echo "$content" | grep "^vaultwarden_" | head -5 |
|||
|
|||
else |
|||
echo "⚠️ Response doesn't look like Prometheus metrics" |
|||
fi |
|||
fi |
|||
else |
|||
echo "❌ Expected status $expected_status, got $status_code" |
|||
if [ ${#content} -lt 200 ]; then |
|||
echo "Response: $content" |
|||
else |
|||
echo "Response (first 200 chars): ${content:0:200}..." |
|||
fi |
|||
fi |
|||
} |
|||
|
|||
# Test 1: Check if metrics are enabled (test without auth first) |
|||
echo "1. Testing without authentication..." |
|||
test_endpoint "No Authentication" "" "401" |
|||
|
|||
# Test 2: Test with Bearer token if provided |
|||
if [ -n "$METRICS_TOKEN" ]; then |
|||
echo |
|||
echo "2. Testing with Bearer token..." |
|||
test_endpoint "Bearer Token" "Authorization: Bearer $METRICS_TOKEN" "200" |
|||
|
|||
echo |
|||
echo "3. Testing with query parameter..." |
|||
response=$(curl -s -w "%{http_code}" "${VAULTWARDEN_URL}${METRICS_PATH}?token=${METRICS_TOKEN}") |
|||
status_code="${response: -3}" |
|||
|
|||
if [ "$status_code" = "200" ]; then |
|||
echo "✅ Query parameter authentication works" |
|||
else |
|||
echo "❌ Query parameter authentication failed (status: $status_code)" |
|||
fi |
|||
|
|||
echo |
|||
echo "4. Testing with invalid token..." |
|||
test_endpoint "Invalid Token" "Authorization: Bearer invalid-token" "401" |
|||
|
|||
else |
|||
echo |
|||
echo "2. Skipping token tests (METRICS_TOKEN not set)" |
|||
echo " To test authentication, set METRICS_TOKEN environment variable" |
|||
fi |
|||
|
|||
# Test 3: Check alive endpoint (should work regardless of metrics config) |
|||
echo |
|||
echo "5. Testing /alive endpoint..." |
|||
alive_response=$(curl -s -w "%{http_code}" "${VAULTWARDEN_URL}/alive") |
|||
alive_status="${alive_response: -3}" |
|||
|
|||
if [ "$alive_status" = "200" ]; then |
|||
echo "✅ /alive endpoint is working" |
|||
else |
|||
echo "❌ /alive endpoint failed (status: $alive_status)" |
|||
fi |
|||
|
|||
# Test 4: Validate specific metrics exist (if we got a successful response) |
|||
if [ -n "$METRICS_TOKEN" ]; then |
|||
echo |
|||
echo "6. Validating specific metrics..." |
|||
|
|||
metrics_response=$(curl -s -H "Authorization: Bearer $METRICS_TOKEN" "${VAULTWARDEN_URL}${METRICS_PATH}") |
|||
|
|||
# List of expected metrics |
|||
expected_metrics=( |
|||
"vaultwarden_uptime_seconds" |
|||
"vaultwarden_build_info" |
|||
"vaultwarden_users_total" |
|||
"vaultwarden_http_requests_total" |
|||
"vaultwarden_db_connections_active" |
|||
) |
|||
|
|||
for metric in "${expected_metrics[@]}"; do |
|||
if echo "$metrics_response" | grep -q "$metric"; then |
|||
echo "✅ Found metric: $metric" |
|||
else |
|||
echo "⚠️ Missing metric: $metric" |
|||
fi |
|||
done |
|||
fi |
|||
|
|||
echo |
|||
echo "🏁 Metrics test completed!" |
|||
echo |
|||
echo "Next steps:" |
|||
echo "1. Configure Prometheus to scrape ${VAULTWARDEN_URL}${METRICS_PATH}" |
|||
echo "2. Set up Grafana dashboards using the provided examples" |
|||
echo "3. Configure alerting rules for monitoring" |
|||
echo |
|||
echo "For more information, see MONITORING.md" |
Loading…
Reference in new issue