Senden Sie IBM Cloud Kubernetes Service Protokolldaten an IBM Cloud Logs

In diesem Tutorial richten Sie IBM Cloud® Kubernetes Service ein, um Protokolle direkt an IBM Cloud Logs zu senden. Diese Protokolle helfen Ihnen, Probleme zu beheben und den Zustand und die Leistung Ihrer Kubernetes Cluster und Anwendungen zu verbessern.

Ziele

In diesem Lernprogramm werden Sie:

  • Stellen Sie den Protokollierungsagent in einem bestehenden IBM Cloud Kubernetes Service-Cluster bereit.

  • Stellen Sie sicher, dass die Protokolldaten zu Ihrer IBM Cloud Logs Instanz fließen.

Vorbereitende Schritte

Bevor Sie beginnen, vergewissern Sie sich, dass Sie über die erforderlichen Voraussetzungen verfügen.

Eine Alternative zur Installation der IBM Cloud CLI, kubectl, jq, und yq wäre die Verwendung der IBM Cloud Shell

Verbinden Sie sich mit Ihrem Cluster

Verbinden Sie sich mit Ihrem IBM Cloud Kubernetes Service cluster. Durch die Verbindung mit dem Cluster können kubectl Befehle auf dem Cluster ausgeführt werden.

  1. Melden Sie sich bei Ihrem IBM Cloud-Konto an. Fügen Sie die Option --sso hinzu, wenn Sie eine föderierte ID verwenden.

    ibmcloud login
    
  2. Installieren Sie das IBM Cloud Kubernetes Service CLI-Plug-in

    ibmcloud plugin install ks
    
  3. Listen Sie die verfügbaren Cluster auf und notieren Sie sich den zu verbindenden Cluster.

    ibmcloud ks clusters
    
  4. Verbinden Sie sich mit Ihrem Cluster. Ersetzen Sie <cluster_name> durch den Namen Ihres Clusters.

    ibmcloud ks cluster config --cluster <cluster_name>
    
  5. Überprüfen Sie, ob Sie mit Ihrem Cluster verbunden sind und kubectl Befehle ausführen können, indem Sie alle Pods auflisten, die in allen Namespaces laufen.

    kubectl get pods --all-namespaces
    

API-Schlüssel erstellen

Bevor Sie den Protokollierungsagent als Daemonset bereitstellen, benötigen Sie einen IAM-API-Schlüssel und einen Endpunkt für den Logging-Ingestion. Die IBM Cloud CLI wird verwendet, um diese Informationen zu erhalten.

Erstellen Sie zunächst eine Service-ID und erhalten Sie einen API-Schlüssel.

  1. Erstellen Sie eine Service-ID, indem Sie den folgenden Befehl ausführen.

    ibmcloud iam service-id-create kubernetes-logs-agent --description "Service ID for sending logs from IKS"
    
  2. Gewähren Sie der erstellten Dienst-ID die Rolle Sender für IBM Cloud Logs, indem Sie den folgenden Befehl ausführen.

    ibmcloud iam service-policy-create kubernetes-logs-agent --service-name logs --roles Sender
    
  3. Erstellen Sie einen IAM-API-Schlüssel, indem Sie den folgenden Befehl ausführen. Sie können den Schlüsselnamen (kubernetes-logs-agent-apikey) und die Beschreibung (--d) bei Bedarf anpassen.

    ibmcloud iam service-api-key-create kubernetes-logs-agent-apikey kubernetes-logs-agent --description "API key for sending logs to the IBM Cloud Logs service"
    

    Der API-Schlüssel wird in der Ausgabe nach API Key zurückgegeben:

    ID            ApiKey-xxxxxxxx-b815-46c7-bc9f-516115bc31c6
    Name          kubernetes-logs-agent-apikey
    Description   API key for sending logs to the IBM Cloud Logs service
    Created At    2024-09-18T17:17+0000
    API Key       <apikey is displayed here>
    Locked        false
    

Hinweis:

  • Jedes Mal, wenn Sie einen API-Schlüssel erstellen, wird ein neues IAM-Geheimnis generiert.

  • Stellen Sie sicher, dass Sie den API-Schlüssel sicher aufbewahren, da er sensible Informationen enthält.

Bestimmen des Endpunkts für die Protokollierung

Die zweite Information, die benötigt wird, ist der Ingestion-Endpunkt für Ihre IBM Cloud Logs-Instanz. Verwenden Sie diesen Befehl, um URL abzurufen:

