すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:インストールと設定

最終更新日:Oct 30, 2026

LoongCollector は、Alibaba Cloud の Simple Log Service (SLS) 向けの次世代ログ収集エージェントであり、Logtail をアップグレードして機能を強化したものです。Kubernetes クラスターに DaemonSet またはサイドカーモードでインストールできます。

前提条件

LoongCollector をインストールする前に、クラスターノードと Simple Log Service のサーバー側エンドポイント間のネットワーク接続を確認してください。ログ収集でデータをレポートするには、ノードがそのエンドポイントに到達できる必要があります。

  1. サービスエンドポイントの取得:

    1. Simple Log Service コンソールにログインします。プロジェクトリストで、対象のプロジェクトをクリックします。

    2. プロジェクト名の横にある image アイコンをクリックして、プロジェクトの概要ページを開きます。

    3. 基本情報セクションで、プロジェクトのリージョンに対応するパブリックエンドポイントと内部エンドポイントを確認します。

  2. 接続性テストの実行: LoongCollector をインストールするクラスターノードにログインし、次の curl コマンドを実行します。${ProjectName} と ${SLS_ENDPOINT} を実際の値に置き換えてください。

    curl https://${ProjectName}.${SLS_ENDPOINT}
  3. テスト結果の確認:

    • コマンドが {"Error":{"Code":"OLSInvalidMethod",...}} を返した場合、ノードは Simple Log Service へのネットワーク接続が確立されています。

      説明

      このテストはネットワーク層の接続性のみを検証します。リクエストに必要な API パラメーターが不足しているため、このエラー応答は想定内の動作です。

    • コマンドがタイムアウトするか、Connection refused などの他のネットワーク層エラーを返す場合は、ノードのネットワーク設定、セキュリティグループルール、または DNS 解決を確認してください。

インストール方法

クラスターのタイプと要件に基づいてインストール方法を選択してください。

インストール方法

利用シーン

ACK クラスターへのインストール (DaemonSet モード)

同一の Alibaba Cloud アカウントおよびリージョン内の ACK マネージドクラスターおよび専用クラスターからログを収集します。

セルフマネージドクラスターへのインストール (DaemonSet モード)

  • 異なる Alibaba Cloud アカウントまたはリージョンにまたがる ACK クラスターからログを収集します。

  • セルフマネージドデータセンター内の Kubernetes クラスターからログを収集します。

  • 他のクラウドプロバイダー上の Kubernetes クラスターからログを収集します。

サイドカーモードでのインストール

以下を必要とする特定のアプリケーションからログを収集します:

  • リソースの分離:DaemonSet エージェントがノード上の他の Pod に影響を与えるのを防ぎます。

  • 詳細な収集:アプリケーションごとに個別の収集ソース、フィルタリングルール、および出力先を設定する機能。

ACK クラスターへのインストール (DaemonSet モード)

Container Service for Kubernetes (ACK) コンソールでワンクリックで LoongCollector をインストールできます。デフォルトでは、LoongCollector はコンテナログを収集し、同じ Alibaba Cloud アカウントおよびリージョン内のプロジェクトに送信します。アカウントやリージョンをまたいでログを収集するには、「セルフマネージドクラスターへのインストール (DaemonSet モード)」をご参照ください。

既存の ACK マネージドクラスターへのインストール

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。

  2. クラスターリスト ページで、クラスターの名前をクリックします。左側のナビゲーションウィンドウで、 [コンポーネントとアドオン] をクリックします。

  3. タブで、loongcollector を見つけ、インストール をクリックします。

  4. インストール後、Simple Log Service (SLS) は ACK クラスターのリージョンに次のリソースを自動的に作成します。これらは Simple Log Service (SLS) コンソールで確認できます。

    リソースタイプ

    リソース名

    目的

    プロジェクト

    k8s-log-${cluster_id}

    異なるサービスのログを分離します。

    マシングループ

    k8s-group-${cluster_id}

    loongcollector-ds のマシングループで、ログ収集に使用されます。

    k8s-group-${cluster_id}-cluster

    loongcollector-cluster のマシングループで、メトリック収集に使用されます。

    k8s-group-${cluster_id}-singleton

    特定の単一インスタンス収集設定用のマシングループ。

    重要

    LoongCollector コンポーネントは config-operation-log という名前の LogStore を作成しません。この LogStore が既に存在する場合、LoongCollector はそこにログを書き込みません。

ACK マネージドクラスター作成時のインストール

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。

  2. クラスターの作成 をクリックします。コンポーネント設定 ページで、Log Service の使用 チェックボックスを選択します。その後、[新しいプロジェクトを作成] または [既存のプロジェクトを使用] を選択できます。

    このトピックでは、Simple Log Service (SLS) の設定のみを説明します。他の設定項目に関する詳細については、「ACK マネージドクラスターの作成」をご参照ください。
  3. プロジェクトの作成 を選択すると、SLS は自動的に次のリソースを作成します。これらは Simple Log Service (SLS) コンソールで確認できます。

    リソースタイプ

    リソース名

    目的

    プロジェクト

    k8s-log-${cluster_id}

    異なるサービスのログを分離します。

    マシングループ

    k8s-group-${cluster_id}

    loongcollector-ds のマシングループで、ログ収集に使用されます。

    k8s-group-${cluster_id}-cluster

    loongcollector-cluster のマシングループで、メトリック収集に使用されます。

    k8s-group-${cluster_id}-singleton

    特定の単一インスタンス収集設定用のマシングループ。

    重要

    LoongCollector コンポーネントは config-operation-log という名前の LogStore を作成しません。この LogStore が既に存在する場合、LoongCollector はそこにログを書き込みません。

セルフマネージドクラスターへのインストール (DaemonSet モード)

ユースケース

  • セルフマネージドデータセンター内の Kubernetes クラスター

  • 他のクラウドプロバイダーにデプロイされた Kubernetes クラスター

  • 異なる Alibaba Cloud アカウントまたはリージョンにある ACK クラスターからコンテナログを収集

