API-Referenz Log Manager

API-Referenz Log Manager

 

Die Schnittstelle unter dem Endpunkt logmanager/ bietet Zugriff auf die im Shopsystem erfassten Logs. Sie ermöglicht das Abrufen einzelner Logs oder ganzer Log-Listen sowie die gezielte Analyse durch Filterung nach Parametern wie Schweregrad, Subshop oder Zeitstempel.

Zusätzlich können Log-Gruppen erstellt und verwaltet werden, um spezifische Filterkriterien zu speichern und Benachrichtigungen bei neuen relevanten Einträgen zu erhalten.

Die API unterstützt damit sowohl die manuelle Analyse als auch eine automatisierte Überwachung von Systemereignissen.

Zur Nutzung der Schnittstellen sind entsprechende Zugriffsrechte erforderlich.

Inhaltsverzeichnis:


1. Unterstützte Methoden

Angabe aller unterstützten Methoden.

Befehl/Info

Endpunkte

GET

POST

PUT

DELETE

Befehl/Info

Endpunkte

GET

POST

PUT

DELETE

Logs

logmanager/logs

Log-Gruppen

logmanager/groups

 

2. Ressourcen: Felder in Logs

2.1 Wichtige Datenfelder in Logs

Logs im System basieren auf Daten aus Elasticsearch und unterliegen daher keiner starren Struktur. Dennoch gibt es zentrale Felder, die in nahezu allen Log-Einträgen vorkommen und für Filter, Sortierung oder Auswertung genutzt werden können.

Die folgende Übersicht listet die wichtigsten dieser Felder:

Name

Typ

Verwendung

Name

Typ

Verwendung

@timestamp

String

Zeitpunkt der Erstellung

_id

String

Eindeutige ID des Logs

app

String

Name des Programms, das das Log generiert hat (z.B. reastapi, shop, statisticAggregator)

logger

String

Name des Loggers, der der Kategorisierung dient (z.B. restapi.controllers.customers)

msg

String

Die Nachricht des Logs

sessionId (optional)

String

Eindeutige ID der Sitzung, in der das Log generiert wurde

severity

String

Schweregrad des Logs, der der Kategorisierung dient.

Mögliche Werte:

debug
info
warn
error
crit

shopId

String

Der technische Name des Shops

stageId (optional)

String

Stage, auf der das Log generierte wurde

subshopId (optional)

String

Subshop, in dem das Log generiert wurde

Hinweis: Weitere Felder können abhängig vom Ursprung und Kontext des Logs vorhanden sein. Die tatsächliche Struktur einzelner Log-Einträge kann abweichen.

Beispiel:

Der folgende Log-Eintrag stammt aus dem System und zeigt typische Felder, wie sie von Elasticsearch geliefert werden. Optional enthaltene Felder wie agent, host oder tags können je nach Ursprung des Logs variieren.

{ "@timestamp": "2025-05-07T06:51:15.148Z", "@version": "1", "_id": "KJGDqZYBCZfVknTATek6", "agent": { "ephemeral_id": "166b1b26-3479-44a0-abd5-01eb97dfde6a", "hostname": "849eec2f201d", "id": "1bac5950-93cd-45c0-83ef-96f0f835523b", "name": "849eec2f201d", "type": "filebeat", "version": "7.17.3" }, "app": "restapi", "ecs": { "version": "1.12.0" }, "host": { "name": "849eec2f201d" }, "hostname": "db762f83481f", "input": { "type": "log" }, "log": { "file": { "path": "/opt/ws/v9-logs/restapi/2025_05_07.log" }, "offset": 4746 }, "logger": "restapi.controller.statistics", "msg": "Failed to get yesterday's active visitors: {\"error\":{\"root_cause\":[{\"type\":\"index_not_found_exception\",\"reason\":\"no such index [visitors]\",\"resource.type\":\"index_or_alias\",\"resource.id\":\"visitors\",\"index_uuid\":\"_na_\",\"index\":\"visitors\"}],\"type\":\"index_not_found_exception\",\"reason\":\"no such index [visitors]\",\"resource.type\":\"index_or_alias\",\"resource.id\":\"visitors\",\"index_uuid\":\"_na_\",\"index\":\"visitors\"},\"status\":404}", "severity": "err", "shopId": "myshop", "tags": [ "v9", "beats_input_raw_event" ] }

 