ibmcloud resource service-instances --service-name logs --long --output JSON | jq '[.[] | {name: .name, id: .id, region: .region_id, ingestion_endpoint: .extensions.external_ingress}]'

Der Endpunkt ist ähnlich wie:

ingestion_endpoint: 3a622101-7521-4002-bf91-8c26e17eedcf.ingress.eu-de.logs.cloud.ibm.com

Erstellung der Agenten-YAML-Datei

In diesem Schritt erstellen Sie die YAML-Datei, die für die Konfiguration des Agenten-Daemonsets verwendet wird.

  1. Erstellen Sie eine Datei namens logs-values.yaml mit folgendem Inhalt:

    Diese Datei enthält die Konfigurationen, die für Ihre Bereitstellung spezifisch sind.

    metadata:
      name: "logs-agent"
    image:
      version: "1.4.0"  # required
    
    clusterName: ""     # Enter the name of your cluster. This information is used to improve the metadata and help with your filtering.
    
    env:
      # ingestionHost is a required field. For example:
      # ingestionHost: "<logs instance>.ingress.us-east.logs.cloud.ibm.com"
      ingestionHost: "" # required
    
      # If you are using private CSE proxy, then use port number "3443"
      # If you are using private VPE Gateway, then use port number "443"
      # If you are using the public endpoint, then use port number "443"
      ingestionPort: "" # required
    
      iamMode: "TrustedProfile"
      # trustedProfileID - trusted profile id - required for iam trusted profile mode
      trustedProfileID: "Profile-yyyyyyyy-xxxx-xxxx-yyyy-zzzzzzzzzzzz" # required if iamMode is set to TrustedProfile
    
  2. Aktualisieren Sie die Felder in der yaml-Datei mit Werten, die für Ihre Umgebung spezifisch sind.

Bereitstellen des Daemonsets

Verwenden Sie den API-Schlüssel, URL und die YAML-Datei, um den Agenten in Ihrem Cluster bereitzustellen.

  1. Melden Sie sich bei der Registrierung Helm an, indem Sie den Befehl helm registry login ausführen:

    helm registry login -u iambearer -p $(ibmcloud iam oauth-tokens --output json | jq -r .iam_token | cut -d " " -f2) icr.io
    

    Windows Windows PowerShell-Benutzer sollten stattdessen diesen Befehl verwenden:

    helm registry login -u iambearer -p ((ibmcloud iam oauth-tokens --output json | ConvertFrom-Json).iam_token -replace 'Bearer ', '') icr.io
    

    Weitere Informationen finden Sie unter Verwendung von Helm in der Container Registry: Diagramme von einer anderen Registry oder einem Helm abrufen.

  2. Setzen Sie den Agenten ein.

    Wenn Sie einen API-Schlüssel mit einer Dienst-ID (iamMode=IAMAPIKey) verwenden, führen Sie den folgenden Befehl aus:

    helm install <install-name> oci://icr.io/ibm/observe/logs-agent-helm --version <chart-version> --values <PATH>/logs-values.yaml -n ibm-observe --create-namespace --set secret.iamAPIKey=<APIKey-value>
    

    Dabei gilt:

    • <install-name> ist der Name der Helm-Installation (logs-agent)
    • <chart-version> ist die Version der Steuerkarte. Die Helm sollte mit der Version des Agent-Images übereinstimmen. Weitere Informationen finden Sie unter Helm.
    • <PATH> ist der Verzeichnispfad, in dem sich die Datei " logs-values.yaml befindet.
    • <APIKey-value> ist der IAM apikey, der mit der in Schritt 1 eingerichteten ServiceID verbunden ist

    Sie können den Agenten auch mit einem vertrauenswürdigen Profil bereitstellen. Weitere Informationen finden Sie unter Bereitstellen des Protokollierungsagenten für Kubernetes mithilfe eines Helm.

Überprüfen Sie, ob die Protokolle gesendet werden

Um sicherzustellen, dass Ihre IBM Cloud® Kubernetes Service Logs erfolgreich nach IBM Cloud Logs fließen, führen Sie die folgenden Schritte durch:

  1. Rufen Sie die IBM Cloud Logs Benutzeroberfläche auf und klicken Sie auf das Livetail Symbol Livetail.

  2. Klicken Sie auf Start, um die Protokolle in Echtzeit zu sehen.

Es sollte ein kontinuierlicher Strom von Protokolldaten aus der Anwendung kube-system zu sehen sein. Diese Protokolle stammen von Ihrem Cluster.