説明

セルフマネージドクラスターで Kubernetes 1.6 以降が実行されていることを確認してください。

操作手順

  1. インストールパッケージのダウンロードと展開: kubectl がインストールおよび設定されているマシンから、クラスターのリージョンに対応するコマンドを実行して、LoongCollector とその依存関係をダウンロードします。

    # 中国リージョン
    wget https://aliyun-observability-release-cn-shanghai.oss-cn-shanghai.aliyuncs.com/loongcollector/k8s-custom-pkg/3.2.6/loongcollector-custom-k8s-package.tgz; tar xvf loongcollector-custom-k8s-package.tgz; chmod 744 ./loongcollector-custom-k8s-package/k8s-custom-install.sh
    # 中国本土以外のリージョン
    wget https://aliyun-observability-release-ap-southeast-1.oss-ap-southeast-1.aliyuncs.com/loongcollector/k8s-custom-pkg/3.2.6/loongcollector-custom-k8s-package.tgz; tar xvf loongcollector-custom-k8s-package.tgz; chmod 744 ./loongcollector-custom-k8s-package/k8s-custom-install.sh
  2. 設定ファイル values.yaml の変更: loongcollector-custom-k8s-package ディレクトリに移動し、./loongcollector/values.yaml 設定ファイルを変更します。

    パラメーター

    values.yaml

    # ===================== 必須パラメーター =====================
    # このクラスターのログ収集用のプロジェクト名。 例: k8s-log-custom-sd89ehdq
    projectName: ""
    # プロジェクトのリージョン。 例 (上海): cn-shanghai
    region: ""
    # プロジェクトを所有する Alibaba Cloud アカウントの ID。 ID は引用符で囲んでください。 例: "123456789"
    aliUid: ""
    # 使用するネットワーク。 オプション: Internet (パブリックネットワーク) または Intranet (内部ネットワーク)。 デフォルト: Internet
    net: Internet
    # Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID と AccessKey Secret。
    accessKeyID: ""
    accessKeySecret: ""
    # カスタムクラスター ID。 ID には、大文字、小文字、数字、ハイフン (-) を使用できます。
    clusterID: ""
    
    # ... オプションのパラメーターは省略 ...

    projectName String (必須)

    LoongCollector がログをアップロードするプロジェクトの名前。 名前は次のルールに従う必要があります:

    • 小文字、数字、ハイフン (-) のみを含める必要があります。

    • 小文字で始まり、小文字または数字で終わる必要があります。

    • 長さは 3~63 文字である必要があります。

    region String (必須)

    プロジェクトのリージョン ID。 リージョン ID のリストについては、「リージョン」をご参照ください。

    aliUid String (必須)

    プロジェクトを所有する Alibaba Cloud アカウントの ID。

    net String (必須)

    ログデータ転送用のネットワークタイプ。

    • Internet (デフォルト): パブリックネットワーク。

    • Intranet: 内部ネットワーク。

    accessKeyID  String (必須)

    プロジェクトへのアクセスに使用する AccessKey ID。 RAM ユーザーの AccessKey ペアを使用することを推奨します。 RAM ユーザーに AliyunLogFullAccess システム権限ポリシーを付与してください。 RAM の詳細については、「概要」をご参照ください。

    accessKeySecret String (必須)

    AccessKey ID に対応する AccessKey Secret。

    clusterID String (必須)

    クラスターのカスタム ID。 ID には、大文字、小文字、数字、ハイフン (-) のみを含める必要があります。

    重要

    異なる Kubernetes クラスターに同じクラスター ID を割り当てないでください。

  3. インストールスクリプトの実行: loongcollector-custom-k8s-package ディレクトリで、次のコマンドを実行して LoongCollector とその依存関係をインストールします。

    bash k8s-custom-install.sh install
  4. インストールの確認: インストールが完了したら、次のコマンドを実行して Pod のステータスを確認します:

    # Pod ステータスの確認
    kubectl get po -n kube-system | grep loongcollector-ds

    出力例:

    loongcollector-ds-gnmnh   1/1     Running   0    63s

    Pod の起動に失敗した場合 (ステータスが Running ではない場合):

    1. 設定の確認: values.yaml のパラメーターが正しいことを確認します。

    2. イメージの確認: 次のコマンドを実行し、出力の Events セクションを確認して、コンテナイメージが正常にプルされたことを確認します。

      kubectl describe pod loongcollector-ds -n kube-system
  5. LoongCollector がインストールされると、Simple Log Service は次のリソースを自動的に作成します。 これらは Simple Log Service コンソールで確認できます。

    リソースタイプ

    リソース名

    説明

    プロジェクト

    values.yaml ファイルに指定されている projectName の値。

    異なるサービスのログを分離するリソース管理ユニット。

    マシングループ

    k8s-group-${cluster_id}

    ログを収集するすべてのノードを含むマシングループ。

    k8s-group-${cluster_id}-cluster

    loongcollector-cluster 用のマシングループ。 主にメトリック収集に使用されます。

    k8s-group-${cluster_id}-singleton

    特定の収集設定用の単一インスタンスのマシングループ。

    重要

    LoongCollector は config-operation-log という名前の Logstore を作成しません。 この Logstore がすでに存在する場合、LoongCollector はログを書き込みません。

サイドカーモードでのインストール

サイドカーモードは、専用の LoongCollector (Logtail) コンテナをアプリケーション Pod に注入し、その Pod からのログを専門に収集することで機能します。このパターンは、きめ細かなログ管理、マルチテナント分離、またはログ収集とアプリケーションライフサイクルの緊密な連携が必要な場合に最適です。アプリケーションをまだデプロイしていない場合や、プロセスをテストしたい場合は、付録:YAML の例 を使用してワークフローを迅速に検証できます。