2.2 Programme, die Logs erzeugen

Das Feld app in einem Logeintrag gibt an, welches Programm oder welcher Dienst das Log erzeugt hat. Die folgende Übersicht listet die möglichen Programme auf, die in der Praxis als app-Wert erscheinen können – inklusive einer kurzen Beschreibung ihrer Aufgabe innerhalb des Shop-Systems.

Werte A - Z (app)

Beschreibung

Werte A - Z (app)

Beschreibung

admin

Backend-Interface für die Shop-Verwaltung

appAutomation

Automatisierungsprozesse im Shop-System

asse

Automatischer Dienst zur Ausführung und Zustellung serverseitiger HTTP-Benachrichtigungen (Asynchronous Server Side Events)

backInStock

Verwaltung von Benachrichtigungen bei wieder verfügbaren Artikeln

cache

Aktualisieren vom Cache

captureExecutor

Verarbeitet automatisch Zahlungs-Capture-Dateien für Bestellungen, führt bei Bedarf Zahlungsaufforderungen an den Zahlungsanbieter durch und verwaltet Wiederholungsversuche sowie Fehlerbehandlung.

categoryProductsRebuilder

Prozess, der Produkte Kategorien mit regelbasierter Produktzuweisung automatisch zuordnet.

configUpdater

Interner Dienst, der auf die Aktualisierung von Konfigurationsdaten reagiert

feedBuilder

Erstellung von Datenfeeds für Exporte und von Sitemaps

garbageCollector

Automatische Bereinigung nicht mehr benötigter Daten

heartbeatChecker

Überwachung von Hintergrundprogrammen

html2mime

Umwandlung von HTML in E-Mails

imageChecker

Prüft, ob es ungenutzte Produktbilder gibt und ob referenzierte Bilder existieren.

imageconverter

Konvertiert Bilder in andere Formate

importer

Import von Daten wie Produkten, Kundendaten etc.

mailbackup

Sicherung versendeter E-Mails

mailer

Versand von E-Mails aus dem System heraus

newsletterSubscribeHelper

Prozess, der Double-Opt-In-E-Mails mit einer Einladung zur Newsletter-Anmeldung versendet.

notificator

Benachrichtigungsdienst für die App

productRatingBackend

Versand von Bewertungsanfragen

restapi

Logs aus der REST-API

searchindexer

Indizierung von Produkten für die Shopsuche

shop

Allgemeiner Shop-Prozess (z. B. Warenkorb, Checkout, Navigation)

spChecker

Mo­ni­to­ring der System-Points-Nutzung

statisticAggregator

Aggregation und Aufbereitung statistischer Daten

templateCompiler

Kompiliert Templates, kann über die REST API gestartet werden

 

3. Methoden für Logs

Über die nachfolgenden Endpunkte lassen sich Log-Einträge aus dem System abrufen. Die Logs enthalten detaillierte Informationen zu Ereignissen im Shop, wie z. B. Fehlermeldungen, Debug-Ausgaben oder sicherheitsrelevante Hinweise.

Einträge können gefiltert und sortiert sowie einzeln nach ihrer ID geladen werden.

Für den Zugriff auf diese Daten sind entsprechende Leseberechtigungen erforderlich.

 

3.1 GET logmanager/logs

Über diesen Endpunkt kann eine Liste mit Logeinträgen abgefragt werden.

Die Ergebnisse lassen sich nach Zeitstempel, Schweregrad (severity), Shop, Subshop, Logger, Session-ID oder weiteren Feldern filtern und sortieren. Standardmäßig wird nach dem Feld @timestamp sortiert. Für die Abfrage kann ein Zeitraum mit filter_gte[createdAt] und filter_lte[createdAt] angegeben werden. Der Zugriff ist auf maximal 300 Einträge pro Anfrage begrenzt, eine Paginierung erfolgt über nextPageToken.

