Details zu API Gateway
Loggingdetails für API-Gateway-Logs.
Ressourcen
- API-Deployment
Logkategorien
API-Wert (ID): | Konsole (Anzeigename) | Beschreibung |
---|---|---|
Zugriff | Zugriffslogs | Zugriffslogs für ein API-Deployment. |
Ausführung | Ausführungslogs | Ausführungslogs für ein API-Deployment. |
Verfügbarkeit
Zugriffs-/Ausführungslogs für API Gateway sind in allen Regionen der kommerziellen Realms verfügbar.
API-Deployment-Zugriffslog
API-Deployment-Zugriffslogs zeichnen eine Übersicht über jede Anforderung und Antwort auf, die das API-Gateway durchläuft und einer Route im API-Deployment entspricht. Jeder Zugriffslogeintrag enthält Informationen zur Anforderung und Antwort (Zeitpunkt des Eingangs der Anforderung, Serverprotokoll, Antwortstatus usw.). Die vollständige Liste der Felder finden Sie unter Inhalt eines Zugriffslogs.
Inhalt eines Zugriffslogs
Zugriffslogs werden als Wert im Feld Logdaten angezeigt. Bei dem Wert handelt es sich um JSON-formatierte Daten mit den folgenden Feldern:
Feld | Beispiel | Beschreibung |
---|---|---|
httpMethod | GET | Von der Anforderungszeile abgeleitete HTTP-Methode. |
requestUri | /example/ | Von der Anforderungszeile abgeleitete Anforderungs-URI. |
serverProtocol | HTTP/1.1 | Von der Anforderungszeile abgeleitetes HTTP-Protokoll. |
bodyBytesSent | 45 | Gesamtgröße der an den Client gesendeten Antwort (in Byte). |
gatewayId | ocid1.apigateway.oc1.iad.<unique_ID> | OCID des API-Gateways für das API-Deployment, das die Anforderung verarbeitet. |
httpUserAgent | Apache-HttpClient/4.5.9 (Java/1.8.0_252) | HTTP-Benutzer-Agent für die Anforderung. |
message | GET /example/ HTTP/1.1 | Vom Client empfangene Anforderungszeile. |
opcRequestId | FF7F0B8A32246FC7526AE45A2FA8D5CE/ A408784281BF81B0EE23596CE57CA93C/ C06F7DDDFC7C505FAA0566D8F2FE0BB2 |
Wert des HTTP-Headers opc-request-id oder einer intern generierten Anforderungs-ID, wenn keine in der Anforderung angegeben wurde. |
remoteAddr | 138.1.55.172 | IP-Adresse des anfordernden Clients. |
httpReferrer | https://www.example.com | Die URL der Empfehlung, falls vorhanden. |
requestDuration | 0.016 | Gesamte aufgewendete Zeit (in Sekunden, mit Millisekundengenauigkeit) ab dem Zeitpunkt, zu dem das Gateway beginnt, die Anforderung vom Client zu empfangen, bis zum Zeitpunkt, zu dem die Übermittlung der Antwort an den Client abgeschlossen ist. |
status | 404 | Statuscode der Antwort vom Gateway. |
Beispielzugriffslog
{
"httpMethod": "GET",
"requestUri": "/example/",
"serverProtocol": "HTTP/1.1",
"bodyBytesSent": 45,
"gatewayId": "ocid1.apigateway.oc1.iad.<unique_ID>",
"httpUserAgent": "Apache-HttpClient/4.5.9 (Java/1.8.0_252)",
"message": "GET /example/ HTTP/1.1",
"opcRequestId": "FF7F0B8A32246FC7526AE45A2FA8D5CE/A408784281BF81B0EE23596CE57CA93C/C06F7DDDFC7C505FAA0566D8F2FE0BB2",
"remoteAddr": "138.2.05.172",
"requestDuration": 0.016,
"status": 404
}
API-Deployment-Ausführungslog
API-Deployment-Ausführungslogs zeichnen Informationen zur Verarbeitung innerhalb des API-Gateways für eine einzelne Route auf, um die Fehlerbehebung und das Monitoring zu unterstützen. Jeder Ausführungslogeintrag enthält Informationen (Zeitpunkt des Eingangs der Anforderung, Ebene zur Angabe des Schweregrads der Logmeldung, einen Meldungscode usw.). Die vollständige Liste der Felder finden Sie unter Inhalt eines Ausführungslogs.
Inhalt eines Ausführungslogs
Informationen auf Logebene sind standardmäßig aktiviert. Bei dem Wert handelt es sich um JSON-formatierte Daten mit den folgenden Feldern:
Feld | Beispiel | Beschreibung |
---|---|---|
code | request.loopDetected | Kurzcode für das Loggingereignis, das beim Ausführen der Anforderung aufgetreten ist. Eine vollständige Liste der Meldungscodes finden Sie in der Tabelle Logcodes. |
gatewayId | ocid1.apigateway.oc1.iad.<unique_ID> | API-Gateway-OCID für das API-Deployment, das die Anforderung verarbeitet. |
functionId | ocid1.fnfunc.oc1.iad.<unique_ID> | OCID der vom API-Gateway aufgerufenen Funktion. Dieses Feld ist nur für Funktions-Backends vorhanden. |
level | WARN | Logebene für den Ausführungslogeintrag: INFO, WARN oder ERROR. |
message | A request loop has been detected - requests for this gateway are being directed back to this gateway. | Während der Verarbeitung der Anforderung ausgegebene Ausführungsmeldung. |
opcRequestId | FF7F0B8A32246FC7526AE45A2FA8D5CE/ A408784281BF81B0EE23596CE57CA93C/ C06F7DDDFC7C505FAA0566D8F2FE0BB2 |
Wert des HTTP-Headers opc-request-id oder einer intern generierten Anforderungs-ID, wenn keine in der Anforderung angegeben wurde. |
configuredLimit | 5 | Anzahl der Anforderungen, die pro configuredUnit zulässig sind. Entweder das Ratenlimit oder die Quote. |
configuredUnit | MINUTE | Zeitraum, in dem die Anzahl der von configuredLimit angegebenen Anforderungen zulässig ist. Bei Ratenlimits "SECOND". Für Quota "MINUTE", "DAY", "HOUR", "WEEK" oder "MONTH". |
entitlementName | Entitlement1 | Name der Berechtigung, mit der die Anforderung auf das API-Deployment zugreift. |
limitingKey | <timestamp>/ocid1.apigatewayusageplan.oc1.iad.<unique_ID>/<entitlement-name>/ocid1.apigatewaysubscriber.oc1.iad.<unique_ID> | Um die Verwendung für Ratenbegrenzungs- und Quota-Zwecke zu berechnen, werden Anforderungen mit demselben Schlüssel zusammen gezählt. |
limitingResourceId | ocid1.apigatewayusageplan.oc1.iad.<unique_ID> | OCID des Nutzungsplans, der für den Zugriff auf das API-Deployment verwendet wird. |
limitingResourceName | Gold-Nutzungs-Plan | Name des Nutzungsplans, der für den Zugriff auf das API-Deployment verwendet wird. |
secretId | ocid1.secret.oc1.iad.<unique_ID> | OCID eines Vault Secrets, das das API-Gateway abzurufen versucht. |
secretVersion | 1 | Versionsnummer eines Vault Secrets, das das API-Gateway abzurufen versucht. |
subscriberId | ocid1.apigatewaysubscriber.oc1.iad.<unique_ID> | OCID des Subscribers. |
subscriberName | Premium-Abonnent | Anzeigename des Abonnenten. |
Logcodes
Logcode | Beschreibung |
---|---|
authentication.idpCallFailed | Beim Aufrufen des Identitätsproviders OAuth2 ist ein Fehler aufgetreten. |
authentication.idpCallSuccess | Der Identitätsprovider OAuth2 wurde erfolgreich aufgerufen. |
authentication.idpTokenExpiryNonNumeric | Der OAuth2-Identitätsprovider hat kein gültiges Ablaufdatum zurückgegeben. |
authentication.validationFailurePolicyOAuth | Die Validierungsfehler-Policy OAuth2 wurde ausgelöst. |
authentication.validationFailurePolicyOAuthStepFailed | Beim Ausführen der Schritte der Validierungsfehler-Policy OAuth2 ist ein Fehler aufgetreten. |
authorization.unauthorizedRequest | Autorisierung für die Anforderung nicht erfolgreich. |
customAuthentication.authenticationFailed | Benutzerdefinierte Authentifizierung nicht erfolgreich. |
customAuthentication.cacheMiss | Die benutzerdefinierte Autorisiererantwort wurde im Cache nicht gefunden. |
customAuthentication.failedFunctionInvocation | Oracle-Funktion konnte nicht aufgerufen werden. |
customAuthentication.successfulAuthentication | Benutzerdefinierte Authentifizierung erfolgreich. |
customAuthentication.successfulFunctionInvocation | Die Oracle-Funktion wurde erfolgreich aufgerufen. |
customAuthentication.unexpectedResponse | Unerwartete Antwort von der Oracle-Funktion. |
dynamicAuthentication.authenticationServerMatched | Der ausgewählte Kontextvariablenwert entspricht einer der Authentifizierungsserverregeln. |
dynamicAuthentication.defaultAuthenticationServerMatched | Der ausgewählte Kontextvariablenwert entsprach keiner der Authentifizierungsserverregeln, es wurde jedoch ein Standardauthentifizierungsserver angegeben, der für die Authentifizierung verwendet wurde. |
dynamicAuthentication.jwtTokenInvalid | Die ausgewählte Kontextvariable war request.auth[claimName], aber ein ungültiges JWT-Token wurde mit der Anforderung gesendet. |
dynamicAuthentication.jwtTokenNotFound | Die ausgewählte Kontextvariable war request.auth[claimName], aber es wurde kein JWT-Token mit der Anforderung gesendet. |
dynamicAuthentication.noAuthenticationServerMatched | Der ausgewählte Kontextvariablenwert entsprach keiner der Authentifizierungsserverregeln, und es wurde kein Standardauthentifizierungsserver angegeben. |
dynamicRouting.backendMatched | Die Anforderung stimmt mit einer Backend-Regel überein und wurde an das zugehörige Backend weitergeleitet. |
dynamicRouting.backendRejected | Die Anforderung war nicht erfolgreich, weil die Anforderung keiner Backend-Regel entsprach und keine Standardregel definiert wurde. |
dynamicRouting.defaultBackendMatched | Die Anforderung stimmte nicht mit einer Backend-Regel überein und wurde daher an das mit der Standardregel verknüpfte Backend weitergeleitet. |
functionBackend.badGateway | "Bad Gateway" beim Aufruf der Funktion in OCI Functions empfangen |
functionBackend.badRequestHeaderValue | Ungültiger Wert für Anforderungsheader. |
functionBackend.badRequestHeaders | Fehlerhafter Anforderungsheader. |
functionBackend.badResponse | Funktion hat fehlerhafte Antwort zurückgegeben. Dies deutet auf eine falsch geformte Antwort von der Funktion hin. |
functionBackend.internalServiceError | Interner Servicefehler beim Aufrufen der Funktion in OCI Functions |
functionBackend.notFoundOrNotAuthorized | Die Funktion in OCI Functions konnte aufgrund von 404 nicht vom OCI Functions-Service aufgerufen werden. |
functionBackend.rateLimited | Begrenzte Rate beim Aufruf der Funktion in OCI Functions |
functionBackend.serviceUnavailable | OCI Functions-Service nicht verfügbar. |
functionBackend.successfulRequest | Erfolgreicher Aufruf der Funktion in OCI Functions |
functionBackend.timeout | Timeout beim Aufruf der Funktion in OCI Functions. |
headerTransformation.badHeaderValue | Ungültiger Wert für Anforderungsheader. |
headerTransformation.missingSetValues | Fehlender Wert für die Settransformations-Policy. |
headerTransformation.protectedHeaderTransformed | Die Policy hat versucht, einen geschützten Header zu transformieren. |
httpBackend.formedBackendUrl | Die HTTP-Backend-URL wurde dynamisch mit Kontextvariablen gebildet. |
httpBackend.requestError | Fehler beim Erstellen der Anforderung an das HTTP-Backend. |
httpBackend.requestSent | Anforderung an das HTTP-Backend gesendet. |
httpBackend.responseBodyError | Beim Lesen des Antworttexts aus dem HTTP-Backend ist ein Fehler aufgetreten. |
httpBackend.responseReceived | Antwort vom HTTP-Backend empfangen. |
httpBackend.urlInvalid | Die HTTP-Backend-URL ist ungültig. |
jwtAuthentication.authenticationFailed | JWT-Authentifizierung nicht erfolgreich. |
jwtAuthentication.badJsonWebKeySet | JSON Web Key Set ist nicht gültig. |
jwtAuthentication.loadingJsonWebKeySet | JSON Web Key Set wird geladen. |
jwtAuthentication.successfulAuthentication | JWT-Authentifizierung erfolgreich. |
logoutBackend.invalidAuthentication | Abmeldepfad stimmt nicht überein. |
logoutBackend.logoutError | Im Backend der OAuth2-Abmeldung ist ein Fehler aufgetreten. |
logoutBackend.redirectError | Die Umleitungs-URL nach der Abmeldung war nicht zulässig. |
mutualTls.clientCertificateInvalid | Das Clientzertifikat fehlt oder ist ungültig. |
mutualTls.clientCertificateSanInvalid | Die im Clientzertifikat enthaltenen SANs konnten nicht validiert werden. |
queryParameterTransformation.badParameterValue | Ungültiger Wert für Anforderungsabfrageparameter. |
rateLimiting.requestDenied | Die Anforderung wurde von der Ratenbegrenzungsrichtlinie abgelehnt. |
rateLimiting.requestPermitted | Die Anforderung wurde von der Ratenbegrenzungs-Policy zugelassen. |
request.bodyTooLarge | Der Anforderungsbody war zu groß. |
request.clientCertConversionFailed | Das Clientzertifikat konnte nicht in einen Zeichenfolgenwert konvertiert werden. |
request.clientEof | Eine Anforderung konnte aufgrund eines Clientfehlers nicht gelesen werden. |
request.clientTimeout | Eine Anforderung konnte aufgrund eines Clienttimeouts nicht gelesen werden. |
request.internalServiceError | Interner Servicefehler. |
request.loopDetected | Es wurde eine Anforderungsschleifenbedingung erkannt, bei der Anforderungen für das Gateway an dieses selbst umgeleitet werden, wodurch ein Zyklus entsteht. |
request.possibleLoopDetected | Es wurde eine mögliche Anforderungsschleifenbedingung erkannt, bei der Anforderungen für das Gateway an dieses selbst umgeleitet werden, wodurch ein Zyklus entsteht. |
request.serviceUnavailable | Das Gateway kann die Anforderung derzeit nicht bearbeiten. |
requestValidation.validationError | Anforderung hat eine Validierungs-Policy nicht erfüllt. |
requestValidation.validationPermitted | Anforderung hat eine Validierungs-Policy bestanden. |
responseCache.backendResponseStorageAborted | Backend-Antwort wurde nicht im Cache gespeichert. |
responseCache.backendResponseStoredInCache | Backend-Antwort wurde im Cache gespeichert. |
responseCache.lookupAborted | Der Antwortcache wurde nicht verwendet. |
responseCache.lookupResultNotFound | Im Cache wurde keine Antwort gefunden. |
responseCache.lookupResultSuccess | Eine Antwort wurde aus dem Cache gelesen. |
secretsClient.fetchFailure | Client Secret konnte nicht aus Secret Service abgerufen werden. |
secretsClient.fetchSuccess | Client Secret wurde erfolgreich aus Secret Service abgerufen. |
secretsClient.unexpectedResponse | Unerwartete Antwort vom Secret-Service beim Abrufen des Client Secret. |
tokenAuthentication.authenticationFailed | Tokenauthentifizierung nicht erfolgreich. |
tokenAuthentication.badDiscoveryEndpointResponse | Die Antwort des Remote-Discovery-Endpunkts ist nicht gültig. |
tokenAuthentication.badIntrospectionResponse | Die Token-Introspektionsantwort ist nicht gültig. |
tokenAuthentication.badJsonWebKeySet | JSON Web Key Set ist nicht gültig. |
tokenAuthentication.loadingDiscoveryEndpointResponse | Remote Discovery-Dokument wird geladen. |
tokenAuthentication.loadingJsonWebKeySet | JSON Web Key Set wird geladen. |
tokenAuthentication.successfulAuthentication | Tokenauthentifizierung erfolgreich. |
usePlans.eligibilityNotEntitled | Das API-Deployment ist nicht das Ziel einer Berechtigung in einem Nutzungsplan, obwohl die API-Deployment-Spezifikation eine Nutzungsplananforderungs-Policy enthält, die ein Clienttoken angibt. |
usePlans.requestBreachedButAllowed | Die Anforderung war zulässig, obwohl die maximale Anzahl von Anforderungen, die von einer Nutzungsplanberechtigung angegeben wurden, überschritten wurde. |
usePlans.requestPermitted | Anforderung eines Nutzungsplan-Abonnenten war zulässig. |
usePlans.requestAbgelehnt | Anforderung eines Nutzungsplan-Abonnenten wurde abgelehnt. |
Beispielausführungslogs
- Typ: Anforderung
- Szenario: Anforderungsschleife erkannt
- Beschreibung: Es wurde eine Anforderungsschleifenbedingung erkannt, bei der Anforderungen für das Gateway an dieses selbst umgeleitet werden, wodurch ein Zyklus entsteht.
- Beispiel:
{ "code": "request.loopDetected", "gatewayId": "ocid1.apigateway.oc1.iad.<unique_ID>", "level": "WARN", "message": "A request loop has been detected - requests for this gateway are being directed back to this gateway.", "opcRequestId": "FF7F0B8A32246FC7526AE45A2FA8D5CE/A408784281BF81B0EE23596CE57CA93C/C06F7DDDFC7C505FAA0566D8F2FE0BB2", }