1. Pod の YAML 設定の変更

  1. 共有ボリュームの定義

     spec.template.spec.volumes に、containers と同じレベルで 3 つの共有ボリュームを追加します。

    volumes:
      # 共有ログディレクトリ (アプリケーションコンテナが書き込み、サイドカーが読み取る)
      - name: ${shared_volume_name} # <-- 名前は volumeMounts の名前と一致させる必要があります
        emptyDir: {}
      # コンテナ間通信用のシグナルディレクトリ (グレースフルな起動/停止のため)
      - name: tasksite
        emptyDir:
          medium: Memory  # パフォーマンス向上のため、媒体としてメモリを使用
          sizeLimit: "50Mi"
      # 共有ホストタイムゾーン設定:Pod 内のすべてのコンテナのタイムゾーンを同期
      - name: tz-config # <-- 名前は volumeMounts の名前と一致させる必要があります
        hostPath:
          path: /usr/share/zoneinfo/Asia/Shanghai  # 必要に応じてタイムゾーンを変更
    
  2. アプリケーションコンテナのマウント設定

    your-business-app-container などのアプリケーションコンテナの volumeMounts セクションに、次のボリュームマウントを追加します。

    LoongCollector がログを収集できるように、アプリケーションコンテナがログを ${shared_volume_path} ディレクトリに書き込むようにしてください。
    volumeMounts:
      # 共有ログボリュームをアプリケーションのログ出力ディレクトリにマウント
      - name: ${shared_volume_name}
        mountPath: ${shared_volume_path}  # 例:/var/log/app
      # 通信ディレクトリをマウント
      - name: tasksite
        mountPath: /tasksite  # LoongCollector コンテナとの通信用共有ディレクトリ
      # タイムゾーンファイルをマウント
      - name: tz-config
        mountPath: /etc/localtime
        readOnly: true
    
  3. LoongCollector サイドカーコンテナの注入

    spec.template.spec.containers 配列に、次のサイドカーコンテナ定義を追加します。

    - name: loongcollector
      image: aliyun-observability-release-registry.cn-shenzhen.cr.aliyuncs.com/loongcollector/loongcollector:v3.1.1.0-20fa5eb-aliyun
      command: ["/bin/bash", "-c"]
      args:
        - |
          echo "[$(date)] LoongCollector: 初期化を開始しています"
          # LoongCollector サービスを開始
          /etc/init.d/loongcollectord start
          # 設定がダウンロードされ、サービスが準備完了するのを待機
          sleep 15
          # サービスステータスを確認
          if /etc/init.d/loongcollectord status; then
            echo "[$(date)] LoongCollector: サービスの起動に成功しました"
            touch /tasksite/cornerstone
          else
            echo "[$(date)] LoongCollector: サービスの起動に失敗しました"
            exit 1
          fi
          # アプリケーションコンテナが完了するのを待機 (tombstone ファイルシグナル経由)
          echo "[$(date)] LoongCollector: アプリケーションコンテナの完了を待機しています"
          until [[ -f /tasksite/tombstone ]]; do
            sleep 2
          done
          # 残りのログをアップロードするための時間を確保
          echo "[$(date)] LoongCollector: ビジネス処理が完了しました。ログ転送を待機しています"
          sleep 30
          # サービスを停止
          echo "[$(date)] LoongCollector: サービスを停止しています"
          /etc/init.d/loongcollectord stop
          echo "[$(date)] LoongCollector: シャットダウンが完了しました"
      # ヘルスチェック
      livenessProbe:
        exec:
          command: ["/etc/init.d/loongcollectord", "status"]
        initialDelaySeconds: 30
        periodSeconds: 10
        timeoutSeconds: 5
        failureThreshold: 3
      # リソース設定
      resources:
        requests:
          cpu: "100m"
          memory: "128Mi"
        limits:
          cpu: "2000m"
          memory: "2048Mi"
      # 環境変数設定
      env:
        - name: ALIYUN_LOGTAIL_USER_ID
          value: "${your_aliyun_user_id}"
        - name: ALIYUN_LOGTAIL_USER_DEFINED_ID
          value: "${your_machine_group_user_defined_id}"
        - name: ALIYUN_LOGTAIL_CONFIG
          value: "/etc/ilogtail/conf/${your_region_config}/ilogtail_config.json"
        # Pod が終了する前にすべてのログが送信されるように、フルドレインモードを有効化
        - name: enable_full_drain_mode
          value: "true"  
        # Pod の環境情報をログタグとして追加
        - name: ALIYUN_LOG_ENV_TAGS
          value: "_pod_name_|_pod_ip_|_namespace_|_node_name_|_node_ip_"
        # Pod とノードのメタデータをログタグとして自動的に注入
        - name: "_pod_name_"
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: "_pod_ip_"
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
        - name: "_namespace_"
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: "_node_name_"
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName
        - name: "_node_ip_"
          valueFrom:
            fieldRef:
              fieldPath: status.hostIP
      # ボリュームマウント (アプリケーションコンテナと共有)
      volumeMounts:
        # アプリケーションログディレクトリの読み取り専用マウント
        - name: ${shared_volume_name} # <-- 共有ログディレクトリ名
          mountPath: ${dir_containing_your_files} # <-- サイドカー内の共有ディレクトリへのパス
          readOnly: true
        # 通信ディレクトリをマウント
        - name: tasksite
          mountPath: /tasksite
        # タイムゾーンをマウント
        - name: tz-config
          mountPath: /etc/localtime
          readOnly: true
    

2. アプリケーションコンテナのライフサイクルロジックの調整

ワークロードタイプに応じて、アプリケーションコンテナを変更し、サイドカーとの協調的な終了をサポートします。

短期タスク (Job/CronJob)

# 1. LoongCollector の準備が完了するのを待機
echo "[$(date)] アプリケーション: LoongCollector の準備完了を待機しています..."
until [[ -f /tasksite/cornerstone ]]; do
  sleep 1