Die maximale Anzahl an Ergebnissen beträgt 10.000 - auch bei Paginierung. Darüber hinausgehende Daten können nicht abgerufen werden.

Zur Verfügung stehen Logs verschiedener Anwendungen (z. B. shop, restapi) und Quellen (z. B. filebeat). Sie enthalten strukturierte Metadaten und Fehlermeldungen, die zur Analyse von Prozessen oder Fehlern im Shop dienen. Um die tatsächlichen Logdateien oder Pfade zu ermitteln, kann das Feld log.file.path genutzt werden.

 

Beispiel

Zugriff auf bis zu 100 Logs aller Art im Zeitraum 2025.03.24–2025.04.24

https://www.<ihr-shop>.de/admin/api/v1/logmanager/logs?size=100&sort=@timestamp:asc&filter_eq[severity]=debug&filter_eq[severity]=info&filter_eq[severity]=warning&filter_eq[severity]=err&filter_eq[severity]=crit&filter_gte[createdAt]=2025-03-24T00:00:00.371Z&filter_lte[createdAt]=2025-04-23T23:59:59.371Z&filter_eq[subshopId]=deutsch

Antwort:

{ "endReached": false, "items": [ { "@timestamp": "2025-04-04T13:41:51.097Z", "@version": "1", "_id": "9e2uHpYBZKNjyb2oXatY", "agent": { "ephemeral_id": "70e334c2-f5ac-4599-aa32-dd5dc7d7551d", "hostname": "9f46d9c66ba8", "id": "1bac5950-93cd-45c0-83ef-96f0f835523b", "name": "9f46d9c66ba8", "type": "filebeat", "version": "7.17.3" }, "app": "shop", "ecs": { "version": "1.12.0" }, "host": { "name": "9f46d9c66ba8" }, "hostname": "f87daf6dd2fe", "input": { "type": "log" }, "log": { "file": { "path": "/opt/ws/v9-logs/shop/2025_04_04.log" }, "offset": 5825 }, "logger": "form", "msg": "Missing recaptcha parameters:\nverifyUrl='https://www.google.com/re...", "sessionId": "973dda5db818b2a57942baed66f27f0939f78ee162b6bb65490e8fea3772791e", "severity": "crit", "shopId": "myshop", "stageId": "3", "subshopId": "deutsch", "tags": [ "v9", "beats_input_raw_event" ] }, { "@timestamp": "2025-04-09T13:17:57.461Z", "@version": "1", "_id": "iu7LHpYBZKNjyb2o-KEm", "agent": { "ephemeral_id": "70e334c2-f5ac-4599-aa32-dd5dc7d7551d", "hostname": "9f46d9c66ba8", "id": "1bac5950-93cd-45c0-83ef-96f0f835523b", "name": "9f46d9c66ba8", "type": "filebeat", "version": "7.17.3" }, "app": "shop", "ecs": { "version": "1.12.0" }, "host": { "name": "9f46d9c66ba8" }, "hostname": "f87daf6dd2fe", "input": { "type": "log" }, "log": { "file": { "path": "/opt/ws/v9-logs/shop/2025_04_09.log" }, "offset": 85186 }, "logger": "product", "msg": "Meta title field of the product is not a string", "sessionId": "269300aab23352c10324f82817bcb12aaf433e325425753b3c89018cee7fc0fd", "severity": "err", "shopId": "myshop", "stageId": "3", "subshopId": "deutsch", "tags": [ "v9", "beats_input_raw_event" ] }, { "@timestamp": "2025-04-03T07:41:46.882Z", "@version": "1", "_id": "Hd7LYZYBUuEsdVP_P_eb", "agent": { "ephemeral_id": "71484722-483c-4c99-9436-b470708d50c7", "hostname": "0d81d1bd24c9", "id": "1bac5950-93cd-45c0-83ef-96f0f835523b", "name": "0d81d1bd24c9", "type": "filebeat", "version": "7.17.3" }, "app": "restapi", "ecs": { "version": "1.12.0" }, "host": { "name": "0d81d1bd24c9" }, "hostname": "2d3c543a9bfd", "input": { "type": "log" }, "log": { "file": { "path": "/opt/ws/v9-logs/restapi/2025_04_03.log" }, "offset": 93145 }, "logger": "data.products.repository", "msg": "Generating XML for combination", "severity": "info", "shopId": "myshop", "stageId": "3", "subshopId": "deutsch", "tags": [ "v9", "beats_input_raw_event" ] } ], "nextPageToken": "MTAw", "totalCount": 10000 }

