Dokumentacja Alert API
Kompletna dokumentacja wszystkich endpointów API związanych z alertami, w tym zarządzanie alertami, integracje webhook i reguły filtrowania.
Uwierzytelnianie
Wszystkie endpointy Alert API wymagają uwierzytelnienia za pomocą jednej z następujących metod:
| Metoda | Nagłówek | Przykład |
|---|---|---|
| Bearer Token | Authorization: Bearer <token> | Authorization: Bearer eyJ... |
| API Key | X-API-Key: <api_key> | X-API-Key: noti_abc123... |
Szczegóły dotyczące uzyskiwania tokenów i kluczy API znajdziesz w Przewodniku uwierzytelniania.
Bazowy URL
https://app.notifer.io
Alerty
Lista alertów
Pobierz paginowaną listę alertów z opcjonalnym filtrowaniem.
GET /api/alerts
Parametry zapytania:
| Parametr | Typ | Domyślnie | Opis |
|---|---|---|---|
status | string | -- | Filtruj według statusu: open, acknowledged, resolved |
topic | string | -- | Filtruj według nazwy tematu |
priority_min | integer | -- | Minimalny priorytet (1-5) |
source | string | -- | Filtruj według źródła alertu (np. alertmanager, grafana) |
search | string | -- | Wyszukiwanie pełnotekstowe w tytule i treści alertu |
limit | integer | 50 | Wyników na stronę (maks.: 100) |
offset | integer | 0 | Liczba wyników do pominięcia |
sort | string | last_received_at | Pole sortowania: last_received_at, priority, status, count |
order | string | desc | Kierunek sortowania: asc, desc |
Przykład:
curl "https://app.notifer.io/api/alerts?status=open&priority_min=1&limit=20" \
-H "Authorization: Bearer $TOKEN"
Odpowiedź: 200 OK
{
"alerts": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"topic_id": "660e8400-e29b-41d4-a716-446655440001",
"topic_name": "server-alerts",
"alert_key": "HighCPU_web-01",
"title": "HighCPU",
"message": "CPU usage above 95% on web-01 for 5 minutes",
"priority": 1,
"status": "open",
"source": "alertmanager",
"tags": ["critical", "production", "cpu"],
"labels": {
"severity": "critical",
"env": "production",
"instance": "web-01"
},
"count": 3,
"first_received_at": "2026-02-14T08:00:00Z",
"last_received_at": "2026-02-14T08:15:00Z",
"acknowledged_at": null,
"acknowledged_by": null,
"resolved_at": null,
"resolved_by": null,
"resolve_reason": null
}
],
"total": 42
}
Szczegóły alertu
Pobierz pełne szczegóły pojedynczego alertu.
GET /api/alerts/{topic_name}/{alert_key}
Parametry ścieżki:
| Parametr | Opis |
|---|---|
topic_name | Nazwa tematu |
alert_key | Unikalny klucz alertu w ramach tematu |
Przykład:
curl "https://app.notifer.io/api/alerts/server-alerts/HighCPU_web-01" \
-H "Authorization: Bearer $TOKEN"
Odpowiedź: 200 OK
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"topic_id": "660e8400-e29b-41d4-a716-446655440001",
"topic_name": "server-alerts",
"alert_key": "HighCPU_web-01",
"title": "HighCPU",
"message": "CPU usage above 95% on web-01 for 5 minutes",
"priority": 1,
"status": "open",
"source": "alertmanager",
"tags": ["critical", "production", "cpu"],
"labels": {
"severity": "critical",
"env": "production",
"instance": "web-01"
},
"count": 3,
"first_received_at": "2026-02-14T08:00:00Z",
"last_received_at": "2026-02-14T08:15:00Z",
"acknowledged_at": null,
"acknowledged_by": null,
"resolved_at": null,
"resolved_by": null,
"resolve_reason": null
}
Potwierdzenie alertu
Oznacz alert jako potwierdzony. Sygnalizuje to, że ktoś zajmuje się problemem.
POST /api/alerts/{topic_name}/{alert_key}/ack
Przykład:
curl -X POST "https://app.notifer.io/api/alerts/server-alerts/HighCPU_web-01/ack" \
-H "Authorization: Bearer $TOKEN"
Odpowiedź: 200 OK
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"topic_name": "server-alerts",
"alert_key": "HighCPU_web-01",
"status": "acknowledged",
"acknowledged_at": "2026-02-14T08:20:00Z",
"acknowledged_by": "john"
}
Rozwiązanie alertu
Oznacz alert jako rozwiązany. Opcjonalnie możesz podać powód wyjaśniający rozwiązanie.
POST /api/alerts/{topic_name}/{alert_key}/resolve
Treść żądania (opcjonalna):
{
"reason": "Fixed in deploy v2.1 - increased CPU allocation"
}
Przykład:
curl -X POST "https://app.notifer.io/api/alerts/server-alerts/HighCPU_web-01/resolve" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"reason": "Fixed in deploy v2.1 - increased CPU allocation"}'
Odpowiedź: 200 OK
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"topic_name": "server-alerts",
"alert_key": "HighCPU_web-01",
"status": "resolved",
"resolved_at": "2026-02-14T09:00:00Z",
"resolved_by": "john",
"resolve_reason": "Fixed in deploy v2.1 - increased CPU allocation"
}
Historia wiadomości alertu
Pobierz historię wiadomości dla konkretnego alertu. Za każdym razem, gdy alert zostaje wyzwolony, rejestrowana jest nowa wiadomość. Ten endpoint zwraca wszystkie wiadomości powiązane z danym kluczem alertu.
GET /api/alerts/{topic_name}/{alert_key}/messages
Parametry zapytania:
| Parametr | Typ | Domyślnie | Opis |
|---|---|---|---|
limit | integer | 50 | Wyników na stronę (maks.: 100) |
offset | integer | 0 | Liczba wyników do pominięcia |
Przykład:
curl "https://app.notifer.io/api/alerts/server-alerts/HighCPU_web-01/messages?limit=10" \
-H "Authorization: Bearer $TOKEN"
Odpowiedź: 200 OK
{
"messages": [
{
"id": "770e8400-e29b-41d4-a716-446655440010",
"alert_id": "550e8400-e29b-41d4-a716-446655440000",
"message": "CPU usage above 95% on web-01 for 5 minutes",
"title": "HighCPU",
"priority": 1,
"tags": ["critical", "production", "cpu"],
"source": "alertmanager",
"raw_payload": {
"alertname": "HighCPU",
"severity": "critical",
"instance": "web-01"
},
"created_at": "2026-02-14T08:15:00Z"
},
{
"id": "770e8400-e29b-41d4-a716-446655440009",
"alert_id": "550e8400-e29b-41d4-a716-446655440000",
"message": "CPU usage above 95% on web-01 for 5 minutes",
"title": "HighCPU",
"priority": 1,
"tags": ["critical", "production", "cpu"],
"source": "alertmanager",
"raw_payload": {
"alertname": "HighCPU",
"severity": "critical",
"instance": "web-01"
},
"created_at": "2026-02-14T08:10:00Z"
}
],
"total": 3,
"alert_id": "550e8400-e29b-41d4-a716-446655440000"
}
Wysyłanie alertów
Wysyłanie alertu przez HTTP
Opublikuj wiadomość, która jest śledzona jako alert, dołączając nagłówek X-Alert-Key. Jeśli otwarty alert z tym samym kluczem już istnieje w temacie, wiadomość jest do niego dołączana, a licznik count alertu jest zwiększany. W przeciwnym razie tworzony jest nowy alert.
POST /{topic_name}
Nagłówki:
| Nagłówek | Wymagany | Opis |
|---|---|---|
X-Alert-Key | Tak | Unikalny identyfikator alertu w ramach tematu (np. HighCPU_web-01) |
X-Alert-Status | Nie | Status alertu: firing (domyślnie) lub resolved |
X-Alert-Source | Nie | Identyfikator źródła (np. prometheus, custom-script) |
X-Priority | Nie | Priorytet 1-5 (domyślnie: 3) |
X-Tags | Nie | Tagi rozdzielone przecinkami |
X-Title | Nie | Tytuł alertu |
Authorization | Nie | Wymagany dla prywatnych tematów |
Przykład -- Wyzwolenie alertu:
curl -X POST https://app.notifer.io/server-alerts \
-H "Authorization: Bearer $TOKEN" \
-H "X-Alert-Key: HighCPU_web-01" \
-H "X-Alert-Status: firing" \
-H "X-Alert-Source: custom-script" \
-H "X-Priority: 1" \
-H "X-Tags: critical,cpu,production" \
-H "X-Title: High CPU on web-01" \
-d "CPU usage at 98% for the last 10 minutes on web-01"
Przykład -- Rozwiązanie alertu:
curl -X POST https://app.notifer.io/server-alerts \
-H "Authorization: Bearer $TOKEN" \
-H "X-Alert-Key: HighCPU_web-01" \
-H "X-Alert-Status: resolved" \
-d "CPU usage returned to normal (45%)"
Odpowiedź: 200 OK
{
"id": "880e8400-e29b-41d4-a716-446655440020",
"topic": "server-alerts",
"message": "CPU usage at 98% for the last 10 minutes on web-01",
"title": "High CPU on web-01",
"priority": 1,
"tags": ["critical", "cpu", "production"],
"alert_key": "HighCPU_web-01",
"alert_status": "firing",
"timestamp": "2026-02-14T10:30:00Z"
}
Wybieraj klucze alertów, które są stabilne i opisowe. Dobry wzorzec to {NazwaAlertu}_{Instancja}, na przykład HighCPU_web-01 lub DiskFull_db-primary. Zapewnia to, że powtarzające się wyzwolenia tego samego alertu są grupowane razem, zamiast tworzyć duplikaty alertów.
Przyjmowanie webhooków
Otrzymuj alerty z zewnętrznych narzędzi monitorujących za pośrednictwem wstępnie skonfigurowanych endpointów webhook. Każdy typ webhooka ma parser, który rozumie natywny format payloadu narzędzia.
POST /api/topics/{topic}/webhooks/ingest/{type}/{token}
Parametry ścieżki:
| Parametr | Opis |
|---|---|
topic | Nazwa tematu docelowego |
type | Typ webhooka (zobacz obsługiwane typy poniżej) |
token | Unikalny token uwierzytelniający webhook |
Obsługiwane typy webhooków:
| Typ | Źródło | Opis |
|---|---|---|
alertmanager | Prometheus Alertmanager | Parsuje payloady webhook Alertmanagera v2 |
grafana | Grafana Alerting | Parsuje webhooki ujednoliconego alertowania Grafany |
datadog | Datadog | Parsuje powiadomienia webhook Datadoga |
dynatrace | Dynatrace | Parsuje powiadomienia o problemach Dynatrace |
zabbix | Zabbix | Parsuje webhooki media type Zabbixa |
uptime_kuma | Uptime Kuma | Parsuje powiadomienia webhook Uptime Kuma |
generic | Dowolne źródło | Akceptuje prosty format JSON (zobacz poniżej) |
Endpointy przyjmowania webhooków uwierzytelniają się za pomocą {token} w ścieżce URL, a nie za pomocą nagłówków. Dzięki temu są kompatybilne z narzędziami monitorującymi, które nie obsługują niestandardowych nagłówków.
Przykład -- URL webhooka Alertmanagera:
https://app.notifer.io/api/topics/server-alerts/webhooks/ingest/alertmanager/whk_a1b2c3d4e5f6
Skonfiguruj ten URL w pliku alertmanager.yml Alertmanagera:
receivers:
- name: notifer
webhook_configs:
- url: "https://app.notifer.io/api/topics/server-alerts/webhooks/ingest/alertmanager/whk_a1b2c3d4e5f6"
send_resolved: true
Przykład -- Payload generycznego webhooka:
curl -X POST "https://app.notifer.io/api/topics/server-alerts/webhooks/ingest/generic/whk_a1b2c3d4e5f6" \
-H "Content-Type: application/json" \
-d '{
"alert_key": "HighMemory_app-01",
"title": "High Memory Usage",
"message": "Memory usage at 92% on app-01",
"severity": "warning",
"status": "firing",
"labels": {
"env": "production",
"instance": "app-01"
}
}'
Odpowiedź: 200 OK
{
"status": "accepted",
"alerts_processed": 1,
"topic": "server-alerts"
}
Zarządzanie webhookami
Lista webhooków
Pobierz wszystkie integracje webhook dla tematu.
GET /api/topics/{topic}/webhooks
Przykład:
curl "https://app.notifer.io/api/topics/server-alerts/webhooks" \
-H "Authorization: Bearer $TOKEN"
Odpowiedź: 200 OK
[
{
"id": "990e8400-e29b-41d4-a716-446655440030",
"topic_id": "660e8400-e29b-41d4-a716-446655440001",
"topic_name": "server-alerts",
"name": "Production Alertmanager",
"type": "alertmanager",
"token": "whk_a1b2c3d4e5f6",
"is_active": true,
"events_received": 156,
"events_dropped": 23,
"last_event_at": "2026-02-14T08:15:00Z",
"created_at": "2026-01-15T10:00:00Z",
"updated_at": "2026-02-14T08:15:00Z"
}
]
Tworzenie webhooka
Utwórz nową integrację webhook dla tematu.
POST /api/topics/{topic}/webhooks
Treść żądania:
{
"name": "Production Alertmanager",
"type": "alertmanager"
}
| Pole | Typ | Wymagane | Opis |
|---|---|---|---|
name | string | Tak | Opisowa nazwa integracji |
type | string | Tak | Typ webhooka: alertmanager, grafana, datadog, dynatrace, zabbix, uptime_kuma, generic |
Przykład:
curl -X POST "https://app.notifer.io/api/topics/server-alerts/webhooks" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "Production Alertmanager", "type": "alertmanager"}'
Odpowiedź: 201 Created
{
"id": "990e8400-e29b-41d4-a716-446655440030",
"topic_id": "660e8400-e29b-41d4-a716-446655440001",
"topic_name": "server-alerts",
"name": "Production Alertmanager",
"type": "alertmanager",
"token": "whk_a1b2c3d4e5f6",
"ingest_url": "https://app.notifer.io/api/topics/server-alerts/webhooks/ingest/alertmanager/whk_a1b2c3d4e5f6",
"is_active": true,
"events_received": 0,
"events_dropped": 0,
"last_event_at": null,
"created_at": "2026-02-14T10:30:00Z",
"updated_at": "2026-02-14T10:30:00Z"
}
ingest_url w odpowiedzi to pełny URL, który musisz skonfigurować w swoim narzędziu monitorującym. Skopiuj go bezpośrednio do konfiguracji webhooka w Alertmanagerze, Grafanie lub innym narzędziu.
Aktualizacja webhooka
Zaktualizuj ustawienia integracji webhook.
PUT /api/topics/{topic}/webhooks/{id}
Treść żądania:
{
"name": "Production Alertmanager (v2)",
"is_active": true
}
Przykład:
curl -X PUT "https://app.notifer.io/api/topics/server-alerts/webhooks/990e8400-e29b-41d4-a716-446655440030" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "Production Alertmanager (v2)", "is_active": true}'
Odpowiedź: 200 OK (zaktualizowany obiekt webhooka)
Usuwanie webhooka
Usuń integrację webhook. Wszystkie powiązane reguły filtrowania również zostaną usunięte.
DELETE /api/topics/{topic}/webhooks/{id}
Przykład:
curl -X DELETE "https://app.notifer.io/api/topics/server-alerts/webhooks/990e8400-e29b-41d4-a716-446655440030" \
-H "Authorization: Bearer $TOKEN"
Odpowiedź: 204 No Content
Usunięcie webhooka natychmiast unieważnia jego URL do przyjmowania zdarzeń. Każde narzędzie monitorujące nadal wysyłające zdarzenia na stary URL otrzyma odpowiedź 404 Not Found. Upewnij się, że zaktualizujesz konfigurację monitorowania przed usunięciem.
Rotacja tokena webhooka
Wygeneruj nowy token uwierzytelniający dla webhooka. Stary token zostaje natychmiast unieważniony.
POST /api/topics/{topic}/webhooks/{id}/rotate
Przykład:
curl -X POST "https://app.notifer.io/api/topics/server-alerts/webhooks/990e8400-e29b-41d4-a716-446655440030/rotate" \
-H "Authorization: Bearer $TOKEN"
Odpowiedź: 200 OK
{
"id": "990e8400-e29b-41d4-a716-446655440030",
"token": "whk_x9y8z7w6v5u4",
"ingest_url": "https://app.notifer.io/api/topics/server-alerts/webhooks/ingest/alertmanager/whk_x9y8z7w6v5u4",
"previous_token_invalidated": true
}
Po rotacji tokena musisz zaktualizować URL webhooka we wszystkich narzędziach monitorujących, które wysyłają zdarzenia do tej integracji. Stary URL natychmiast przestanie działać.
Reguły filtrowania
Zarządzaj regułami filtrowania dla integracji webhook. Zobacz Przewodnik po regułach filtrowania, aby uzyskać szczegółowe wyjaśnienie działania reguł.
Lista reguł filtrowania
Pobierz wszystkie reguły filtrowania dla integracji webhook, w kolejności ewaluacji.
GET /api/topics/{topic}/webhooks/{id}/rules
Przykład:
curl "https://app.notifer.io/api/topics/server-alerts/webhooks/990e8400-e29b-41d4-a716-446655440030/rules" \
-H "Authorization: Bearer $TOKEN"
Odpowiedź: 200 OK
[
{
"id": "aa0e8400-e29b-41d4-a716-446655440040",
"webhook_id": "990e8400-e29b-41d4-a716-446655440030",
"name": "Drop info-level alerts",
"order": 1,
"conditions": [
{
"field": "severity",
"operator": "equals",
"value": "info"
}
],
"action": "drop",
"modifications": null,
"match_count": 47,
"created_at": "2026-01-20T10:00:00Z",
"updated_at": "2026-01-20T10:00:00Z"
},
{
"id": "bb0e8400-e29b-41d4-a716-446655440041",
"webhook_id": "990e8400-e29b-41d4-a716-446655440030",
"name": "Escalate critical to P1",
"order": 2,
"conditions": [
{
"field": "severity",
"operator": "equals",
"value": "critical"
}
],
"action": "modify",
"modifications": {
"priority": 1,
"add_tags": ["escalated"]
},
"match_count": 12,
"created_at": "2026-01-20T10:05:00Z",
"updated_at": "2026-01-20T10:05:00Z"
}
]
Tworzenie reguły filtrowania
Dodaj nową regułę filtrowania do integracji webhook. Reguła jest dołączana na końcu kolejności ewaluacji.
POST /api/topics/{topic}/webhooks/{id}/rules
Treść żądania:
{
"name": "Drop test alerts",
"conditions": [
{
"field": "alertname",
"operator": "contains",
"value": "test"
}
],
"action": "drop"
}
| Pole | Typ | Wymagane | Opis |
|---|---|---|---|
name | string | Tak | Opisowa nazwa reguły |
conditions | array | Tak | Tablica obiektów warunków |
conditions[].field | string | Tak | Ścieżka pola (obsługuje notację kropkową) |
conditions[].operator | string | Tak | Operator: equals, not_equals, contains, not_contains, regex, exists, not_exists |
conditions[].value | string | Nie | Wartość do porównania (nie wymagana dla exists/not_exists) |
action | string | Tak | Akcja: accept, drop, modify |
modifications | object | Nie | Wymagane gdy akcja to modify |
modifications.priority | integer | Nie | Ustaw priorytet (1-5) |
modifications.add_tags | array | Nie | Tagi do dodania |
Przykład:
curl -X POST "https://app.notifer.io/api/topics/server-alerts/webhooks/990e8400-e29b-41d4-a716-446655440030/rules" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Escalate production critical",
"conditions": [
{"field": "labels.env", "operator": "equals", "value": "production"},
{"field": "severity", "operator": "equals", "value": "critical"}
],
"action": "modify",
"modifications": {
"priority": 1,
"add_tags": ["production", "critical"]
}
}'
Odpowiedź: 201 Created
{
"id": "cc0e8400-e29b-41d4-a716-446655440042",
"webhook_id": "990e8400-e29b-41d4-a716-446655440030",
"name": "Escalate production critical",
"order": 3,
"conditions": [
{"field": "labels.env", "operator": "equals", "value": "production"},
{"field": "severity", "operator": "equals", "value": "critical"}
],
"action": "modify",
"modifications": {
"priority": 1,
"add_tags": ["production", "critical"]
},
"match_count": 0,
"created_at": "2026-02-14T10:30:00Z",
"updated_at": "2026-02-14T10:30:00Z"
}
Aktualizacja reguły filtrowania
Zaktualizuj warunki, akcję lub nazwę istniejącej reguły filtrowania.
PUT /api/topics/{topic}/webhooks/{id}/rules/{rule_id}
Treść żądania:
{
"name": "Escalate all critical (updated)",
"conditions": [
{"field": "severity", "operator": "equals", "value": "critical"}
],
"action": "modify",
"modifications": {
"priority": 1,
"add_tags": ["critical", "escalated"]
}
}
Przykład:
curl -X PUT "https://app.notifer.io/api/topics/server-alerts/webhooks/990e8400-e29b-41d4-a716-446655440030/rules/cc0e8400-e29b-41d4-a716-446655440042" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Escalate all critical (updated)",
"conditions": [
{"field": "severity", "operator": "equals", "value": "critical"}
],
"action": "modify",
"modifications": {"priority": 1, "add_tags": ["critical", "escalated"]}
}'
Odpowiedź: 200 OK (zaktualizowany obiekt reguły)
Usuwanie reguły filtrowania
Usuń regułę filtrowania. Pozostałe reguły zachowują swoją względną kolejność.
DELETE /api/topics/{topic}/webhooks/{id}/rules/{rule_id}
Przykład:
curl -X DELETE "https://app.notifer.io/api/topics/server-alerts/webhooks/990e8400-e29b-41d4-a716-446655440030/rules/cc0e8400-e29b-41d4-a716-446655440042" \
-H "Authorization: Bearer $TOKEN"
Odpowiedź: 204 No Content
Zmiana kolejności reguł filtrowania
Ustaw kolejność ewaluacji dla wszystkich reguł filtrowania webhooka. Podaj pełną listę identyfikatorów reguł w żądanej kolejności.
PUT /api/topics/{topic}/webhooks/{id}/rules/reorder
Treść żądania:
{
"rule_ids": [
"bb0e8400-e29b-41d4-a716-446655440041",
"aa0e8400-e29b-41d4-a716-446655440040"
]
}
Przykład:
curl -X PUT "https://app.notifer.io/api/topics/server-alerts/webhooks/990e8400-e29b-41d4-a716-446655440030/rules/reorder" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"rule_ids": ["bb0e8400-e29b-41d4-a716-446655440041", "aa0e8400-e29b-41d4-a716-446655440040"]}'
Odpowiedź: 200 OK
{
"reordered": true,
"order": [
{"id": "bb0e8400-e29b-41d4-a716-446655440041", "order": 1},
{"id": "aa0e8400-e29b-41d4-a716-446655440040", "order": 2}
]
}
Tablica rule_ids musi zawierać każdy identyfikator reguły dla webhooka. Pominięcie identyfikatora reguły spowoduje błąd 400 Bad Request.
Testowanie reguł filtrowania
Przetestuj reguły filtrowania na przykładowym payloadzie bez tworzenia rzeczywistego alertu. Zwraca informację, która reguła pasowałaby i jaka akcja zostałaby podjęta.
POST /api/topics/{topic}/webhooks/{id}/rules/test
Treść żądania:
{
"payload": {
"alertname": "HighCPU",
"severity": "critical",
"status": "firing",
"labels": {
"env": "production",
"instance": "web-01",
"team": "backend"
},
"annotations": {
"summary": "CPU usage above 95% for 5 minutes"
}
}
}
Przykład:
curl -X POST "https://app.notifer.io/api/topics/server-alerts/webhooks/990e8400-e29b-41d4-a716-446655440030/rules/test" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"payload": {
"alertname": "HighCPU",
"severity": "critical",
"labels": {"env": "production", "instance": "web-01"}
}
}'
Odpowiedź: 200 OK
{
"matched_rule": {
"id": "bb0e8400-e29b-41d4-a716-446655440041",
"name": "Escalate critical to P1",
"order": 2
},
"action": "modify",
"result": {
"would_create_alert": true,
"priority": 1,
"tags": ["escalated"],
"title": "HighCPU",
"message": "CPU usage above 95% for 5 minutes"
}
}
Gdy żadna reguła nie pasuje:
{
"matched_rule": null,
"action": "accept",
"result": {
"would_create_alert": true,
"priority": 3,
"tags": [],
"title": "HighCPU",
"message": "CPU usage above 95% for 5 minutes"
}
}
Schematy obiektów
Obiekt alertu
| Pole | Typ | Opis |
|---|---|---|
id | uuid | Unikalny identyfikator alertu |
topic_id | uuid | Identyfikator tematu nadrzędnego |
topic_name | string | Nazwa tematu nadrzędnego |
alert_key | string | Unikalny klucz alertu w ramach tematu |
title | string | Tytuł alertu |
message | string | Najnowsza wiadomość alertu |
priority | integer | Poziom priorytetu (1-5, gdzie 1 to najwyższy) |
status | string | Aktualny status: open, acknowledged, resolved |
source | string | Źródło alertu (np. alertmanager, grafana, http) |
tags | array | Lista tagów |
labels | object | Etykiety klucz-wartość z payloadu źródłowego |
count | integer | Liczba wyzwoleń alertu |
first_received_at | datetime | Kiedy alert został wyzwolony po raz pierwszy |
last_received_at | datetime | Kiedy otrzymano ostatnie zdarzenie |
acknowledged_at | datetime | Kiedy alert został potwierdzony (null jeśli nie) |
acknowledged_by | string | Nazwa użytkownika, który potwierdził (null jeśli nie) |
resolved_at | datetime | Kiedy alert został rozwiązany (null jeśli nie) |
resolved_by | string | Nazwa użytkownika, który rozwiązał (null jeśli nie) |
resolve_reason | string | Powód rozwiązania (null jeśli nie podano) |
Obiekt integracji webhook
| Pole | Typ | Opis |
|---|---|---|
id | uuid | Unikalny identyfikator webhooka |
topic_id | uuid | Identyfikator tematu nadrzędnego |
topic_name | string | Nazwa tematu nadrzędnego |
name | string | Opisowa nazwa integracji |
type | string | Typ webhooka (np. alertmanager, grafana, generic) |
token | string | Token uwierzytelniający (zawarty w URL do przyjmowania zdarzeń) |
ingest_url | string | Pełny URL do wysyłania zdarzeń (tylko w odpowiedzi na tworzenie) |
is_active | boolean | Czy webhook aktualnie przyjmuje zdarzenia |
events_received | integer | Łączna liczba otrzymanych zdarzeń |
events_dropped | integer | Zdarzenia odrzucone przez reguły filtrowania |
last_event_at | datetime | Kiedy otrzymano ostatnie zdarzenie (null jeśli nigdy) |
created_at | datetime | Kiedy webhook został utworzony |
updated_at | datetime | Kiedy webhook był ostatnio aktualizowany |
Obiekt reguły filtrowania
| Pole | Typ | Opis |
|---|---|---|
id | uuid | Unikalny identyfikator reguły |
webhook_id | uuid | Identyfikator nadrzędnej integracji webhook |
name | string | Opisowa nazwa reguły |
order | integer | Kolejność ewaluacji (od 1, niższy = ewaluowany wcześniej) |
conditions | array | Tablica obiektów warunków |
conditions[].field | string | Ścieżka pola w payloadzie (obsługuje notację kropkową) |
conditions[].operator | string | Operator porównania |
conditions[].value | string | Wartość do porównania (null dla exists/not_exists) |
action | string | Akcja do podjęcia: accept, drop, modify |
modifications | object | Modyfikacje do zastosowania (null, chyba że akcja to modify) |
modifications.priority | integer | Nadpisanie priorytetu (1-5) |
modifications.add_tags | array | Tagi do dołączenia |
match_count | integer | Liczba dopasowań reguły |
created_at | datetime | Kiedy reguła została utworzona |
updated_at | datetime | Kiedy reguła była ostatnio aktualizowana |
Odpowiedzi błędów
Wszystkie odpowiedzi błędów mają następujący format:
{
"detail": "Error message describing the issue"
}
Typowe kody błędów
| Kod | Znaczenie | Częste przyczyny |
|---|---|---|
400 | Nieprawidłowe żądanie | Nieprawidłowy JSON, brakujące wymagane pola, nieprawidłowe wartości pól |
401 | Brak autoryzacji | Brakujący lub nieprawidłowy token uwierzytelniający/klucz API |
403 | Zabronione | Niewystarczające uprawnienia (np. nie jest właścicielem tematu) |
404 | Nie znaleziono | Alert, temat, webhook lub reguła nie istnieje |
409 | Konflikt | Zduplikowany klucz alertu, nazwa webhooka już istnieje |
422 | Błąd walidacji | Nieprawidłowe wartości pól (np. priorytet poza zakresem, nieprawidłowy operator) |
429 | Przekroczono limit zapytań | Zbyt wiele żądań -- sprawdź nagłówki limitowania w odpowiedzi |
500 | Wewnętrzny błąd serwera | Nieoczekiwany błąd serwera -- skontaktuj się z pomocą techniczną, jeśli problem się powtarza |
Przykładowa odpowiedź błędu:
{
"detail": "Alert not found: topic=server-alerts, key=NonExistent_alert"
}
Odpowiedź błędu walidacji (422):
{
"detail": [
{
"loc": ["body", "conditions", 0, "operator"],
"msg": "value is not a valid enumeration member; permitted: 'equals', 'not_equals', 'contains', 'not_contains', 'regex', 'exists', 'not_exists'",
"type": "value_error.enum"
}
]
}
Następne kroki
- Przewodnik po regułach filtrowania -- Dowiedz się, jak konfigurować i testować reguły filtrowania
- Przewodnik uwierzytelniania -- Skonfiguruj tokeny i klucze API
- Priorytet wiadomości -- Poznaj poziomy priorytetów P1-P5
- Dokumentacja API -- Pełna dokumentacja API dla wszystkich endpointów Notifer