done
echo "[$(date)] アプリケーション: LoongCollector の準備が完了しました。アプリケーションロジックを開始します"
# 2. コアアプリケーションロジックを実行 (ログが共有ディレクトリに書き込まれることを確認)
echo "Hello, World!" >> /app/logs/business.log
# 3. 終了コードを保存
retcode=$?
echo "[$(date)] アプリケーション: タスクは終了コード $retcode で完了しました"
# 4. アプリケーションタスクが完了したことを LoongCollector に通知
touch /tasksite/tombstone
echo "[$(date)] アプリケーション: Tombstone が作成されました。終了します"
exit $retcode

長期サービス (Deployment / StatefulSet)

# シグナルハンドラ関数を定義
_term_handler() {
    echo "[$(date)] [nginx-demo] SIGTERM をキャッチしました。グレースフルシャットダウンを開始します..."
    # グレースフルに停止させるために Nginx に QUIT シグナルを送信
    if [ -n "$NGINX_PID" ]; then
        kill -QUIT "$NGINX_PID" 2>/dev/null || true
        echo "[$(date)] [nginx-demo] Nginx (PID: $NGINX_PID) に SIGQUIT を送信しました"
        # Nginx がグレースフルに停止するのを待機
        wait "$NGINX_PID"
        EXIT_CODE=$?
        echo "[$(date)] [nginx-demo] Nginx は終了コード $EXIT_CODE で停止しました"
    fi
    # アプリケーションコンテナが停止したことを LoongCollector に通知
    echo "[$(date)] [nginx-demo] tombstone ファイルを書き込んでいます"
    touch /tasksite/tombstone
    exit $EXIT_CODE
}
# シグナルハンドラを登録
trap _term_handler SIGTERM SIGINT SIGQUIT
# LoongCollector の準備が完了するのを待機
echo "[$(date)] [nginx-demo]: LoongCollector の準備完了を待機しています..."
until [[ -f /tasksite/cornerstone ]]; do 
    sleep 1
done
echo "[$(date)] [nginx-demo]: LoongCollector の準備が完了しました。アプリケーションロジックを開始します"
# Nginx を開始
echo "[$(date)] [nginx-demo] Nginx を開始しています..."
nginx -g 'daemon off;' &
NGINX_PID=$!
echo "[$(date)] [nginx-demo] Nginx は PID: $NGINX_PID で開始されました"
# Nginx プロセスを待機
wait $NGINX_PID
EXIT_CODE=$?
# シグナルが原因で終了しなかった場合も LoongCollector に通知
if [ ! -f /tasksite/tombstone ]; then
    echo "[$(date)] [nginx-demo] 予期せぬ終了です。tombstone を書き込んでいます"
    touch /tasksite/tombstone
fi
exit $EXIT_CODE

3. 終了猶予期間の設定

spec.template.spec で、LoongCollector が残りのすべてのログをアップロードできるのに十分な長さの終了猶予期間を設定します。

spec:
  # ... その他の既存の spec 設定 ...
  template:
    spec:
      terminationGracePeriodSeconds: 600  # 10分間のグレースフル停止期間

4. 変数

パラメーター

説明

${your_aliyun_user_id}

ご利用の Alibaba Cloud アカウントの ID。ユーザー識別子の設定をご参照ください。

${your_machine_group_user_defined_id}

マシングループを作成するために使用されるカスタム識別子。例:nginx-log-sidecar。

重要

この識別子がプロジェクトのリージョン内で一意であることを確認してください。

${your_region_config}

SLS プロジェクトのリージョンとネットワークアクセスタイプに対応する設定。サービスリージョンをご参照ください。

例:プロジェクトが中国 (杭州) リージョンにある場合、Alibaba Cloud 内部ネットワークアクセスには cn-hangzhou を、パブリックネットワークアクセスには cn-hangzhou-internet を使用します。

${shared_volume_name}

共有ボリュームのカスタム名。

重要

volumeMounts の name は volumes の name と一致させる必要があります。これにより、両方のコンテナが同じ共有ボリュームをマウントすることが保証されます。

${dir_containing_your_files}

LoongCollector コンテナ内でテキストログが配置されているマウントパス。

5. 設定の適用と検証

  1. 次のコマンドを実行して変更をデプロイします。

    kubectl apply -f <YOUR-YAML>
  2. Pod のステータスを確認し、LoongCollector コンテナが正常に注入されたことを確認します。

    kubectl describe pod <YOUR-POD-NAME>

    2 つのコンテナ (アプリケーションコンテナと loongcollector) が表示され、それらのステータスが Running であれば、注入は成功です。

6. カスタム識別子ベースのマシングループの作成

  1. Simple Log Service コンソールにログインし、対象のプロジェクトをクリックします。

  2. 左側のナビゲーションバーで、image[リソース] > マシングループを選択し、マシングループ の右側にある machine group > マシングループの作成 をクリックします。

  3. マシングループの作成 ダイアログボックスで、次のパラメーターを設定し、OK をクリックします。

    • 名前:マシングループの名前。作成後にこの名前は変更できません。名前は次の要件を満たす必要があります。

      • 小文字、数字、ハイフン (-)、アンダースコア (_) のみを含めることができます。

      • 小文字または数字で開始および終了する必要があります。

      • 長さは 2~128 文字である必要があります。

    • マシングループの識別子:ユーザー定義 ID を選択します。

    • ユーザー定義 ID:「1. Pod の YAML 設定の変更」の YAML ファイルで LoongCollector コンテナに設定した ALIYUN_LOGTAIL_USER_DEFINED_ID 環境変数の値を入力します。これは完全に一致させる必要があります。そうでなければ、関連付けは失敗します。

  4. マシングループのハートビートを確認するには、新しく作成したマシングループの名前をクリックし、マシングループのステータス領域を見つけます。

    • OK:LoongCollector が Simple Log Service に正常に接続し、マシングループが登録されたことを示します。

    • FAIL:

