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