Filterfelder:

logger (wenn nicht spezifiziert - alle), createdAt (statt @timestamp), weitere Felder eines Logs wie subshopId, severity, app

Sortierfelder:

Es ist möglich, Logs nach unterschiedlichen Feldern zu sortieren (z.B. nach sessionId.keyword), aber standardmäßig wird nur die Sortierung nach @timestamp genutzt.

Fehlercodes:

Fehler

Typ

Grund

Fehler

Typ

Grund

401 Unauthorized

 

Nicht autorisiert: Sie sind nicht angemeldet oder verfügen nicht über die erforderlichen Rechte zum Lesen von Logs .

400 Bad Request

"invalidValue"

size ∉ [1;300]
sort ∉ {"asc", "desc"}
pageToken ist keine Zahl oder kleiner als 0.

400 Bad Request

"invalidCharacters"

size ist keine Ganzzahl.
Ein Filterwert ist ungültig.

400 Bad Request

"unknownDataField"

Ein Filter- oder Sortierfeld ist ungültig.

400 Bad Request

"unknownOperation"

Ein Filtertyp ist ungültig.

400 Bad Request

"syntaxError"

sort enthält mehr als einen oder keinen ":".

503 Service Unavailable

"internalError"

Logs konnten nicht geladen werden.

 

3.2 GET logmanager/logs/{id}

Diese Methode lädt ein einzelnes Log-Ereignis anhand seiner ID.

Es werden alle zugehörigen Felder wie Zeitstempel, Quelle, Schweregrad, Nachricht und Kontextinformationen zurückgegeben.

Für die Nutzung dieser Methode müssen entsprechende Leserechte für Logs vorhanden sein.

Beispiel:

https://www.<ihr-shop>.de/admin/api/v1/logmanager/logs/4-yUHpYBZKNjyb2okM3P

Antwort:

{ "@timestamp": "2025-04-01T15:38:07.934Z", "@version": "1", "agent": { "ephemeral_id": "70e334c2-f5ac-4599-aa32-dd5dc7d7551d", "hostname": "9f46d9c66ba8", "id": "1bac5950-93cd-45c0-83ef-96f0f835523b", "name": "9f46d9c66ba8", "type": "filebeat", "version": "7.17.3" }, "app": "shop", "ecs": { "version": "1.12.0" }, "host": { "name": "9f46d9c66ba8" }, "hostname": "f87daf6dd2fe", "input": { "type": "log" }, "log": { "file": { "path": "/opt/ws/v9-logs/shop/2025_04_01.log" }, "offset": 0 }, "logger": "router", "msg": "Path '/favicon.ico' not known", "sessionId": "8fd2e99fb7fe7da9c35f0685b8381f0ab6ac05ff159a0767e2f3b2e899d7aadf", "severity": "info", "shopId": "myshop", "stageId": "3", "subshopId": "deutsch", "tags": [ "v9", "beats_input_raw_event" ] }

Fehlercodes:

Fehler

Typ

Grund

Fehler

Typ

Grund

401 Unauthorized

 

Nicht autorisiert: Sie sind nicht angemeldet oder verfügen nicht über die erforderlichen Rechte zum Lesen von Logs.