各 Pod には専用の LoongCollector インスタンスがあります。きめ細かな管理を行うために、アプリケーションや環境ごとに異なるカスタム識別子を使用することを推奨します。

よくある質問

ACK マネージドクラスターの LoongCollector 構成を変更して、アカウントまたはリージョンをまたいでログを収集するにはどうすればよいですか。

Alibaba Cloud の ACK コンソールから loongcollector をインストールした場合、デフォルトでは、コンテナログは同じ Alibaba Cloud アカウント内の Simple Log Service プロジェクトに収集されます。アカウントまたはリージョンをまたいでログを収集するには、次のいずれかの方法を使用します。

方法 1:アンインストールと再インストール

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。

  2. クラスターリスト ページで、クラスターの名前をクリックし、左側のナビゲーションウィンドウで [コンポーネントとアドオン] をクリックします。

  3. [タブ] で、 loongcollector を見つけ、アンインストール をクリックします。

  4. 「セルフマネージドクラスターへのインストール (DaemonSet モード)」の説明に従ってコンポーネントを再インストールします。

方法 2:Helm 構成を更新して loongcollector を再デプロイする

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、適用 > Helm を選択します。

  2. Helm アプリケーション管理ページで、loongcollector を探し、[アクション] 列で 更新 をクリックします。リリースのアップデート ページで、次の表に従って構成を変更し、他の構成は変更せずに OK をクリックします。

    クラスターとプロジェクト

    パラメーター

    同一アカウント、別リージョン

    region:送信先プロジェクトが配置されているリージョンの リージョン ID。

    net:値を Internet に設定します。内部ネットワーク経由で異なるリージョン間でデータを転送することはできません。

    別アカウント、同一リージョン

    aliUid:送信先プロジェクトを所有する Alibaba Cloud アカウントのアカウント ID。複数のアカウント ID はカンマで区切ります。

    net:値を Intranet に設定します。同一リージョン内でのデータ転送には、内部ネットワークの使用を推奨します。

    別アカウント、別リージョン

    aliUid:送信先プロジェクトを所有する Alibaba Cloud アカウントのアカウント ID。複数のアカウント ID はカンマで区切ります。

    region:送信先プロジェクトが配置されているリージョンの リージョン ID。

    net:値を Internet に設定します。内部ネットワーク経由で異なるリージョン間でデータを転送することはできません。

  3. マシングループの作成:

    1. Simple Log Service コンソールにログインし、ターゲットプロジェクトをクリックします。

    2. 左側のナビゲーションウィンドウで、image[リソース] > >  > マシングループを選択します。マシングループの右側で、machine group > >  > マシングループの作成をクリックします。

    3. マシングループの作成 ダイアログボックスで、次のパラメーターを設定し、OK をクリックします。

      1. マシングループの名前を入力します。

      2. [マシン グループ識別子] には、ユーザー定義 ID を選択します。

      3. [カスタム識別子] に、k8s-group-${cluster_id} を入力します。${cluster_id} をご利用のクラスターの clusterID の値に置き換えます。

    4. マシングループが作成されたら、リストで見つけて名前をクリックします。 サーバグループ設定 > >  > サーバグループのステータス セクションで、ハートビート のステータスを確認します。 ステータスが OK の場合、接続が成功したことを示します。 ハートビートが失敗した場合、ユーザー識別子とカスタム識別子が正しいことを確認します。

  4. 構成を変更した後、[更新] をクリックします。


ACK Edge、ACK One、ACS、ACK Serverless クラスターからコンテナログを収集するにはどうすればよいですか。

LoongCollector コンポーネントの projectName パラメーターを変更するにはどうすればよいですか。

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[アプリケーション] > [Helm] を選択します。

  2. Helm アプリケーション管理ページで loongcollector を見つけ、[アクション] 列の [更新] をクリックして、リリースの更新ページに移動します。

  3. 対象の Helm チャートのパラメーター構成 (Values) セクションで、projectName パラメーター (ルートレベルのフィールド) を変更して、[OK] をクリックします。

説明

補足:環境変数を設定する際に、ALICLOUD_LOG_PROJECT が明示的に指定されていない場合、システムはインストールコマンドで渡された Project パラメーターをデフォルト値として使用し、そのプロジェクト配下に LoongCollector 関連の構成とクラスターのデフォルトマシングループを自動的に作成します。

次のステップ

LoongCollector をインストールした後、「Kubernetes クラスターからのコンテナログ収集のガイドライン」をご参照いただき、コンテナログ収集の基本原則、プロセス、ベストプラクティスについて理解を深めてください。その後、次のいずれかの方法で収集設定を作成します。

付録:YAML の例

この例では、アプリケーションコンテナ (Nginx) と LoongCollector サイドカーコンテナを含む完全な Kubernetes デプロイメント構成を示します。これを使用して、サイドカーモードでコンテナログを収集します。

この構成を使用する前に、次の置き換えを行います:

  1. ${your_aliyun_user_id} をご利用の Alibaba Cloud アカウントの UID に置き換えます。

  2. ${your_machine_group_user_defined_id} を手順 3 で作成したマシングループのカスタム ID に置き換えます。ID は完全に一致する必要があります。

  3. ${your_region_config} を、ご利用の Log Service (SLS) プロジェクトのリージョンとネットワークタイプに一致する構成名に置き換えます。

    例:プロジェクトが中国 (杭州) リージョンにある場合、内部ネットワークアクセスには cn-hangzhou を、パブリックネットワークアクセスには cn-hangzhou-internet を使用します。

短期タスク (Job/CronJob)

apiVersion: batch/v1
kind: Job
metadata:
  name: demo-job
