### Full Configuration Example in YAML Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/setup/configuration.md This YAML snippet demonstrates all available configuration options. Use it as a starting point for your own setup. ```yaml micronaut: security: enabled: true token: generator.access-token.expiration: 86400 # 24 hours jwt.signatures.secret.generator.secret: your-very-long-random-secret oauth2: clients: oidc: client-id: your-client-id client-secret: your-client-secret authorization-server: keycloak openid: issuer: https://your-oidc-provider/ end-session.enabled: true mcp.server.enabled: false metrics: enabled: true export: otlp: enabled: true url: https://example.host:4318/v1/metrics headers: 'Authorization=Bearer Your-collectors-API-token,key2=value' step: PT1M prometheus: enabled: true descriptions: true --- metrics-exports: http-uptime-status: true http-latest-latency: true ssl-status: true ssl-expiry: true push-uptime-status: true icmp-uptime-status: true icmp-latest-latency: true icmp-latest-packet-loss: true --- admin-auth: username: YourSuperSecretUsername password: YourSuperSecretPassword api-key: ThisShouldBeVeryVerySecureToo mcp-api-key: ThisShouldBeVeryVerySecureToo oidc: allowed-emails: - alice@example.com - bob@example.com require-verified-email: true --- app-config: event-data-retention-days: 365 latency-data-retention-days: 7 log-event-handler: true language: en check-updates: true http-check-timeout-seconds: 30 --- smtp-config: host: 'your.smtp.server' port: 465 transport-strategy: SMTP_TLS username: YourSMTPUsername password: YourSMTPPassword ``` -------------------------------- ### Quick Start with Docker Compose (UNIX) Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/setup/installation.md Use this snippet to quickly set up Kuvasz with Docker Compose on UNIX-like systems. Ensure Docker and Docker Compose are installed. This command downloads the docker-compose.yml file and starts the services. ```shell mkdir kuvasz-uptime && cd kuvasz-uptime touch kuvasz.yml curl -L https://raw.githubusercontent.com/kuvasz-uptime/kuvasz/refs/heads/main/docker-examples/docker-compose.yml -o docker-compose.yml # At this point you might want to change your docker-compose.yml and/or your # kuvasz.yml files to change the default configuration, especially the # credentials and secrets in there docker compose up -d ``` -------------------------------- ### Quick Start with Docker Compose (PowerShell) Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/setup/installation.md Use this snippet to quickly set up Kuvasz with Docker Compose on Windows using PowerShell. Ensure Docker and Docker Compose are installed. This command downloads the docker-compose.yml file and starts the services. ```powershell mkdir kuvasz-uptime; cd kuvasz-uptime New-Item kuvasz.yml -ItemType File Invoke-WebRequest -Uri "https://raw.githubusercontent.com/kuvasz-uptime/kuvasz/refs/heads/main/docker-examples/docker-compose.yml" -OutFile "docker-compose.yml" # At this point you might want to change your docker-compose.yml and/or your # kuvasz.yml files to change the default configuration, especially the # credentials and secrets in there docker compose up -d ``` -------------------------------- ### Full YAML Configuration Example Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/management/examples.md This is a complete YAML configuration file that serves as a starting point for your Kuvasz Uptime setup. It includes application settings, integrations, and various monitor types. ```yaml micronaut.security.enabled: true micronaut.security.token.generator.access-token.expiration: 86400 # 24 hours admin-auth: username: YourSuperSecretUsername password: YourSuperSecretPassword api-key: ThisShouldBeVeryVerySecureToo mcp-api-key: ThisShouldBeVeryVerySecureToo app-config: event-data-retention-days: 365 latency-data-retention-days: 7 log-event-handler: true language: en check-updates: true http-check-timeout-seconds: 30 --- smtp-config: host: 'your.smtp.server' port: 465 transport-strategy: SMTP_TLS username: YourSMTPUsername password: YourSMTPPassword --- integrations: pagerduty: - name: pd_global integration-key: YourOwnIntegrationKey global: true enabled: true slack: - name: slack_default webhook-url: 'https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXX' discord: - name: discord webhook-url: https://discord.com/api/webhooks/XXXXXXX/YYYYYYYYY email: - name: email_implicitly_enabled from-address: noreply@kuvasz-uptime.dev to-address: your@email.address telegram: - name: telegram_disabled api-token: 'YourToken' chat-id: '-1232642423121' enabled: false webhook: - name: webhook_templated url: https://any-other-http.service/webhooks http-method: POST # optional, defaults to POST; PUT, PATCH and GET are also supported excluded-events: - PUSH_UP - HTTP_UP - SSL_WILL_EXPIRE request-headers: Accept: '*/*' Authorization: Bearer your-webhook-secret-token X-Custom-Header: "This can be a template as well: {{ ctx.type }}" payload-template: | { "monitorName": "{{ctx.monitorName}}", "type": "{{ctx.type}}" } --- http-monitors: - name: "full configuration example" url: "https://akobor.me" sensitive-url: false uptime-check-interval: 30 enabled: true ssl-check-enabled: false request-method: "POST" latency-history-enabled: true follow-redirects: true force-no-cache: true ssl-expiry-threshold: 30 failure-count-threshold: 2 integrations: - "telegram:telegram_disabled" - "slack:slack_default" expected-status-codes: - 200 - 201 - 303 expected-keyword: "akobor" expected-keyword-case-sensitive: true expected-keyword-negated: false response-time-threshold-millis: 500 request-headers: Host: "example.com" expected-headers: Content-Type: "application/json" request-body: "{\"key\":\"value\"}" - name: "minimal configuration example" url: "https://kuvasz-uptime.dev" uptime-check-interval: 5 push-monitors: - name: "My Push Monitor" heartbeat-interval: 10 grace-period: 2 failure-count-threshold: 3 client-secret: "d6d5a85c-82c0-4bea-9926-c3eed32de32b" enabled: true integrations: [ ] - name: "Another Push Monitor" heartbeat-interval: 86400 grace-period: 3600 client-secret: "7b2d5cb1-41bd-4067-9732-c79dbbf45286" enabled: false integrations: - "slack:slack_default" icmp-monitors: - name: "My ICMP Monitor" host: "example.com" uptime-check-interval: 60 packet-count: 3 timeout-seconds: 5 packet-loss-threshold: 100 failure-count-threshold: 1 enabled: true metrics-history-enabled: true integrations: - "slack:slack_default" - name: "Local router" host: "192.168.1.1" uptime-check-interval: 30 enabled: true --- default-status-page: public: true title: "Status - Kuvasz Uptime" custom-logo-url: "https://example.com/logo.png" custom-favicon-url: "https://example.com/favicon.png" status-pages: - title: "Example Status Page" slug: "example-status" public: true custom-logo-url: "https://example.com/logo.png" custom-favicon-url: "https://example.com/favicon.png" monitors: - "http:full configuration example" - "http:minimal configuration example" - "push:My Push Monitor" - "icmp:My ICMP Monitor" ``` -------------------------------- ### Example Prometheus Configuration (ENV) Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/management/metrics-exporters.md Complete example configuration in ENV variables for enabling metrics export and the Prometheus exporter. ```bash ENABLE_METRICS_EXPORT=true ENABLE_PROMETHEUS_EXPORT=true ENABLE_PROMETHEUS_DESCRIPTIONS=true # Enable the individual metrics ENABLE_HTTP_UPTIME_STATUS_EXPORT=true ENABLE_HTTP_LATEST_LATENCY_EXPORT=true ENABLE_SSL_STATUS_EXPORT=true ENABLE_SSL_EXPIRY_EXPORT=true ENABLE_PUSH_UPTIME_STATUS_EXPORT=true ENABLE_ICMP_UPTIME_STATUS_EXPORT=true ENABLE_ICMP_LATEST_LATENCY_EXPORT=true ENABLE_ICMP_LATEST_PACKET_LOSS_EXPORT=true ``` -------------------------------- ### Example Prometheus Configuration (YAML) Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/management/metrics-exporters.md Complete example configuration in YAML for enabling metrics export and the Prometheus exporter. ```yaml micronaut: metrics: enabled: true export: prometheus: enabled: true descriptions: true --- metrics-exports: http-uptime-status: true http-latest-latency: true ssl-status: true ssl-expiry: true push-uptime-status: true icmp-uptime-status: true icmp-latest-latency: true icmp-latest-packet-loss: true ``` -------------------------------- ### Complete Example Configuration Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/management/metrics-exporters.md Provides a comprehensive example of configuring the OpenTelemetry exporter and enabling specific metrics exports in both YAML and environment variable formats. ```yaml micronaut: metrics: enabled: true export: otlp: enabled: true url: https://example.host:4318/v1/metrics headers: 'Authorization=Bearer Your-collectors-API-token,key2=value' step: PT1M --- metrics-exports: http-uptime-status: true http-latest-latency: true ssl-status: true ssl-expiry: true push-uptime-status: true icmp-uptime-status: true icmp-latest-latency: true icmp-latest-packet-loss: true ``` ```bash ENABLE_METRICS_EXPORT=true ENABLE_OTLP_EXPORT=true OTLP_EXPORT_URL=https://example.host:4318/v1/metrics OTLP_EXPORT_HEADERS='Authorization=Bearer Your-collectors-API-token,key2=value' OTLP_EXPORT_STEP=PT1M # Enable the individual metrics ENABLE_HTTP_UPTIME_STATUS_EXPORT=true ENABLE_HTTP_LATEST_LATENCY_EXPORT=true ENABLE_SSL_STATUS_EXPORT=true ENABLE_SSL_EXPIRY_EXPORT=true ENABLE_PUSH_UPTIME_STATUS_EXPORT=true ENABLE_ICMP_UPTIME_STATUS_EXPORT=true ENABLE_ICMP_LATEST_LATENCY_EXPORT=true ENABLE_ICMP_LATEST_PACKET_LOSS_EXPORT=true ``` -------------------------------- ### Full Webhook Integration Example Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/management/integrations.md A comprehensive example demonstrating a webhook integration with custom URL, HTTP method, request headers, and a templated payload. ```yaml webhook: - name: webhook_templated url: https://any-other-http.service/webhooks http-method: POST excluded-events: - PUSH_UP - HTTP_UP - SSL_WILL_EXPIRE request-headers: Accept: '*/*' Authorization: Bearer your-webhook-secret-token X-Custom-Header: custom-value payload-template: | { "monitorName": "{{ctx.monitorName}}", "type": "{{ctx.type}}" } - name: webhook_put url: https://any-other-http.service/resource/123 http-method: PUT payload-template: | { "monitorName": "{{ctx.monitorName}}", "type": "{{ctx.type}}" } # ... other Webhook integrations ``` -------------------------------- ### Install Kuvasz Helm Chart with Default Values Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/helm/kuvasz-uptime/README.md Installs the Kuvasz Helm chart using default configuration values. Ensure you have Helm 3.2.0+ and Kubernetes 1.19+ installed. ```bash helm install my-kuvasz oci://ghcr.io/kuvasz-uptime/kuvasz-uptime --version 3.3.0 ``` -------------------------------- ### Full Helm Installation and Verification Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/helm/kuvasz-uptime/TESTING.md Installs the Helm chart, checks its status, retrieves admin credentials, and then uninstalls it. Requires cluster access. ```bash # Install helm install test-release . -f test-values.yaml # Check status helm status test-release # Get admin credentials kubectl get secret test-release-kuvasz-admin -o jsonpath='{.data.admin-user}' | base64 -d kubectl get secret test-release-kuvasz-admin -o jsonpath='{.data.admin-password}' | base64 -d # Uninstall helm uninstall test-release ``` -------------------------------- ### Add Helm Repository and Install Kuvasz Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/setup/helm-deployment.md Installs the Kuvasz Helm chart from the OCI registry. Use the first command for default values or the second with a custom values file. ```bash helm install my-kuvasz oci://ghcr.io/kuvasz-uptime/kuvasz-uptime --version ``` ```bash helm install my-kuvasz oci://ghcr.io/kuvasz-uptime/kuvasz-uptime --version -f my-values.yaml ``` -------------------------------- ### Full Configuration Example in Environment Variables Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/setup/configuration.md This ENV snippet shows all available configuration options as environment variables. Useful for containerized deployments. ```bash ENABLE_AUTH=true AUTH_MAX_AGE=86400 # 24 hours ADMIN_USER=YourSuperSecretUsername ADMIN_PASSWORD=YourSuperSecretPassword ADMIN_API_KEY=ThisShouldBeVeryVerySecureToo ADMIN_MCP_API_KEY=ThisShouldBeVeryVerySecureToo ENABLE_OIDC=true OIDC_ISSUER=https://your-oidc-provider/ OIDC_CLIENT_ID=your-client-id OIDC_CLIENT_SECRET=your-client-secret OIDC_AUTH_SERVER=keycloak ENABLE_OIDC_END_SESSION=true OIDC_ALLOWED_EMAILS=alice@example.com,bob@example.com OIDC_REQUIRE_VERIFIED_EMAIL=true DATABASE_HOST=localhost DATABASE_PORT=5432 DATABASE_NAME=postgres DATABASE_USER=change_me DATABASE_PASSWORD=change_me EVENT_DATA_RETENTION_DAYS=365 LATENCY_DATA_RETENTION_DAYS=7 ENABLE_LOG_EVENT_HANDLER=true APP_LANGUAGE=en ENABLE_CHECK_UPDATES=true HTTP_CHECK_TIMEOUT_SECONDS=30 ENABLE_MCP_SERVER=false TZ=UTC ENABLE_METRICS_EXPORT=true ENABLE_OTLP_EXPORT=true OTLP_EXPORT_URL=https://example.host:4318/v1/metrics OTLP_EXPORT_HEADERS='Authorization=Bearer Your-collectors-API-token,key2=value' OTLP_EXPORT_STEP=PT1M ENABLE_PROMETHEUS_EXPORT=true ENABLE_PROMETHEUS_DESCRIPTIONS=true # Enable the individual metrics ENABLE_HTTP_UPTIME_STATUS_EXPORT=true ENABLE_HTTP_LATEST_LATENCY_EXPORT=true ENABLE_SSL_STATUS_EXPORT=true ENABLE_SSL_EXPIRY_EXPORT=true ENABLE_PUSH_UPTIME_STATUS_EXPORT=true ENABLE_ICMP_UPTIME_STATUS_EXPORT=true ENABLE_ICMP_LATEST_LATENCY_EXPORT=true ENABLE_ICMP_LATEST_PACKET_LOSS_EXPORT=true ``` -------------------------------- ### Install Kuvasz Helm Chart with Custom Values Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/helm/kuvasz-uptime/README.md Installs the Kuvasz Helm chart with custom configuration specified in a 'my-values.yaml' file. Ensure you have Helm 3.2.0+ and Kubernetes 1.19+ installed. ```bash helm install my-kuvasz oci://ghcr.io/kuvasz-uptime/kuvasz-uptime --version 3.3.0 -f my-values.yaml ``` -------------------------------- ### Dry-run Helm Installation Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/helm/kuvasz-uptime/TESTING.md Performs a dry-run installation of the Helm chart to validate the deployment without actually creating resources. Requires cluster access. ```bash helm install test-release . -f test-values.yaml --dry-run --debug ``` -------------------------------- ### Install Kuvasz with Custom Values and Namespace Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/setup/helm-deployment.md Deploys Kuvasz using a specified values file and creates a dedicated namespace for the deployment. ```bash helm install kuvasz-uptime oci://ghcr.io/kuvasz-uptime/kuvasz-uptime \ --version \ --values values.yaml \ --namespace kuvasz-uptime \ --create-namespace ``` -------------------------------- ### PagerDuty Integration with Name Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/management/integrations.md Example of configuring a PagerDuty integration, specifying its name. ```yaml integrations: pagerduty: - name: "PD global integration" integration-key: YourOwnIntegrationKey ``` -------------------------------- ### Example Metrics Output Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/management/metrics-exporters.md Illustrates the format of metrics exported by Kuvasz when using the OpenTelemetry exporter. ```text kuvasz.http.ssl.status{name=weather.com,target=https://weather.com} 1 kuvasz.http.latency.latest.milliseconds{name=samsung.com,target=https://www.samsung.com} 183 kuvasz.http.uptime.status{name=google.com,target=https://www.google.com} 1 kuvasz.http.ssl.expiry.seconds{name=bbc.com,target=https://www.bbc.com} 1.785147977e+09 kuvasz.icmp.uptime.status{name=my-router,target=192.168.1.1} 1 kuvasz.icmp.latency.latest.milliseconds{name=my-router,target=192.168.1.1} 4 kuvasz.icmp.packet.loss.latest.percentage{name=my-router,target=192.168.1.1} 0 ``` -------------------------------- ### Slack Integration Example Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/management/integrations.md Configure Slack notifications by providing a webhook URL. You can set up multiple integrations, including a global one. ```yaml integrations: slack: - name: slack-example webhook-url: 'https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXX' - name: slack-global webhook-url: 'https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXX' global: true # ... other Slack integrations ``` -------------------------------- ### STDOUT Log Event Examples Source: https://github.com/kuvasz-uptime/kuvasz/wiki/Events-&-Event-handlers Examples of log messages generated by the STDOUT event handler for different Kuvasz events. This handler writes to standard output. ```text ✅ Your monitor "test_up" (https://test.com) is UP (200). Latency was: 1826ms. ``` ```text 🚨 Your monitor "test_down" (https://test2.com) is DOWN. Reason: Connect Error: Connection refused: test2.com ``` ```text ℹ Request to "test_redirected" (https://redirected.com) has been redirected ``` ```text 🔒️ Your site "test_good_ssl" (https://good-ssl.com) has a VALID certificate ``` ```text 🚨 Your site "test_bad_ssl" (https://no-subject.badssl.com/) has an INVALID certificate. Reason: PKIX path validation failed ``` -------------------------------- ### Start Kuvasz Stack with Docker Compose Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/setup/installation.md Command to launch the Kuvasz services defined in the docker-compose.yml file in detached mode. ```bash docker compose up -d ``` -------------------------------- ### PagerDuty Integration Example Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/management/integrations.md Shows how to set up PagerDuty integrations, including a globally enabled integration and a disabled one. The 'integration-key' is crucial for connecting to your PagerDuty service. ```yaml integrations: pagerduty: - name: pd_global integration-key: YourOwnIntegrationKey global: true - name: pd_disabled integration-key: YourOtherIntegrationKey enabled: false # ... other PagerDuty integrations ``` -------------------------------- ### Discord Integration Example Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/management/integrations.md Configure Discord notifications using a webhook URL. This includes setting up named integrations and a global integration. ```yaml integrations: discord: - name: discord-example webhook-url: 'https://discord.com/api/webhooks/123456789/abcdef1234567890abcdef1234567890' - name: discord-global webhook-url: 'https://discord.com/api/webhooks/987654321/fedcba0987654321fedcba0987654321' global: true # ... other Discord integrations ``` -------------------------------- ### Custom Configuration File with Slack Integration Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/helm/kuvasz-uptime/README.md Provide a custom `kuvasz.yml` configuration file using the `config.raw` value, demonstrating Slack integration setup. ```yaml config: raw: | integrations: slack: - name: my-slack webhook-url: 'https://hooks.slack.com/services/ מסתיר' global: true # ... ``` -------------------------------- ### Pebble Template Verbatim Example Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/management/integrations.md This example demonstrates how to use the `{% verbatim %}` tag in Pebble templates to prevent parsing of special characters that might conflict with Pebble's syntax. ```yaml request-headers: This-Should-Work-Too: "{% verbatim %}{%{% endverbatim %}" # Rendered as "{%" ``` -------------------------------- ### Run Kuvasz Docker Container Source: https://github.com/kuvasz-uptime/kuvasz/wiki/Home Quickly start a Kuvasz instance using Docker. Ensure you have a running PostgreSQL instance and set necessary environment variables for configuration. ```shell docker run -p 8080:8080 \ -e ADMIN_USER=admin \ -e ADMIN_PASSWORD=ThisShouldBeVeryVerySecure \ -e DATABASE_HOST=127.0.0.1 \ -e DATABASE_PORT=5432 \ -e DATABASE_NAME=your_database \ -e DATABASE_USER=your_db_user \ -e DATABASE_PASSWORD=OhThisIsSoSecure \ -e JWT_SIGNATURE_SECRET=testSecretItsVeryVerySecretSecret \ kuvaszmonitoring/kuvasz:latest ``` -------------------------------- ### Email Integration Example Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/management/integrations.md Demonstrates how to configure multiple email integrations with different sender and recipient addresses. The 'enabled' flag can be used to disable specific integrations. ```yaml integrations: email: - name: email_implicitly_enabled from-address: noreply@kuvasz-uptime.dev to-address: your@email.address - name: email_disabled from-address: noreply@other-sender.com to-address: other-recipient@blabla.com enabled: false # ... other email integrations ``` -------------------------------- ### Telegram Integration Configuration Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/management/integrations.md Example YAML configuration for setting up Telegram integrations, including global notifications and disabled integrations. ```yaml integrations: telegram: - name: telegram_global api-token: 'YourToken' chat-id: '-1232642423121' global: true - name: telegram_disabled api-token: 'YourOtherToken' chat-id: '-1232546142423121' enabled: false # ... other Telegram integrations ``` -------------------------------- ### Webhook Integration with PUT HTTP Method Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/management/integrations.md Example of configuring a webhook integration using the PUT HTTP method for a specific URL. ```yaml integrations: webhook: - name: matrix url: 'http://your-matrix-webhook-host:4785/!roomid:your-homeserver/your-shared-token' http-method: PUT ``` -------------------------------- ### Enable SSL Check for a Monitor Source: https://github.com/kuvasz-uptime/kuvasz/wiki/Monitor-management Enable SSL checking for a monitor by setting `sslCheckEnabled` to `true` during creation or update. SSL checks are scheduled to run periodically after initial setup. ```shell curl --location --request PATCH 'https://your.host:8080/monitors/4' \ --header 'Authorization: Bearer YourAccesstoken' \ --header 'Content-Type: application/json' \ --data-raw '{ "sslCheckEnabled": true }' ``` -------------------------------- ### Mounting the YAML Configuration File in Docker Compose Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/setup/configuration.md Specifies how to mount the Kuvasz YAML configuration file as a volume in a Docker Compose setup. ```yaml services: kuvasz: # ... volumes: - /path/to/your/kuvasz.yml:/config/kuvasz.yml ``` -------------------------------- ### Example Prometheus Metrics Output Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/management/metrics-exporters.md Sample output of metrics exposed by the Prometheus exporter, showing HTTP and ICMP related data. ```text kuvasz_http_uptime_status{name="nytimes.com",target="https://www.nytimes.com"} 1.0 kuvasz_http_latency_latest_milliseconds{name="nytimes.com",target="https://www.nytimes.com"} 29.0 kuvasz_http_ssl_status{name="nytimes.com",target="https://www.nytimes.com"} 1.0 kuvasz_http_ssl_expiry_seconds{name="nytimes.com",target="https://www.nytimes.com"} 1.758828296E9 kuvasz_icmp_uptime_status{name="my-router",target="192.168.1.1"} 1.0 kuvasz_icmp_latency_latest_milliseconds{name="my-router",target="192.168.1.1"} 4.0 kuvasz_icmp_packet_loss_latest_percentage{name="my-router",target="192.168.1.1"} 0.0 ``` -------------------------------- ### API Endpoints for Push Monitors Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/management/push-monitors.md Key API endpoints for managing push monitors. Use GET to retrieve, POST to create, PATCH to update, and DELETE to remove monitors. ```bash GET /api/v2/push-monitors GET /api/v2/push-monitors/{id} POST /api/v2/push-monitors PATCH /api/v2/push-monitors/{id} DELETE /api/v2/push-monitors/{id} ``` -------------------------------- ### Fetch Monitors with Authentication Source: https://github.com/kuvasz-uptime/kuvasz/wiki/API Send authenticated GET requests to the `/monitors` endpoint using the obtained JWT token in the `Authorization` header. Replace the placeholder token with your actual access token. ```shell curl --location --request GET 'https://your.host:8080/monitors' \ --header 'Authorization: Bearer eyJhbGciHJFKIjfjzI1NiJ9.eyJzdWIiOiJEYXZleU1vb3JlIiwibmJmIjdf657adf8da65NTkyLCJyb2xlcyI6WyJST0xFX0FETUlOIl0sImlzcyI6Imt1dmFzeiIsImV4cCI6MTU5NzYwNTE5MiwiaWF0IjoxNTk3NjAxNTkyfQ.EDAeFfsdfsfdsoJmUtP11XLGksmiVDttU_N4dsfsdXJLP4' \ --header 'Content-Type: application/json' ``` -------------------------------- ### Telegram Chat ID Example Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/management/integrations.md Example JSON response from the Telegram API showing how to find the sender_chat ID, which is used as the chat-id for notifications. ```json { // ... other fields ... "sender_chat": { "id": -343243243111, "title": "kuvasz uptime events", "type": "channel" }, // ... other fields ... } ``` -------------------------------- ### Create Monitor with PagerDuty Integration Source: https://github.com/kuvasz-uptime/kuvasz/wiki/Monitor-management Create a new monitor and simultaneously configure its PagerDuty integration by providing the `pagerdutyIntegrationKey` during the POST request. ```shell curl --location --request POST 'https://your.host:8080/monitors/' \ --header 'Authorization: Bearer YourAccessToken' \ --header 'Content-Type: application/json' \ --data-raw '{ "name": "my_first_monitor", "url": "https://website.to.check", "uptimeCheckInterval": 60, "pagerdutyIntegrationKey": "YourSecretIntegrationKeyFromPagerDuty" }' ``` -------------------------------- ### Prepare Custom cacerts File for SSL Checks Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/management/examples.md These shell commands prepare a custom cacerts file by pulling the Kuvasz Docker image, extracting the original cacerts, and then importing a custom certificate. ```shell # 1. Pull the current image docker pull kuvaszmonitoring/kuvasz:latest # 2. Copy the "original" cacerts to a local file docker run --rm --entrypoint cat kuvaszmonitoring/kuvasz:latest /opt/java/openjdk/lib/security/cacerts > cacerts # 3. This is the tricky step: we attach back the current folder where the cacerts, and also the custom certificate should exist and we add the custom certificate to the keystore docker run --rm -v `pwd`:/tmp/certs kuvaszmonitoring/kuvasz:latest sh -c 'cd /tmp/certs && keytool -keystore cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias your-custom-alias -file your-custom-cert.crt' ``` -------------------------------- ### Get Monitors Endpoint Source: https://github.com/kuvasz-uptime/kuvasz/wiki/API Retrieve a list of all configured monitors. Requires authentication. ```APIDOC ## GET /monitors ### Description Retrieves a list of all configured monitors. This endpoint requires an "Authorization" header with a valid Bearer token. ### Method GET ### Endpoint /monitors ### Parameters #### Header Parameters - **Authorization** (string) - Required - The JWT token obtained from the /login endpoint, prefixed with "Bearer ". ### Request Example ```shell curl --location --request GET 'https://your.host:8080/monitors' \ --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \ --header 'Content-Type: application/json' ``` ### Response #### Success Response (200) - The response will be a JSON array of monitor objects. (Specific schema not detailed in source) #### Response Example (Example response structure not provided in source) ``` -------------------------------- ### Get Specific Status Page Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/management/status-pages.md Retrieves a specific status page by its unique identifier. ```APIDOC ## GET /api/v2/status-pages/{id} ### Description Gets a specific status page by its ID. ### Method GET ### Endpoint /api/v2/status-pages/{id} ### Parameters #### Path Parameters - **id** (string) - Required - The unique identifier of the status page. ``` -------------------------------- ### Send Heartbeat Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/management/push-monitors.md Send a heartbeat to a push monitor to signal that it is UP. This can be done using either a GET or POST request. ```APIDOC ## Send Heartbeat ### Description Send a heartbeat to a push monitor to signal that it is UP. This can be done using either a GET or POST request. ### Method GET, POST ### Endpoint `/api/v2/push-monitors/heartbeats/{clientSecret}` ### Parameters #### Path Parameters - **clientSecret** (string) - Required - The client secret of the monitor. ### Request Example ```bash curl '[YOUR_HOST]/api/v2/push-monitors/heartbeats/[CLIENT_SECRET]' ``` ### Response #### Success Response (200) - **message** (string) - Indicates the heartbeat was received. ``` -------------------------------- ### Get a specific HTTP monitor by ID Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/management/http-monitors.md Retrieves the details of a specific HTTP monitor using its unique identifier. ```APIDOC ## GET /api/v2/http-monitors/{id} ### Description Gets a specific HTTP monitor by its ID. ### Method GET ### Endpoint /api/v2/http-monitors/{id} ### Parameters #### Path Parameters - **id** (string) - Required - The unique identifier of the HTTP monitor. ``` -------------------------------- ### Get HTTP Monitor by ID Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/features/api.md Retrieves details of a specific HTTP monitor by its unique identifier. Authentication is required. ```APIDOC ## GET /api/v2/http-monitors/{id} ### Description Retrieves the details of a specific HTTP monitor. ### Method GET ### Endpoint /api/v2/http-monitors/{id} ### Parameters #### Path Parameters - **id** (integer) - Required - The unique identifier of the HTTP monitor. ### Request Example ```bash curl -X GET "http://your.kuvasz.host/api/v2/http-monitors/107" \ -H "X-API-KEY: ThisShouldBeVeryVerySecureToo" ``` ### Response #### Success Response (200) - **id** (integer) - The unique identifier of the monitor. - **name** (string) - The name of the monitor. - **url** (string) - The URL being monitored. - **sensitiveUrl** (boolean) - Whether the URL contains sensitive information. - **uptimeCheckInterval** (integer) - The interval in seconds for uptime checks. - **enabled** (boolean) - Whether the monitor is enabled. - **sslCheckEnabled** (boolean) - Whether SSL certificate checks are enabled. - **createdAt** (string) - The timestamp when the monitor was created. - **updatedAt** (string) - The timestamp when the monitor was last updated. - **uptimeStatus** (string) - The current uptime status (e.g., UP, DOWN). - **uptimeStatusStartedAt** (string) - The timestamp when the current uptime status started. - **lastUptimeCheck** (string) - The timestamp of the last uptime check. - **nextUptimeCheck** (string) - The timestamp of the next scheduled uptime check. - **sslStatus** (string) - The current SSL certificate status (e.g., VALID, EXPIRED). - **sslStatusStartedAt** (string) - The timestamp when the current SSL status started. - **lastSSLCheck** (string) - The timestamp of the last SSL check. - **nextSSLCheck** (string) - The timestamp of the next scheduled SSL check. - **uptimeError** (string) - Any error message related to uptime checks. - **sslError** (string) - Any error message related to SSL checks. - **requestMethod** (string) - The HTTP method used for the request (e.g., GET, POST). - **latencyHistoryEnabled** (boolean) - Whether latency history is enabled. - **forceNoCache** (boolean) - Whether to force no caching for requests. - **followRedirects** (boolean) - Whether to follow HTTP redirects. - **sslExpiryThreshold** (integer) - The threshold in days for SSL certificate expiry warnings. - **failureCountThreshold** (integer) - The number of consecutive failures before triggering an alert. - **sslValidUntil** (string) - The expiration date of the SSL certificate. - **integrations** (array) - A list of integration identifiers associated with the monitor. - **effectiveIntegrations** (array) - A list of effective integrations applied to the monitor. - **expectedStatusCodes** (array) - A list of expected HTTP status codes. - **responseTimeThresholdMillis** (integer) - The response time threshold in milliseconds. - **expectedKeyword** (string) - A keyword expected in the response body. - **expectedKeywordCaseSensitive** (boolean) - Whether the keyword matching is case-sensitive. - **expectedKeywordNegated** (boolean) - Whether the keyword matching is negated. - **requestHeaders** (object) - Custom headers to include in the request. - **expectedHeaders** (object) - Headers expected in the response. - **requestBody** (string) - The request body for POST or PUT requests. #### Response Example ```json { "id": 107, "name": "kuvasz docs", "url": "https://kuvasz-uptime.dev", "sensitiveUrl": false, "uptimeCheckInterval": 300, "enabled": true, "sslCheckEnabled": true, "createdAt": "2025-06-29T10:01:25.416294+02:00", "updatedAt": "2025-06-29T10:57:56.470142+02:00", "uptimeStatus": "UP", "uptimeStatusStartedAt": "2025-06-29T10:01:29.618775+02:00", "lastUptimeCheck": "2025-06-29T11:25:58.880898+02:00", "nextUptimeCheck": "2025-06-29T11:30:58.884+02:00", "sslStatus": "VALID", "sslStatusStartedAt": "2025-06-29T10:02:30.473866+02:00", "lastSSLCheck": "2025-06-29T10:59:03.527202+02:00", "nextSSLCheck": "2025-06-30T10:59:03.532+02:00", "uptimeError": null, "sslError": null, "requestMethod": "GET", "latencyHistoryEnabled": true, "forceNoCache": true, "followRedirects": true, "sslExpiryThreshold": 7, "failureCountThreshold": 2, "sslValidUntil": "2025-08-10T10:54:01+02:00", "integrations": [ "telegram:telegram_test" ], "effectiveIntegrations": [ { "id": "email:email_test", "type": "EMAIL", "name": "email_test", "enabled": true, "global": true }, { "id": "slack:slack_global", "type": "SLACK", "name": "slack_global", "enabled": true, "global": true }, { "id": "discord:discord", "type": "DISCORD", "name": "discord", "enabled": true, "global": false }, { "id": "telegram:telegram_test", "type": "TELEGRAM", "name": "telegram_test", "enabled": true, "global": false }, { "id": "pagerduty:pd-test", "type": "PAGERDUTY", "name": "pd-test", "enabled": true, "global": true } ], "expectedStatusCodes": [200, 201, 303], "responseTimeThresholdMillis": 500, "expectedKeyword": "Kuvasz", "expectedKeywordCaseSensitive": true, "expectedKeywordNegated": false, "requestHeaders": { "Authorization": "Bearer jklfjkds8fdshlkfds" }, "expectedHeaders": { "Access-Control-Max-Age": "30" }, "requestBody": "{\"key\": \"value\"}" } ``` ``` -------------------------------- ### Minimal values.yaml for Kuvasz Deployment Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/setup/helm-deployment.md A basic configuration file for deploying Kuvasz, specifying database and authentication credentials. Remember to change the placeholder secrets. ```yaml # Database configuration postgresql: enabled: true auth: username: kuvasz-uptime password: "YourSuperSecretDbPassword" # Change this! database: kuvasz-uptime # Authentication configuration auth: adminUser: "YourSuperSecretUsername" # Change this! adminPassword: "YourSuperSecretPassword" # Change this! adminApiKey: "ThisShouldBeVeryVerySecureToo" # Change this! # Ingress configuration (optional) ingress: enabled: false # Uncomment and configure if you want to expose Kuvasz externally # className: "nginx" # hosts: # - host: kuvasz-uptime.example.com # paths: # - path: / # pathType: Prefix ``` -------------------------------- ### List all ICMP monitors Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/management/icmp-monitors.md Retrieves a list of all configured ICMP monitors. This endpoint is useful for getting an overview of all active monitors. ```APIDOC ## GET /api/v2/icmp-monitors ### Description Lists all ICMP monitors. ### Method GET ### Endpoint /api/v2/icmp-monitors ``` -------------------------------- ### Show Helm Chart Values Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/setup/helm-deployment.md Inspect the available configuration options for the Kuvasz Helm chart by showing its default values. Replace with the desired chart version. ```bash helm show values oci://ghcr.io/kuvasz-uptime/kuvasz-uptime --version ``` -------------------------------- ### Enable OIDC (ENV) Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/setup/configuration.md Enable OpenID Connect (OIDC) authentication using environment variables. When enabled, you must also provide OIDC issuer, client ID, and client secret. ```bash ENABLE_OIDC=true ``` -------------------------------- ### Configure Global Slack Integration Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/setup/installation.md Add this YAML configuration to set up Slack as a global notification channel for all monitors. Ensure the webhook URL is correct. ```yaml integrations: slack: - name: use_your_desired_name webhook-url: 'https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXX' global: true ``` -------------------------------- ### Verify Database Configuration Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/helm/kuvasz-uptime/TESTING.md Checks the generated database host and the reference to the database credentials secret. ```bash # Check database host helm template test-release . -f test-values.yaml | grep -A 1 "DATABASE_HOST" ``` ```bash # Check database credentials secret reference helm template test-release . -f test-values.yaml | grep -A 3 "DATABASE_PASSWORD" ``` -------------------------------- ### Enable Meter Descriptions (ENV) Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/management/metrics-exporters.md Control whether meter descriptions are exposed to Prometheus. Disable to minimize data transfer. ```bash ENABLE_PROMETHEUS_DESCRIPTIONS=true ``` -------------------------------- ### Get Application URL with Ingress Enabled Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/helm/kuvasz-uptime/templates/NOTES.txt Use this when Ingress is enabled to construct the application URL. It iterates through configured hosts and paths. ```go-template {{- if .Values.ingress.enabled }} {{- range $host := .Values.ingress.hosts }} {{- range .paths }} http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} {{- end }} {{- end }} {{- end }} ``` -------------------------------- ### Integrations Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/features/mcp-server.md Tool for listing all configured integrations. ```APIDOC ## list-integrations ### Description List all configured integrations (Slack, Discord, Email, PagerDuty, Telegram, Webhook) with their type and settings. ### Method GET ### Endpoint /integrations ``` -------------------------------- ### Get Admin Credentials Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/helm/kuvasz-uptime/templates/NOTES.txt Use this to retrieve admin username, password, and API key when authentication is enabled. It decodes base64 encoded secrets. ```bash {{- if .Values.auth.enabled }} echo "Admin Username: $(kubectl get secret --namespace {{ .Release.Namespace }} {{ include "kuvasz.adminSecretName" . }} -o jsonpath='{.data.admin-user}' | base64 -d)" echo "Admin Password: $(kubectl get secret --namespace {{ .Release.Namespace }} {{ include "kuvasz.adminSecretName" . }} -o jsonpath='{.data.admin-password}' | base64 -d)" echo "Admin API Key: $(kubectl get secret --namespace {{ .Release.Namespace }} {{ include "kuvasz.adminSecretName" . }} -o jsonpath='{.data.admin-api-key}' | base64 -d)" {{- else }} Authentication is disabled. You can access the application directly. {{- end }} ``` -------------------------------- ### Configure PostgreSQL User Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/setup/configuration.md Provide the username for connecting to the PostgreSQL database. The user must have permissions to create schemas and tables. Configured via environment variables. ```bash DATABASE_USER=change_me ``` -------------------------------- ### Verify Authentication Configuration Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/helm/kuvasz-uptime/TESTING.md Checks if authentication is enabled and verifies the reference to the admin credentials secret. ```bash # Check if auth is enabled helm template test-release . -f test-values.yaml | grep "ENABLE_AUTH" ``` ```bash # Check admin credentials secret reference helm template test-release . -f test-values.yaml | grep -A 2 "ADMIN_USER" ``` -------------------------------- ### Get Application URL with NodePort Service Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/helm/kuvasz-uptime/templates/NOTES.txt Use this when the service type is NodePort. It retrieves the NodePort and Node IP to construct the application URL. ```bash export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "kuvasz.fullname" . }}) export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") echo http://$NODE_IP:$NODE_PORT ``` -------------------------------- ### Create Monitor Source: https://github.com/kuvasz-uptime/kuvasz/wiki/Monitor-management Creates a new monitor. The monitor name must be unique. ```APIDOC ## POST /monitors ### Description Creates a new monitor. The name of the monitor must be unique across all monitors. ### Method POST ### Endpoint /monitors ### Request Body - **name** (string) - Required - The name of the monitor. - **url** (string) - Required - The URL to check. - **uptimeCheckInterval** (integer) - Required - The interval in seconds between checks. Minimum value is 60. - **pagerdutyIntegrationKey** (string) - Optional - The PagerDuty integration key. - **sslCheckEnabled** (boolean) - Optional - Enables SSL checking for the monitor. ### Request Example ```json { "name": "my_first_monitor", "url": "https://website.to.check", "uptimeCheckInterval": 60, "pagerdutyIntegrationKey": "YourSecretIntegrationKeyFromPagerDuty", "sslCheckEnabled": true } ``` ### Response #### Success Response (201 Created) Details of the created monitor. #### Response Example (Response structure not provided in source) ``` -------------------------------- ### Render Helm Chart with Default Values Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/helm/kuvasz-uptime/TESTING.md Renders the Helm chart using its default configuration values. ```bash cd helm/kuvasz-uptime helm template test-release . > rendered-default.yaml ``` -------------------------------- ### YAML: Empty Status Pages Configuration Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/docs/docs/management/status-pages.md An example of how to configure an empty status-pages array in YAML, which results in all existing status pages in the database being deleted. ```yaml status-pages: [] ``` -------------------------------- ### Get Application URL with ClusterIP Service Source: https://github.com/kuvasz-uptime/kuvasz/blob/main/helm/kuvasz-uptime/templates/NOTES.txt Use this when the service type is ClusterIP. It sets up port forwarding and provides the local URL to access the application. ```bash kubectl port-forward --namespace {{ .Release.Namespace }} svc/{{ include "kuvasz.fullname" . }} {{ .Values.service.port }}:{{ .Values.service.port }} echo "Visit http://127.0.0.1:{{ .Values.service.port }} to use your application" ```