404 Not Found

 

Das Log wurde nicht gefunden.

503 Service Unavailable

"internalError"

Das Log konnte nicht geladen werden.

 

4. Methoden für Log-Gruppen

Über die folgenden Endpunkte lassen sich Log-Gruppen im Shop-System erstellen, abrufen, aktualisieren und löschen. Log-Gruppen definieren, welche Arten von Logs beobachtet werden sollen – z. B. nach Schweregrad, Subshop oder Quelle – und bilden damit die Grundlage für gezielte Auswertungen und Benachrichtigungen.

Zusätzlich können Benachrichtigungseinstellungen einer Gruppe konfiguriert werden, um über neue Log-Einträge regelmäßig informiert zu werden.

Zur Nutzung der Schnittstellen sind entsprechende Rechte zum Verwalten von Logs erforderlich.

 

4.1 GET logmanager/groups

Mit diesem Endpunkt lassen sich Log-Gruppen abfragen. Eine Log-Gruppe bündelt bestimmte Log-Einträge anhand eines konfigurierbaren Filters, z. B. nach Schweregrad oder Zeitraum. Die Ergebnisliste kann über Filter- und Sortierparameter gezielt eingeschränkt werden.

Für den Zugriff auf diese Daten sind entsprechende Leseberechtigungen erforderlich.

Beispiel:

https://www.<ihr-shop>.de/admin/api/v1/logmanager/groups?size=100 &filter_gte[createdAt]=2025-03-25T00:00:00.913Z &filter_lte[createdAt]=2025-04-25T23:59:59.913Z

Antwort:

{ "endReached": true, "items": [ { "createdAt": "2025-04-23T16:03:37.000Z", "description": "myDescription", "filter": { "or": [] }, "id": 4, "name": "myGroup", "notificationId": 3 } ], "nextPageToken": "MA", "totalCount": 1 }

Filterfelder:

id, name, description, notificationId, filter, createdAt

Sortierfelder:

id, name, description, createdAt

Fehlercodes:

Fehler

Typ

Grund

Fehler

Typ

Grund

401 Unauthorized

 

Nicht autorisiert: Sie sind nicht angemeldet oder verfügen nicht über die erforderlichen Rechte zum Lesen von Logs.

400 Bad Request

"invalidValue"

size ∉ [1;300]
sort ∉ {"asc", "desc"}
pageToken ist keine Zahl oder kleiner als 0.

400 Bad Request

"invalidCharacters"

size ist keine Ganzzahl.
Ein Filterwert ist ungültig.

400 Bad Request

"unknownDataField"

Ein Filter- oder Sortierfeld ist ungültig.

400 Bad Request

"unknownOperation"

Ein Filtertyp ist ungültig.

400 Bad Request

"syntaxError"

sort enthält mehr als einen oder keinen ":".

 

4.2 GET logmanager/groups/{id}

Mit diesem Endpunkt kann eine einzelne Log-Gruppe anhand ihrer ID abgerufen werden.

Die Log-Gruppe enthält Metadaten wie Name, Beschreibung, Erstellungszeitpunkt, Filter und einen optionalen Verweis auf eine Benachrichtigungskonfiguration.

Für den Zugriff sind entsprechende Leseberechtigungen erforderlich.

Beispiel:

https://www.<ihr-shop>.de/admin/api/v1/logmanager/groups/4

Antwort:

{ "createdAt": "2025-04-23T16:03:37.000Z", "description": "myDescription", "filter": { "or": [] }, "id": 4, "name": "myGroup", "notificationId": 3 }

Fehlercodes:

Fehler

Typ

Grund

Fehler

Typ

Grund

401 Unauthorized

 

Nicht autorisiert: Sie sind nicht angemeldet oder verfügen nicht über die erforderlichen Rechte zum Lesen von Logs.

400 Bad Request

"invalidValue"

id fehlt oder ist ungültig.

 

4.3 GET logmanager/groups/{id}/logs

