Senden von Protokollen über die API
Sie können Protokolle an eine IBM Cloud Logs Instanz senden, indem Sie die Ingestion API verwenden.
Authentifizierung durch Verwendung eines Inhaber-Tokens
Sie müssen ein Zugriffstoken für IBM Cloud® Identity and Access Management (IAM) abrufen, um Ihre Anforderungen zu authentifizieren.
Um Ihr Token mithilfe der IBM Cloud CLI zu erhalten, führen Sie die folgenden Schritte aus:
-
Melden Sie sich bei IBM Cloud an.
Stellen Sie sicher, dass die Entität, mit der Sie sich anmelden, die Rolle '
Senderfür den Dienst IBM Cloud Logs hat. -
Führen Sie den folgenden Befehl aus:
ibmcloud iam oauth-tokens -
Setzen Sie dieses Token in den Authorization-Header der HTTP in der Form Bearer
.
Sie können beispielsweise Ihr IAM-Trägertoken abrufen und als Umgebungsvariable exportieren, wenn Sie den folgenden CLI-Befehl ausführen:
export IAM_TOKEN=`ibmcloud iam oauth-tokens --output json | jq -r '.iam_token'`
Senden von Protokollen mit cURL
In der folgenden Tabelle sind die Endpunktdetails aufgeführt:
| Detail | Wert |
|---|---|
URL |
<INSTANCE_ID>.ingress.<REGION>.logs.cloud.ibm.com/logs/v1/singles |
HTTP Method |
POST |
Header Content-Type |
application/json |
Header Authorization |
Bearer $IAM_TOKEN |
Wo
INSTANCE_ID: GUID der Instanz von IBM Cloud Logs, an die Protokolle gesendet werden sollenREGION: Region, in der sich die Instanz IBM Cloud Logs befindet.IAM_TOKEN: IAM-Trägertoken, das verwendet wird, um die Berechtigung zum Senden an Protokolle anzufordern. Die pemissionlogs.data.sendist erforderlich.
Verwenden Sie den folgenden cURL, um eine Protokollzeile zu senden:
curl -v --location "<INSTANCE_ID>.ingress.<REGION>.logs.cloud.ibm.com/logs/v1/singles" \
--header "Content-Type: application/json" \
--header "Authorization: $IAM_TOKEN" \
--data '[{
"applicationName": "ENTER_APPLICATION_NAME",
"subsystemName": "ENTER_SUBSYSTEM_NAME",
"severity": "ENTER_SEVERITY",
"computerName": "ENTER_VALUE",
"text": ENTER_LOG_LINE,
"category": "ENTER_VALUE",
"className": "ENTER_VALUE",
"methodName": "ENTER_VALUE",
"threadId": "ENTER_VALUE"
}]'
In der folgenden Tabelle sind die JSON-Objekte aufgeführt, die Sie pro Protokollzeile in eine Anforderung einschließen können:
| Eigenschaftsname | Merkmaltyp | Erforderlich | Weitere Informationen |
|---|---|---|---|
applicationName |
string |
Ja | |
subsystemName |
string |
Ja | |
text |
string/json |
Ja | Wenn Sie Ajax oder eine ähnliche Technologie verwenden, müssen Sie die Daten möglicherweise mit JSON.stringify() senden. |
severity |
number |
Nein | 1 – Debug2 – Verbose3 – Info4 – Warn5 – Error6 – CriticalWird kein Wert angegeben, wird 1 – Debug verwendet. |
timestamp |
number |
Nein | UTC-Millisekunden. Wenn keine Angabe gemacht wird, wird die Zeit verwendet, zu der das Protokoll das Gate erreicht. |
computerName |
string |
Nein | |
category |
string |
Nein | |
className |
string |
Nein | |
methodName |
string |
Nein | |
threadId |
string |
Nein | |
hiResTimestamp |
string |
Nein | UTC-Nanosekunden |
Wenn Sie severity nicht angeben, wird Protokollen die Wertigkeit 1 – Debug zugeordnet.
Sie können bis zu 2MB pro Anforderung senden. Dies sind ca. 3.000 mittelgroße Protokolle.
Sie können beispielsweise den folgenden Befehl ausführen, um Protokolle an eine Instanz in der eu-es-Region zu senden:
curl -v --location "https://90d208cc-e1dd-4fb2-a938-358e5996f056.ingress.eu-es.logs.cloud.ibm.com/logs/v1/singles" \
--header "Content-Type: application/json" \
--header "Authorization: $IAM_TOKEN" \
--data '[{
"applicationName": "cs-rest-test3",
"subsystemName": "cs-rest-test3",
"computerName": "computer test3",
"text": {"key":"value","message":"148.145.31.214 - user [24/Oct/2023:15:54:46 +0000] \"PATCH /maximized/Triple-buffered_Managed/core.hmtl HTTP/1.1\" 400 7074 1.666 \"-\" \"Mozilla/5.0 (Macintosh; PPC Mac OS X 10_6_4 rv:6.0) Gecko/1929-02-10 Firefox/37.0\" \"-\"","countryme":"Italy"},
"category": "cat-1",
"className": "class-1",
"methodName": "method-1",
"threadId": "thread-1"
}]'
Die Option -v stellt eine ausführliche Ausgabe bereit, mit deren Hilfe Sie ermitteln können, ob der Befehl erfolgreich ausgeführt wurde oder ob Berechtigungs-oder Konnektivitätsprobleme aufgetreten sind.