IBM Cloud Kubernetes ServiceログデータをIBM Cloud Logsに送る

このチュートリアルでは、IBM Cloud® Kubernetes Serviceを設定して、IBM Cloud Logsに直接ログを送信します。 これらのログは、問題をトラブルシューティングし、 Kubernetes クラスタとアプリケーションの健全性とパフォーマンスを向上させるのに役立ちます。

目標

このチュートリアルでは

開始前に

始める前に、前提条件が揃っていることを確認してください。

  • IBM Cloud® Kubernetes Service を作成し、IBM Cloud Logs のインスタンスをプロビジョニングします。

  • IBM Cloud CLI をインストールします。

  • Kubernetes コマンドラインツール、kubectl をインストールします。

  • JSON CLI プロセッサ (jq) をインストールします。

  • YAML CLIプロセッサをインストールする (yq).

IBM Cloud CLI, kubectl, jq, yq をインストールする代わりに、IBM Cloud Shell を使うこともできます

クラスタに接続する

IBM Cloud Kubernetes Service クラスタに接続する。 クラスタに接続すると、kubectl コマンドをクラスタで実行できるようになります。

  1. IBM Cloud アカウントにログインします。 連携IDを使用している場合は、 --sso オプションを含める。

    ibmcloud login
    
  2. IBM Cloud Kubernetes Service CLIプラグインをインストールする

    ibmcloud plugin install ks
    
  3. 利用可能なクラスタをリストアップし、接続するクラスタをメモする。

    ibmcloud ks clusters
    
  4. クラスタに接続します。 <cluster_name> をクラスタ名に置き換えてください。

    ibmcloud ks cluster config --cluster <cluster_name>
    
  5. すべてのネームスペースで実行されているすべてのポッドを一覧表示して、クラスタに接続されていて、kubectl コマンドを実行できることを確認します。

    kubectl get pods --all-namespaces
    

API 鍵の作成

デーモンセットとしてロギング・エージェントをプロビジョニングする前に、IAM APIキーとロギング取り込みエンドポイントが必要です。 IBM CloudCLIを使用してこの情報を取得します。

まず、サービスIDを作成し、APIキーを取得する。

  1. 以下のコマンドを実行して、サービスID を作成する。

    ibmcloud iam service-id-create kubernetes-logs-agent --description "Service ID for sending logs from IKS"
    
  2. 以下のコマンドを実行して、作成したサービスIDにIBM Cloud Logs の Sender ロールを付与します。

    ibmcloud iam service-policy-create kubernetes-logs-agent --service-name logs --roles Sender
    
  3. 以下のコマンドを実行して、IAM APIキーを作成する。 必要に応じて、キー名(kubernetes-logs-agent-apikey)と説明(--d)をカスタマイズできます。

    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"
    

    APIキーは API Key に続く出力で返されます:

    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
    

注:

  • APIキーを作成するたびに、新しいIAMシークレットが生成される。

  • APIキーには機密情報が含まれているため、安全に保管してください。

ロギングのエンドポイントを決定する

2番目に必要な情報は、IBM Cloud Logsインスタンスの取り込みエンドポイントです。 このコマンドを使用して URL を取得します

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

エンドポイントは似ている:

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

エージェントYAMLファイルの作成

このステップでは、エージェント・デーモンセットを構成するために使用するYAMLファイルを作成します。

  1. 以下の内容で、 logs-values.yaml という名前のファイルを作成する:

    このファイルには、配置に固有の設定が含まれています。

    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. yamlファイルのフィールドを、あなたの環境に固有の値で更新する。

デーモンセットのデプロイ

APIキー、 URL、およびYAMLファイルを使用して、クラスタにエージェントをデプロイします。

  1. helm registry login コマンドを実行して、 Helm レジストリにログインする:

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

    Windows Windows PowerShell ユーザーは、代わりに次のコマンドを使用してください

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

    詳細は「Helmチャートを 'Container Registry で使用する : 他のレジストリや 'Helmリポジトリからチャートを引き出す 参照。

  2. エージェントを展開する。

    サービスIDのAPIキー(iamMode=IAMAPIKey )を使用している場合は、以下のコマンドを実行してください:

    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>
    

    ここで、

    • <install-name> Helm のインストール( )の名前です。logs-agent
    • <chart-version> はヘルムチャートのバージョン。 Helmチャートのバージョンは、エージェント・イメージのバージョンと一致している必要があります。 詳しくは Helmのチャートバージョン を参照。
    • <PATH> は 'logs-values.yaml ファイルがあるディレクトリパスである。
    • <APIKey-value> は、ステップ1で設定した ServiceIDに関連する IAM apikey です

    信頼されたプロファイルを使用してエージェントを配置することもできます。 詳細については、Helmチャートを使用したKubernetesクラスタ用のLoggingエージェントのデプロイ を参照してください。

ログが送信されていることを確認する

IBM Cloud® Kubernetes Serviceのログが正常にIBM Cloud Logsに流れるようにするには、以下の手順を実行します:

  1. IBM Cloud Logs UI にアクセスし、Livetailアイコン Livetail をクリックします。

  2. Start をクリックすると、到着したログをリアルタイムで見ることができます。

kube-system アプリケーションからの連続したログデータの流れが見えるはずです。 これらのログはクラスタからのものです。