spec:
  backoffLimit: 3                   
  activeDeadlineSeconds: 3600        
  completions: 1                     
  parallelism: 1                    
  template:
    spec:
      restartPolicy: Never         
      terminationGracePeriodSeconds: 300 
      containers:
        # アプリケーションコンテナ
        - name: demo-job
          image: debian:bookworm-slim
          command: ["/bin/bash", "-c"]
          args:
            - |
              # LoongCollector の準備が完了するまで待機します。
              echo "[$(date)] Business: Waiting for LoongCollector to be ready..."
              until [[ -f /tasksite/cornerstone ]]; do 
                sleep 1
              done
              echo "[$(date)] Business: LoongCollector is ready, starting business logic"
              # アプリケーションロジックを実行します。
              echo "Hello, World!" >> /app/logs/business.log
              # 終了コードを保存します。
              retcode=$?
              echo "[$(date)] Business: Task completed with exit code: $retcode"
              # タスクが完了したことを LoongCollector に通知します。
              touch /tasksite/tombstone
              echo "[$(date)] Business: Tombstone created, exiting"
              exit $retcode
          # リソースのリクエストと制限
          resources:
            requests:
              cpu: "100m"
              memory: "128Mi"
            limits:
              cpu: "500"
              memory: "512Mi"
          # ボリュームマウント
          volumeMounts:
            - name: app-logs
              mountPath: /app/logs
            - name: tasksite
              mountPath: /tasksite
        # LoongCollector サイドカーコンテナ
        - name: loongcollector
          image: aliyun-observability-release-registry.cn-hongkong.cr.aliyuncs.com/loongcollector/loongcollector:v3.1.1.0-20fa5eb-aliyun
          command: ["/bin/bash", "-c"]
          args:
            - |
              echo "[$(date)] LoongCollector: Starting initialization"
              # LoongCollector サービスを開始します。
              /etc/init.d/loongcollectord start
              # 構成がダウンロードされ、サービスが準備完了になるまで待機します。
              sleep 15
              # サービスステータスを確認します。
              if /etc/init.d/loongcollectord status; then
                echo "[$(date)] LoongCollector: Service started successfully"
                touch /tasksite/cornerstone
              else
                echo "[$(date)] LoongCollector: Failed to start service"
                exit 1
              fi
              # アプリケーションコンテナが終了するまで待機します。
              echo "[$(date)] LoongCollector: Waiting for business container to complete"
              until [[ -f /tasksite/tombstone ]]; do 
                sleep 2
              done
              echo "[$(date)] LoongCollector: Business completed, waiting for log transmission"
              # 残りのログを送信するために十分な時間を確保します。
              sleep 30
              echo "[$(date)] LoongCollector: Stopping service"
              /etc/init.d/loongcollectord stop
              echo "[$(date)] LoongCollector: Shutdown complete"
          # ヘルスチェック
          livenessProbe:
            exec:
              command: ["/etc/init.d/loongcollectord", "status"]
            initialDelaySeconds: 30
            periodSeconds: 10
            timeoutSeconds: 5
            failureThreshold: 3
          # リソースのリクエストと制限
          resources:
            requests:
              cpu: "100m"
              memory: "128Mi"
            limits:
              cpu: "500m"
              memory: "512Mi"
          # 環境変数
          env:
            - name: ALIYUN_LOGTAIL_USER_ID
              value: "your-user-id"
            - name: ALIYUN_LOGTAIL_USER_DEFINED_ID
              value: "your-user-defined-id"
            - name: ALIYUN_LOGTAIL_CONFIG
              value: "/etc/ilogtail/conf/cn-hongkong/ilogtail_config.json"
            - name: ALIYUN_LOG_ENV_TAGS
              value: "_pod_name_|_pod_ip_|_namespace_|_node_name_"
            # Pod メタデータを挿入します。
            - name: "_pod_name_"
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: "_pod_ip_"
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
            - name: "_namespace_"
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
            - name: "_node_name_"
              valueFrom:
                fieldRef:
                  fieldPath: spec.nodeName
          # ボリュームマウント
          volumeMounts:
            - name: app-logs
              mountPath: /app/logs
              readOnly: true
            - name: tasksite
              mountPath: /tasksite
            - name: tz-config
              mountPath: /etc/localtime
              readOnly: true
      # ボリューム定義
      volumes:
        - name: app-logs
          emptyDir: {}
        - name: tasksite
          emptyDir:
            medium: Memory
            sizeLimit: "10Mi"
        - name: tz-config
          hostPath:
            path: /usr/share/zoneinfo/Asia/Shanghai