Mit diesem Endpunkt kann eine Liste von Logs abgerufen werden, die zu einer bestimmten Log-Gruppe gehören. Die ID der Log-Gruppe muss in der URL übergeben werden.

Die Abfrage unterstützt Filterung, Sortierung sowie die Paginierung über die Parameter from, size, sort und pageToken.

Für den Zugriff müssen entsprechende Leseberechtigungen vorhanden sein.

Beispiel:

https://www.<ihr-shop>.de/admin/api/v1/logmanager/groups/3/logs?size=100 &filter_gte[createdAt]=2025-03-24T00:00:00.186Z &filter_lte[createdAt]=2025-04-25T23:59:59.186Z

Antwort:

{ "endReached": false, "items": [ { "@timestamp": "2025-04-11T09:35:24.646Z", "@version": "1", "_id": "6ckRXZYBlnEc1Y7xhdd4", "agent": { "ephemeral_id": "823e4491-dab9-468c-98d4-d5303323ee16", "hostname": "0d81d1bd24c9", "id": "1bac5950-93cd-45c0-83ef-96f0f835523b", "name": "0d81d1bd24c9", "type": "filebeat", "version": "7.17.3" }, "app": "shop", "ecs": { "version": "1.12.0" }, "host": { "name": "0d81d1bd24c9" }, "hostname": "391a58954768", "input": { "type": "log" }, "log": { "file": { "path": "/opt/ws/v9-logs/shop/2025_04_11.log" }, "offset": 94691 }, "logger": "shop.parseView", "msg": "RenderView Time 72703 us", "sessionId": "b831971cb73728321b979bdd49906512fdc48efd4be5022011abecd4bec9da89", "severity": "debug", "shopId": "myshop", "tags": [ "v9", "beats_input_raw_event" ] }, ... ], "nextPageToken": "MTAw", "totalCount": 10000 }

Fehlercodes:

Fehler

Typ

Grund

Fehler

Typ

Grund

401 Unauthorized

 

Nicht autorisiert: Sie sind nicht angemeldet oder verfügen nicht über die erforderlichen Rechte zum Lesen von Logs.

400 Bad Request

"invalidValue"

size ∉ [1;300]
sort ∉ {"asc", "desc"}
pageToken ist keine Zahl oder kleiner als 0.

400 Bad Request

"invalidCharacters"

size ist keine Ganzzahl.
Ein Filterwert ist ungültig.

400 Bad Request

"unknownDataField"

Ein Filter- oder Sortierfeld ist ungültig.

400 Bad Request

"unknownOperation"

Ein Filtertyp ist ungültig.

400 Bad Request

"syntaxError"

sort enthält mehr als einen oder keinen ":".

404 Not Found

 

Die Log-Gruppe wurde nicht gefunden.

503 Service Unavailable

"internalError"

Logs konnten nicht geladen werden.

 

4.4 GET logmanager/groups/{id}/notifications

Mit diesem Endpunkt können die Benachrichtigungseinstellungen einer bestimmten Log-Gruppe abgerufen werden. Dazu gehören u. a. die Empfänger, der Benachrichtigungszeitraum und der Zeitpunkt des letzten Versands. Die ID der Log-Gruppe muss in der URL übergeben werden.

Für den Zugriff sind entsprechende Leseberechtigungen erforderlich.

Beispiel:

https://www.<ihr-shop>.de/admin/api/v1/logmanager/groups/3/notifications

Antwort:

{ "createdAt": "2025-04-23T15:08:56.000Z", "creator": 1, "enabled": true, "filter": { "or": [] }, "id": 2, "lastSentTimestamp": "2025-04-23T15:08:17.000Z", "logGroupId": 3, "notificationPeriod": 1440, "recipients": { "accounts": [ { "enabled": true, "id": 1 } ], "emails": [] }, "startDate": "2025-04-23T15:08:17.000Z", "subject": "asdf" }

Fehlercodes:

Fehler

Typ

Fehler

Typ

© 2025 WEBSALE AG | Impressum | Datenschutz