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