長期サービス (Deployment / StatefulSet)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-demo
  namespace: production
  labels:
    app: nginx-demo
    version: v1.0.0
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1      
      maxSurge: 1          
  selector:
    matchLabels:
      app: nginx-demo
  template:
    metadata:
      labels:
        app: nginx-demo
        version: v1.0.0    
    spec:
      terminationGracePeriodSeconds: 600  # 10 分間のグレースフルシャットダウン期間
      containers:
        # アプリケーションコンテナ - Web アプリケーション
        - name: nginx-demo
          image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6          
          # 起動コマンドとシグナルハンドリング
          command: ["/bin/sh", "-c"]
          args:
            - |
              # シグナルハンドラを定義します。
              _term_handler() {
                  echo "[$(date)] [nginx-demo] Caught SIGTERM, starting graceful shutdown..."
                  # グレースフルストップのために Nginx に QUIT シグナルを送信します。
                  if [ -n "$NGINX_PID" ]; then
                      kill -QUIT "$NGINX_PID" 2>/dev/null || true
                      echo "[$(date)] [nginx-demo] Sent SIGQUIT to Nginx PID: $NGINX_PID"
                      # Nginx がグレースフルに停止するのを待ちます。
                      wait "$NGINX_PID"
                      EXIT_CODE=$?
                      echo "[$(date)] [nginx-demo] Nginx stopped with exit code: $EXIT_CODE"
                  fi
                  # アプリケーションコンテナが停止したことを LoongCollector に通知します。
                  echo "[$(date)] [nginx-demo] Writing tombstone file"
                  touch /tasksite/tombstone
                  exit $EXIT_CODE
              }
              # シグナルハンドラを登録します。
              trap _term_handler SIGTERM SIGINT SIGQUIT
              # LoongCollector の準備が完了するまで待機します。
              echo "[$(date)] [nginx-demo]: Waiting for LoongCollector to be ready..."
              until [[ -f /tasksite/cornerstone ]]; do 
                sleep 1
              done
              echo "[$(date)] [nginx-demo]: LoongCollector is ready, starting business logic"
              # Nginx を起動します。
              echo "[$(date)] [nginx-demo] Starting Nginx..."
              nginx -g 'daemon off;' &
              NGINX_PID=$!
              echo "[$(date)] [nginx-demo] Nginx started with PID: $NGINX_PID"
              # Nginx プロセスが終了するのを待ちます。
              wait $NGINX_PID
              EXIT_CODE=$?
              # プロセスがシグナルなしで終了した場合、LoongCollector に通知します。
              if [ ! -f /tasksite/tombstone ]; then
                  echo "[$(date)] [nginx-demo] Unexpected exit, writing tombstone"
                  touch /tasksite/tombstone
              fi
              exit $EXIT_CODE
          # リソースのリクエストと制限
          resources:
            requests:
              cpu: "200m"
              memory: "256Mi"
            limits:
              cpu: "1000m"
              memory: "1Gi"
          # ボリュームマウント
          volumeMounts:
            - name: nginx-logs
              mountPath: /var/log/nginx
            - name: tasksite
              mountPath: /tasksite
            - name: tz-config
              mountPath: /etc/localtime
              readOnly: true
        # LoongCollector サイドカーコンテナ
        - name: loongcollector
          image: aliyun-observability-release-registry.cn-shenzhen.cr.aliyuncs.com/loongcollector/loongcollector:v3.1.1.0-20fa5eb-aliyun
          command: ["/bin/bash", "-c"]
          args:
            - |
              echo "[$(date)] LoongCollector: Starting initialization"
              # LoongCollector サービスを開始します。
              /etc/init.d/loongcollectord start
              # 構成がダウンロードされ、サービスが準備完了になるまで待機します。
              sleep 15
              # サービスステータスを確認します。
              if /etc/init.d/loongcollectord status; then
                echo "[$(date)] LoongCollector: Service started successfully"
                touch /tasksite/cornerstone
              else
                echo "[$(date)] LoongCollector: Failed to start service"
                exit 1
              fi
              # アプリケーションコンテナが終了するまで待機します。
              echo "[$(date)] LoongCollector: Waiting for business container to complete"
              until [[ -f /tasksite/tombstone ]]; do 
                sleep 2
              done
              echo "[$(date)] LoongCollector: Business completed, waiting for log transmission"
              # 残りのログを送信するために十分な時間を確保します。
              sleep 30
              echo "[$(date)] LoongCollector: Stopping service"
              /etc/init.d/loongcollectord stop
              echo "[$(date)] LoongCollector: Shutdown complete"
          # ヘルスチェック
          livenessProbe:
            exec:
              command: ["/etc/init.d/loongcollectord", "status"]
            initialDelaySeconds: 30
            periodSeconds: 10
            timeoutSeconds: 5
            failureThreshold: 3
          # リソースのリクエストと制限
          resources:
            requests:
              cpu: "100m"
              memory: "128Mi"
            limits:
              cpu: "2000m"
              memory: "2048Mi"
          # 環境変数
          env:
            - name: ALIYUN_LOGTAIL_USER_ID
              value: "${your_aliyun_user_id}"
            - name: ALIYUN_LOGTAIL_USER_DEFINED_ID
              value: "${your_machine_group_user_defined_id}"
            - name: ALIYUN_LOGTAIL_CONFIG
              value: "/etc/ilogtail/conf/${your_region_config}/ilogtail_config.json"
            # Pod が停止したときにすべてのログを送信するフルドレインモードを有効にします。
            - name: enable_full_drain_mode
              value: "true"
            # Pod 環境情報をログタグとして追加します。
            - name: "ALIYUN_LOG_ENV_TAGS"
              value: "_pod_name_|_pod_ip_|_namespace_|_node_name_|_node_ip_"
            # Pod とノード情報を取得します。
            - name: "_pod_name_"
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: "_pod_ip_"
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
            - name: "_namespace_"
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
            - name: "_node_name_"
              valueFrom:
                fieldRef:
                  fieldPath: spec.nodeName
            - name: "_node_ip_"
              valueFrom:
                fieldRef:
                  fieldPath: status.hostIP
          # ボリュームマウント
          volumeMounts:
            - name: nginx-logs
              mountPath: /var/log/nginx
              readOnly: true
            - name: tasksite
              mountPath: /tasksite
            - name: tz-config
              mountPath: /etc/localtime
              readOnly: true
      # ボリューム定義
      volumes:
        - name: nginx-logs
          emptyDir: {}
        - name: tasksite
          emptyDir:
            medium: Memory
            sizeLimit: "50Mi"
        - name: tz-config
          hostPath:
            path: /usr/share/zoneinfo/Asia/Shanghai

参考

