Elastic Common Schema — wspólny słownik pól dla logów i zdarzeń bezpieczeństwa.
ECS mówi, jak nazwać każde pole w logu, żeby zapora, serwer WWW, skaner i system operacyjny opisywały to samo tymi samymi słowami. Adres IP klienta to zawsze source.ip, kod odpowiedzi to zawsze http.response.status_code — niezależnie od tego, kto zdarzenie zapisał. Dzięki temu jedno zapytanie i jedna reguła wykrywania działają na danych z wielu źródeł. Tu jest cały schemat w wersji 9.5.0, jego zasady, pełne listy wartości kategoryzacji i uczciwa odpowiedź, jak dane naszego monitoringu wyglądałyby w ECS.
Źródło: dokumentacja ECS i repozytorium elastic/ecs (wersja 9.5.0 z 04.08.2026; licencja Apache 2.0), OTEP 0199, odczyt 26.09.2026. Liczby pól z własnego przeliczenia plików schematu wersji 9.5.0. Opisy są naszym opracowaniem, nie tłumaczeniem. Pierwszy standard serii: OWASP Top 10 — jego kategoria A09 (logowanie i alarmowanie) to miejsce, w którym ECS jest narzędziem.
- Zestawów pól
- 5513 tylko zagnieżdżane w innych
- Pól w schemacie
- 2614347 core · z 736 definicji
- Wartości kategoryzacji
- 494 pola o zamkniętych listach
- Mapowanie LAB247
- 15 z 27pól wprost · 10 zestawów ECS
Każdy poziom zawęża poprzedni i ma zamkniętą listę wartości (TAB. 3–5). To one pozwalają jednym filtrem wyciągnąć np. wszystkie alerty o podatnościach ze wszystkich źródeł naraz. Wynik (outcome) ma sens tylko dla prób — dla stanu, metryki czy informacji o podatności zostaje pusty.
| Dwa pola obowiązkowe | @timestamp (kiedy zdarzenie powstało) i ecs.version (z którą wersją schematu dokument jest zgodny). Reszta jest zalecana: „zmapuj tyle pól, ile się da”. |
|---|---|
| Core i extended | Pola core (347 z 2614) są wspólne dla prawie wszystkich zastosowań — wypełnia się je najpierw. Pola extended dotyczą węższych przypadków i częściej się zmieniają. |
| Dojrzałość | GA — zmiany łamiące tylko w nowej wersji głównej. Beta — nazwa i typ raczej się nie zmienią. Alpha (od 9.4) — pole może zniknąć bez uprzedzenia. |
| Nazewnictwo | Małe litery, słowa łączone podkreśleniem, bez znaków specjalnych. Czas teraźniejszy, chyba że pole opisuje przeszłość. Od ogólnego do szczegółowego (host.os.name), bez powtórzeń (host.ip, nie host.host_ip), bez skrótów poza przyjętymi (ip, os, geo). |
| Zestawy pól | Każde pole poza czterema polami bazowymi ma prefiks — grupa pól o wspólnym prefiksie to zestaw (url.*, http.*). Dokument to zagnieżdżony JSON, nie płaskie klucze z kropkami. |
| Typy danych | Identyfikatory i większość kodów to keyword, nie liczby (error.code); wyjątek, gdy kod jest liczbą z natury (http.response.status_code). Liczby całkowite domyślnie long. Pełnotekstowe są tylko message i error.message. |
| Pola własne | ECS jest schematem przyzwalającym — pola spoza schematu są dozwolone. Kilka dodatkowych wartości tekstowych: labels. Więcej: własna przestrzeń pod nazwą własną (np. haproxy.*) albo z wielką literą (Proxy.FrontendName) — ECS nie używa wielkich liter, więc nie będzie kolizji z przyszłym polem. |
| Trzy czasy | @timestamp — kiedy zdarzenie powstało u źródła; event.created — kiedy agent albo potok pierwszy raz je odczytał; event.ingested — kiedy trafiło do centralnego magazynu. W normalnych warunkach @timestamp < event.created < event.ingested; różnice mierzą opóźnienie. |
| Kategoryzacja | Cztery pola o zamkniętych listach wartości: event.kind → event.category → event.type → event.outcome. Wartości spoza list nie wolno używać; gdy nic nie pasuje, pole zostaje puste. Kategoria i typ są tablicami — może być kilka wartości naraz. |
| Zestaw | Co opisuje | Własne | Core | Po spłaszcz. | Dojrzał. | Zagnieżdżany w | LAB |
|---|---|---|---|---|---|---|---|
| podstawa | 10 zestawów | ||||||
| base | Pola w korzeniu dokumentu: @timestamp, message, tags, labels. | 4 | 4 | 4 | GA | ● | |
| ecs | Wersja ECS, do której dokument jest zgodny (ecs.version, obowiązkowe). | 1 | 1 | 1 | GA | ● | |
| event | Szczegóły zdarzenia: kategoryzacja, czasy, identyfikatory, ważność. | 26 | 14 | 26 | GA | ● | |
| log | Mechanizm logowania: poziom, logger, plik, syslog. | 18 | 2 | 18 | GA | ||
| error | Błąd dowolnego rodzaju: kod, komunikat, typ, ślad stosu. | 5 | 3 | 5 | GA | ● | |
| agent | Agent, który zebrał zdarzenie (np. Filebeat). | 6 | 5 | 6 | GA | ||
| data_stream | Nazewnictwo strumieni danych Elasticsearch: typ, zbiór, przestrzeń. | 3 | — | 3 | beta | ||
| related | Zbiorcze listy IP, użytkowników, skrótów i hostów do szybkiego wyszukiwania. | 4 | — | 4 | GA | ||
| tracing | Identyfikatory śledzenia rozproszonego: trace.id, span.id, transaction.id. | 3 | — | 3 | GA | ||
| organization | Organizacja, której dotyczy zdarzenie. | 2 | — | 2 | GA | ||
| sieć i WWW | 16 zestawów | ||||||
| url | Adres URL w całości i w częściach: schemat, domena, ścieżka, zapytanie. | 14 | — | 14 | GA | threat.indicator.url | ● |
| http | Żądanie i odpowiedź HTTP: metoda, kod statusu, rozmiary, typy MIME. | 13 | — | 13 | GA | ● | |
| user_agent | Przeglądarka albo klient z nagłówka User-Agent, rozłożony na części. | 4 | — | 11 | GA | ||
| source | Strona źródłowa połączenia sieciowego (para z destination). | 12 | 6 | 35 | GA | process.entry_meta.source | |
| destination | Strona docelowa połączenia sieciowego (para z source). | 12 | 6 | 35 | GA | ||
| client | Strona klienta połączenia (para z server). | 12 | 6 | 35 | GA | ||
| server | Strona serwera połączenia (para z client). | 12 | 6 | 35 | GA | ||
| network | Droga komunikacji: protokół, transport, kierunek, bajty. | 12 | 7 | 16 | GA | ||
| dns | Zapytania i odpowiedzi DNS. | 18 | — | 18 | GA | ||
| tls | Połączenie TLS: wersja, szyfr, certyfikaty klienta i serwera. | 29 | — | 77 | GA | ||
| x509 | Metadane certyfikatu X.509: wystawca, podmiot, ważność. | 24 | — | — | GA | tls.server.x509, file.x509, threat… | |
| as | System autonomiczny (numer i operator sieci). | 2 | — | — | GA | source.as, client.as, … | |
| geo | Położenie geograficzne: kraj, miasto, współrzędne. | 11 | 10 | — | GA | source.geo, host.geo, … | |
| observer | Obserwator patrzący z zewnątrz: zapora, IDS, proxy, skaner. | 13 | 6 | 41 | GA | ● | |
| interface | Interfejs sieciowy obserwatora. | 3 | — | — | GA | observer.ingress/egress | |
| vlan | Sieć VLAN widziana przez obserwatora. | 2 | — | — | GA | network.vlan, observer… | |
| host i proces | 18 zestawów | ||||||
| host | Maszyna, na której zaszło zdarzenie: nazwa, IP, system. | 19 | 7 | 194 | GA | host.target | |
| os | System operacyjny: rodzina, wersja, jądro. | 7 | — | — | GA | host.os, user_agent.os, observer.os | |
| service | Usługa, z której albo dla której zebrano dane. | 11 | 5 | 195 | GA | service.origin/target | |
| process | Proces: PID, polecenie, rodzic, liderzy sesji. | 34 | 2 | 391 | GA | process.parent, … | |
| file | Plik: ścieżka, rozmiar, właściciel, znaczniki czasu. | 24 | — | 144 | GA | threat.indicator.file | |
| hash | Skróty kryptograficzne pliku: MD5, SHA-1, SHA-256 i inne. | 8 | — | — | GA | file.hash, process.hash, … | |
| code_signature | Podpis cyfrowy pliku wykonywalnego. | 11 | 2 | — | GA | file., process., dll. | |
| dll | Biblioteki ładowane dynamicznie przez proces. | 4 | 1 | 46 | GA | ||
| pe | Nagłówek plików wykonywalnych Windows (PE). | 23 | — | — | GA | file.pe, process.pe, dll.pe | |
| elf | Nagłówek plików wykonywalnych Linuksa (ELF). | 38 | — | — | GA | file.elf, process.elf | |
| macho | Nagłówek plików wykonywalnych macOS (Mach-O). | 16 | — | — | beta | file.macho, process.macho | |
| registry | Operacje na rejestrze Windows. | 7 | 6 | 7 | GA | threat.indicator.registry | |
| volume | Wolumin pamięci masowej. | 16 | — | 16 | GA | ||
| device | Urządzenie (zwykle mobilne), na którym działa aplikacja. | 10 | 1 | 10 | beta | ||
| container | Kontener, który wygenerował zdarzenie. | 14 | 1 | 14 | GA | ||
| orchestrator | Orkiestrator kontenerów (np. Kubernetes). | 15 | — | 69 | GA | ||
| cloud | Zasób chmury: dostawca, region, konto, instancja. | 11 | — | 195 | GA | cloud.origin/target | |
| faas | Funkcje uruchamiane jako usługa (serverless). | 7 | — | 7 | GA | ||
| tożsamość | 5 zestawów | ||||||
| user | Użytkownik związany ze zdarzeniem: nazwa, ID, domena, zmiany. | 7 | 2 | 280 | GA | source.user, user.target, … | |
| group | Grupa użytkownika. | 3 | — | 3 | GA | user.group, process.group, … | |
| entity | Dowolny byt środowiska IT i jego relacje (od 9.2). | 18 | 4 | 108 | GA | user.entity, host.entity, … | |
| entity_reference | Odwołanie do innego bytu w relacji (od 9.4). | 9 | — | — | alpha | entity.relationships.* | |
| risk | Wynik i poziom ryzyka hosta albo użytkownika. | 6 | — | — | beta | host.risk, user.risk | |
| bezpieczeństwo | 3 zestawów | ||||||
| threat | Klasyfikacja według taksonomii zagrożeń (MITRE ATT&CK) i wskaźniki kompromitacji. | 65 | — | 437 | GA | ||
| vulnerability | Podatność związana ze zdarzeniem: identyfikator, ocena CVSS, status. | 14 | — | 14 | GA | ● | |
| rule | Reguła, która wygenerowała alert: ID, nazwa, wersja, autor. | 10 | — | 10 | GA | ● | |
| inne | 3 zestawów | ||||||
| package | Zainstalowany pakiet oprogramowania: nazwa, wersja, typ. | 13 | — | 13 | GA | ● | |
| Wiadomość e-mail: nadawca, odbiorcy, załączniki. | 19 | — | 27 | GA | |||
| gen_ai | Żądania i odpowiedzi modeli generatywnej AI (od 9.1). | 32 | — | 32 | GA | ||
| Razem | 736 | 107 | 2614 |
- Własne
- Pola zdefiniowane przez sam zestaw.
- Po spłaszcz.
- Pola pod prefiksem razem z zagnieżdżeniami (np. source.geo.*); 0 = zestaw nie stoi w korzeniu, jego pola liczą się u gospodarza.
- Dojrzał.
- GA stabilne · beta nazwa raczej zostanie · alpha może zniknąć.
| event | Coś się wydarzyło — wartość najogólniejsza i najczęstsza. |
| alert | Alert wywołany przez regułę wykrywającą działającą poza Elastic Stack (zapora, IDS, EDR, zewnętrzny skaner). |
| metric | Pomiar liczbowy w danej chwili, zwykle zbierany w stałym rytmie. |
| state | Pomiar w danej chwili, którego wynikiem jest stan z ustalonej listy, nie liczba. |
| asset | Wpis inwentarza: byt (host, użytkownik) i jego atrybuty. |
| enrichment | Dane zebrane po to, żeby dać kontekst innym zdarzeniom — np. wskaźniki od dostawcy analiz zagrożeń. |
| pipeline_error | Błąd podczas przyjmowania zdarzenia; dane mogą być niepełne albo błędne. |
| signal | Zarezerwowane dla alertów tworzonych przez reguły Kibany. Potok przyjmujący dane nie może jej wpisywać. |
| event.category | Czego dotyczy | Oczekiwane event.type |
|---|---|---|
| api | Wywołania API w systemie. | access · admin · allowed · change · creation · deletion · denied · end · info · start · user |
| authentication | Podanie i weryfikacja poświadczeń, po których powstaje sesja. | start · end · info |
| configuration | Tworzenie, zmiana i usuwanie ustawień aplikacji, procesu albo systemu. | access · change · creation · deletion · info |
| database | Zdarzenia i metryki systemu przechowywania danych. | access · change · info · error |
| driver | Sterowniki i moduły jądra. | change · end · info · start |
| Wiadomości, załączniki i ruch pocztowy. | info | |
| file | Pliki w systemie plików. | access · change · creation · deletion · info |
| host | Inwentarz i cykl życia hostów. | access · change · end · info · start |
| iam | Tożsamość i dostęp: użytkownicy, grupy, administracja. | admin · change · creation · deletion · group · info · user |
| intrusion_detection | Wykrycia systemów IDS/IPS, sieciowych i hostowych. | allowed · denied · info |
| library | Ładowanie biblioteki do procesu. | start |
| malware | Wykrycia i alerty złośliwego oprogramowania. | info |
| network | Cała aktywność sieciowa — w zasadzie każde zdarzenie z adresem IP. | access · allowed · connection · denied · end · info · protocol · start |
| package | Pakiety oprogramowania zainstalowane na hostach. | access · change · deletion · info · installation · start |
| process | Procesy: cykl życia, pochodzenie. | access · change · end · info · start |
| registry | Rejestr Windows. | access · change · creation · deletion |
| session | Trwałe logiczne połączenia z hostami i usługami. | start · end · info |
| threat | Cele, motywy i zachowania sprawców. | indicator |
| vulnerability | Wyniki skanów podatności. | info |
| web | Dostęp do serwera WWW. | access · error · info |
| event.type | Znaczenie |
|---|---|
| access | coś zostało odczytane albo użyte |
| admin | dotyczy obiektów administracyjnych |
| allowed | coś przepuszczono |
| change | coś się zmieniło |
| connection | ruch sieciowy z danymi wystarczającymi do analizy połączeń |
| creation | coś utworzono |
| deletion | coś usunięto |
| denied | czegoś odmówiono |
| device | dotyczy urządzeń (od 9.2; żadna kategoria nie wymienia go jeszcze jako oczekiwanego) |
| end | coś się skończyło |
| error | zdarzenie opisuje błąd |
| group | dotyczy grup |
| indicator | zawiera wskaźniki kompromitacji (IOC) |
| info | czysto informacyjne — bez zmiany stanu i bez akcji |
| installation | coś zainstalowano |
| protocol | szczegóły albo analiza protokołu |
| start | coś się zaczęło |
| user | dotyczy użytkowników |
| event.outcome | Znaczenie |
|---|---|
| success | Wynik udany — np. plik utworzono. |
| failure | Wynik nieudany — np. próba odczytu pliku się nie powiodła. |
| unknown | Była tylko próba, a jej wynik jest nieznany z punktu widzenia producenta zdarzenia (np. samo żądanie bez odpowiedzi). |
Wyniki domenowe, takie jak „zablokowano” czy „przepuszczono”, nie idą do event.outcome, tylko do event.type (denied, allowed) albo event.action. Gdy wynik nie ma sensu dla zdarzenia — jak przy informacji o podatności — event.outcome zostaje puste.
| Pole | Znaczenie | U nas |
|---|---|---|
| vulnerability.id | identyfikator podatności | cve |
| vulnerability.enumeration | system identyfikatorów, np. CVE | stałe „CVE” |
| vulnerability.reference | adres z opisem podatności | — |
| vulnerability.description | opis podatności | title |
| vulnerability.category | kategoria podatności (tablica) | — |
| vulnerability.classification | system oceny, np. CVSS | stałe „CVSS” |
| vulnerability.score.base | ocena bazowa 0,0–10,0 | cvss_score |
| vulnerability.score.temporal | ocena czasowa | — |
| vulnerability.score.environmental | ocena środowiskowa | — |
| vulnerability.score.version | wersja CVSS | — |
| vulnerability.severity | ważność słownie, np. Critical | cvss_rating |
| vulnerability.scanner.vendor | dostawca skanera | „LAB247” przy dopasowaniu wersji |
| vulnerability.report_id | numer przebiegu skanu | — |
| vulnerability.status | open · fixed · reopened · unknown (beta, od 9.5) | findings.state |
| Nasze pole | Pole ECS | Sposób | Uwaga |
|---|---|---|---|
| sites.domain | url.domain | wprost | Monitorowana strona. Pełny adres sondy → url.full, ścieżka → url.path. |
| (stałe) skaner LAB247 | observer.vendor · observer.product · observer.version | wprost | Patrzymy z zewnątrz — ECS ma na to zestaw observer. |
| check_results.checked_at | @timestamp | wprost | Moment sprawdzenia. |
| check_results.check_type | event.module · event.dataset | przeliczenie | lab247 i lab247.http, lab247.ssl… — zbiór zaczyna się od nazwy modułu. |
| check_results.status | event.outcome | przeliczenie | ok → success; fail, timeout, cert_invalid → failure; „nie dało się sprawdzić” → unknown. Oryginalny stan ginie — trzeba go zachować w event.reason albo labels. |
| check_results.elapsed_ms | event.duration | przeliczenie | ECS liczy w nanosekundach: ms × 1 000 000. |
| check_results.extra.status_code | http.response.status_code | wprost | Liczba, jedno z nielicznych pól kodu jako long. |
| check_results.extra.ttfb_ms | lab247.ttfb_ms | własne | ECS nie ma pola czasu do pierwszego bajtu. |
| check_results.error | error.message | wprost | |
| findings.id | event.id | wprost | |
| findings.check_type | rule.id · event.action | wprost | exposure_git to reguła, która wywołała alert; rule.* opisuje reguły generujące alerty. |
| findings.source | event.category | przeliczenie | availability → web; security, plugin → vulnerability; audit → configuration. |
| findings.started_at · resolved_at | event.start · event.end | wprost | Pierwsza i ostatnia obserwacja stanu. |
| findings.created_at | event.created | wprost | |
| findings.state | vulnerability.status | przeliczenie | open → open, resolved → fixed. Nasz „pending” (czeka na potwierdzenie) nie ma odpowiednika; ECS ma „reopened”, którego my nie używamy — powrót problemu to nowe ustalenie. |
| findings.severity | event.severity | przeliczenie | ECS chce liczby ze skali źródła: urgent 4 · high 3 · normal 2 · low 1. |
| findings.detail | message | wprost | Tekst dla człowieka. |
| findings.label | labels.lab247_label | labels | DOWN, WARNING, PODATNA… — etykieta z ClickUp, poza schematem. |
| findings.confidence | labels.lab247_confidence | labels | ECS ma pewność tylko dla wskaźników zagrożeń (threat.indicator.confidence), nie dla ustaleń. |
| findings.evidence · effect | lab247.evidence · lab247.effect | własne | Dowód i skutek to nasze pojęcia — własna przestrzeń. |
| vulnerabilities.cve | vulnerability.id · vulnerability.enumeration = CVE | wprost | |
| vulnerabilities.cvss_score · cvss_rating | vulnerability.score.base · vulnerability.severity | wprost | vulnerability.classification = CVSS. |
| vulnerabilities.title | vulnerability.description | wprost | |
| vulnerabilities.cwe | lab247.cwe | własne | ECS nie ma osobnego pola na CWE. |
| vulnerabilities.slug · software_type | package.name · package.type | wprost | Wtyczka, motyw albo rdzeń WordPressa jako pakiet. |
| vulnerabilities.patched_version · remediation | lab247.patched_version · lab247.remediation | własne | Zakres wersji i zalecenie naprawy — poza schematem. |
| site_plugins.slug · version | package.name · package.version | wprost | Inwentarz: event.kind = asset. |
- wprost
- Pole ECS o tym samym znaczeniu; wartość bez zmian.
- przeliczenie
- Wartość trzeba zamienić (jednostka, skala, słownik) — opis w kolumnie Uwaga.
- labels · własne
- ECS nie ma odpowiednika; wartość idzie do labels albo do własnej przestrzeni lab247.*.
{
"@timestamp": "2026-09-26T08:14:03Z",
"ecs": { "version": "9.5.0" },
"message": "Katalog .git dostępny publicznie: /.git/HEAD zwraca 200",
"event": {
"kind": "alert",
"category": ["vulnerability"],
"type": ["info"],
"module": "lab247",
"dataset": "lab247.security",
"action": "exposure_git",
"severity": 4,
"created": "2026-09-26T08:14:05Z",
"start": "2026-09-26T08:14:03Z"
},
"rule": { "id": "exposure_git", "name": "Wystawiony katalog .git" },
"url": { "full": "https://przyklad.pl/.git/HEAD", "domain": "przyklad.pl", "path": "/.git/HEAD" },
"http": { "request": { "method": "GET" }, "response": { "status_code": 200 } },
"observer": { "vendor": "LAB247", "product": "Skaner" },
"vulnerability": { "status": "open" },
"labels": { "lab247_label": "PODATNA", "lab247_confidence": "evident" },
"lab247": { "effect": "podatna", "evidence": "ref: refs/heads/main" }
}Domena i czasy są przykładowe. Pola ECS wystarczają, żeby SIEM znalazł wszystkie wystawione repozytoria jednym zapytaniem (event.kind:alert AND rule.id:exposure_git); nasze pojęcia — etykieta, pewność, dowód — jadą obok, w labels i lab247.*.
| Data | Wersja | Co przyniosła |
|---|---|---|
| 24.05.2018 | 0.1.0 | Pierwsze oznaczone wydanie. |
| 06.03.2019 | 1.0.0 | Pierwsze wydanie stabilne (GA). |
| 22.08.2019 | 1.1.0 | Zestawy hash i dns. |
| 03.10.2019 | 1.2.0 | Zestaw threat — taksonomia zagrożeń dla zdarzeń i alertów. |
| 27.11.2019 | 1.3.0 | Zestaw vulnerability. |
| 25.08.2020 | 1.6.0 | Zestaw x509 (certyfikaty). |
| 10.02.2022 | 8.0.0 | Skok numeru z 1.12 na 8.0 — wersje główne idą odtąd w parze z Elastic Stack. Usunięte m.in. log.original i process.ppid. |
| 17–18.04.2023 | — | Elastic przekazuje ECS do OpenTelemetry; wspólna zapowiedź zbieżności obu schematów. |
| 25.04.2025 | 9.0.0 | Usunięte pola wycofane, awans pól beta do GA; schemat zaczyna opisywać relację pól do OpenTelemetry. |
| 13.08.2025 | 9.1.0 | Zestaw gen_ai (beta), nazwy zgodne z OpenTelemetry. |
| 24.10.2025 | 9.2.0 | Zestaw entity (beta), wartość device w event.type. |
| 19.05.2026 | 9.4.0 | Relacje między bytami, zestaw entity_reference, nowy poziom dojrzałości alpha. |
| 04.08.2026 | 9.5.0 | vulnerability.status (open/fixed/reopened/unknown), host.tags (alpha). |
| kwiecień 2023 | Elastic przekazuje ECS do OpenTelemetry. Cel według OTEP 0199: jeden otwarty standard utrzymywany przez OpenTelemetry, który przejmie ECS w pełnym zakresie — także pola logów i bezpieczeństwa. |
|---|---|
| lipiec 2023 · semconv 1.21 | OpenTelemetry przyjmuje nazwy HTTP z ECS: http.request.method, http.response.status_code, url.full, url.path; atrybuty sieci zamienione na client.*, server.*, network.*. |
| kwiecień 2024 · semconv 1.25 | Reszta pól url.* z ECS. |
| październik 2024 · semconv 1.28 | Dodatkowe pola process.* i file.* z ECS. |
| kwiecień 2025 · ECS 9.0 | Schemat zaczyna opisywać relację pól do OpenTelemetry (match, equivalent, conflict…) — w 9.5 ma ją 195 pól. |
| 2026 · ECS 9.5 | Dokumentacja ECS: przekazanie to „decyzja kierunkowa”, nie jednorazowe połączenie; w części obszarów zbieżność jest nieosiągalna. Porównanie w 9.5 dotyczy semconv 1.38.0 (najnowsza: 1.44.0). |
| Przestrzeń | ECS | OTel | Zgodne | Uwagi |
|---|---|---|---|---|
| url | 14 | 13 | 12 | prawie całość przeszła |
| tls | 29 | 28 | 26 | prawie całość przeszła |
| gen_ai | 32 | 40 | 32 | ECS przejął nazwy OTel |
| file | 24 | 18 | 11 | +7 równoważnych |
| process | 34 | 34 | 15 | +2 równoważne |
| http | 13 | 12 | 1 | +5 równoważnych, 2 pokrewne, 1 konflikt |
| host | 19 | 15 | 5 | 8 jako metryki |
| threat · vulnerability · rule · event · observer | — | — | — | brak odpowiednika w OpenTelemetry |
- match · 140
- ta sama nazwa i znaczenie
- equivalent · 26
- inna nazwa, to samo znaczenie
- metric · 11
- w OTel jako metryka, nie atrybut
- na · 9
- nie dotyczy OTel
- otlp · 7
- pole protokołu OTLP, nie konwencji
- related · 6
- pokrewne, nie identyczne
- conflict · 1
- ta sama nazwa, inne znaczenie
195 z 2614 pól ECS ma w schemacie wpis o relacji do OpenTelemetry — razem 200 wpisów, bo pole może mieć kilka; legenda wyżej liczy wpisy. Najszybciej przeszły pola wspólne dla wszystkich (HTTP, URL, sieć, pliki, procesy); pola bezpieczeństwa zostały tylko w ECS. Brak oficjalnej daty wygaszenia ECS — wersje wychodzą regularnie, ostatnia 04.08.2026.
| LAB247 nie zapisuje dziś danych w ECS | Nasza baza ma własny układ (tabele w TAB. 7). Mapowanie pokazuje, jak rekordy wyglądałyby w ECS przy eksporcie do SIEM albo Elasticsearch — to projekt, nie działająca funkcja. |
| ECS nie przesyła danych | To słownik pól, nie protokół ani format przewodu. Transport zapewnia agent, potok albo OTLP. |
| ECS nie wymusza zgodności | Poza @timestamp i ecs.version wszystko jest zalecane. Dwa systemy „zgodne z ECS” mogą wypełniać zupełnie inne pola — zgodność ocenia się pole po polu. |
| Mapowanie gubi znaczenie | Nasz stan „nie dało się sprawdzić” i „fail” to w event.outcome różne rzeczy tylko wtedy, gdy przechowamy oryginał obok. Każde przeliczenie w TAB. 7 trzeba opisać, inaczej odbiorca czyta inną semantykę. |
| Bezpieczeństwo nie ma odpowiednika w OpenTelemetry | threat, vulnerability i rule istnieją tylko w ECS. Kto dziś modeluje zdarzenia bezpieczeństwa, i tak zostaje przy ECS. |
- Zestaw pól
- Grupa pól o wspólnym prefiksie (ECS: field set). 55 zestawów w pliku ecs_nested.yml v9.5.0; 13 występuje wyłącznie zagnieżdżonych w innych (np. geo, hash, os).
- Pola własne
- Definicje, które zestaw wnosi sam — razem 736, z tego 107 core. Ta liczba zgadza się z zestawieniem Elastic ECS↔OpenTelemetry, co jest niezależną kontrolą przeliczenia.
- Po spłaszczeniu
- Pola pod prefiksem zestawu w ecs_flat.yml, razem z zagnieżdżeniami (np. source.geo.*). Razem 2614: 347 core i 2267 extended. Dla zestawów tylko zagnieżdżanych = 0 — ich pola liczą się u gospodarza.
- Dojrzałość
- Znacznik zestawu. Pojedyncze pola w zestawie GA mogą być beta: w 9.5.0 beta ma 324 pola, alpha 2.
- OpenTelemetry
- 195 pól ma w schemacie wpis o relacji do semconv, razem 200 wpisów (pole może mieć kilka); rozkład wpisów w TAB. 10. Liczby z własnego przeliczenia plików tagu v9.5.0, odczyt 26.09.2026.