リージョン

  1. Simple Log Service (SLS) コンソールにログインします。 プロジェクトリストで、目的のプロジェクトをクリックします。

  2. プロジェクト名の横にある image アイコンをクリックして、プロジェクトの概要ページに移動します。

  3. 「基本情報」セクションで、現在のプロジェクトのリージョン名を表示します。 次の表は、リージョン名と対応するリージョン ID を示しています。

    リージョンとは、クラウドサービスの物理データセンターの地理的な場所です。 リージョン ID は、その一意の識別子です。

    リージョン名

    リージョン ID

    中国 (青島)

    cn-qingdao

    中国 (北京)

    cn-beijing

    中国 (張家口)

    cn-zhangjiakou

    中国 (フフホト)

    cn-huhehaote

    中国 (ウランチャブ)

    cn-wulanchabu

    中国 (杭州)

    cn-hangzhou

    中国 (上海)

    cn-shanghai

    中国 (深セン)

    cn-shenzhen

    中国 (河源)

    cn-heyuan

    中国 (広州)

    cn-guangzhou

    フィリピン (マニラ)

    ap-southeast-6

    韓国 (ソウル)

    ap-northeast-2

    マレーシア (クアラルンプール)

    ap-southeast-3

    日本 (東京)

    ap-northeast-1

    タイ (バンコク)

    ap-southeast-7

    中国 (成都)

    cn-chengdu

    シンガポール

    ap-southeast-1

    インドネシア (ジャカルタ)

    ap-southeast-5

    中国 (香港)

    cn-hongkong

    ドイツ (フランクフルト)

    eu-central-1

    米国 (バージニア)

    us-east-1

    米国 (シリコンバレー)

    us-west-1

    イギリス (ロンドン)

    eu-west-1

    UAE (ドバイ)

    me-east-1

    SAU (リヤド)

    me-central-1

LoongCollector のネットワーク転送タイプ

エンドポイントは SLS のアクセスドメイン名です。 プロジェクトとそのログデータにアクセスするために使用される URL です。 エンドポイントは、プロジェクトが配置されているリージョンに固有です。 SLS は、プライベートエンドポイント、パブリックエンドポイント、および転送アクセラレーションエンドポイントを提供します。 エンドポイントは、次の手順で表示します。

  1. SLS コンソールにログインします。 プロジェクトリストで、対象のプロジェクトをクリックします。

  2. プロジェクト名の右側にある image アイコンをクリックして、プロジェクトの概要ページに移動します。

  3. 「アクセスエンドポイント」セクションで、現在のプロジェクトのエンドポイント情報を表示します。 ネットワーク転送方式が異なれば、対応するエンドポイントも異なります。 適切なネットワーク転送方式を選択することで、より高速で安定したログデータ転送を実現できます。

ネットワークタイプ

対応するエンドポイントタイプ

説明

シナリオ

Alibaba Cloud 内部ネットワーク

プライベートエンドポイント

Alibaba Cloud 内部ネットワークは、ギガビット共有ネットワークです。 内部ネットワーク経由でのログデータの転送は、パブリックインターネット経由よりも高速で安定しています。 内部ネットワークには、VPC とクラシックネットワークが含まれます。

ECS インスタンスと SLS プロジェクトが同じリージョンにある場合、またはオンプレミスサーバーを内部ネットワークに接続している場合。

説明

ECS インスタンスと同じリージョンに SLS プロジェクトを作成してください。 これにより、パブリック帯域幅を消費することなく、Alibaba Cloud 内部ネットワーク経由で ECS インスタンスからログを収集できます。

パブリックインターネット

パブリックエンドポイント

パブリックインターネット経由でログデータを転送する場合、データ収集の速度と安定性は、帯域幅制限、ネットワークジッター、遅延、パケット損失の影響を受ける可能性があります。

次の 2 つのケースでは、パブリックインターネット経由でデータを転送します。

  • ECS インスタンスと SLS プロジェクトが異なるリージョンにある。

  • サーバーが別のクラウドプロバイダーまたはオンプレミスデータセンターでホストされている。

転送アクセラレーション

転送アクセラレーションエンドポイント

Alibaba Cloud CDN のエッジノードを使用してログ収集を高速化すると、パブリックインターネット経由の収集と比較して、ネットワーク遅延と安定性の点で大きな利点がありますが、トラフィックには追加料金が発生します。

アプリケーションサーバーと SLS プロジェクトがそれぞれ中国リージョンと国際リージョンにある場合、パブリックインターネット経由でデータを転送すると、高い遅延と不安定性を引き起こす可能性があります。 この場合は、転送アクセラレーションを使用してデータを転送します。 詳細については、「転送アクセラレーション」をご参照ください。

LoongCollector の実行モード

属性

DaemonSet モード

Sidecar モード

デプロイ方法

各ノードに 1 つの収集コンテナをデプロイします。

各 Pod に 1 つの収集コンテナをデプロイします。

リソース消費

低 (ノードリソースを共有)

高 (各 Pod が独立してリソースを消費)

ユースケース

統一されたノードレベルのログ収集

特定のアプリケーションのための分離されたログ収集

分離

ノードレベルの共有

Pod レベルの独立性

DaemonSet モードの仕組み

各ノードに LoongCollector エージェントをデプロイして、そのノード上のすべてのコンテナからログを収集します。 簡単な操作、低いリソース消費、柔軟な構成を提供しますが、テナント分離は弱くなります。

  • DaemonSet モードでは、Kubernetes は各ノードで LoongCollector コンテナを 1 つだけ実行し、そのノード上のすべてのコンテナからログを収集します。

  • Kubernetes は、ノードがクラスターに参加または離脱する際に LoongCollector コンテナを自動的に作成および削除するため、手動でのインスタンス管理が不要になります。

Sidecar モードの仕組み

各 Pod のアプリケーションコンテナと一緒に LoongCollector サイドカーを注入します。 アプリケーションのログディレクトリは Kubernetes ボリューム (emptyDir、hostPath、または PVC) を介して共有され、LoongCollector がログファイルを直接読み取れるようにします。 強力なテナント分離と高性能を提供しますが、より多くのリソースを消費します。

  • Sidecar モードでは、各 Pod が専用の LoongCollector コンテナを実行します。 ログ収集は Pod 間で分離されます。

  • ログファイルにアクセスするには、共有ボリュームをアプリケーションコンテナと LoongCollector コンテナの両方にマウントする必要があります。

  • Pod のログボリュームが DaemonSet の容量を超えた場合、Sidecar モードでは LoongCollector に専用リソースを割り当てることができます。

  • サーバーレス環境にはノードがないため、DaemonSet は適用できません。 Sidecar モードは、サーバーレスアーキテクチャと直接統合されます。