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

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

最終更新日:Apr 03, 2026

LoongCollector は、Alibaba Cloud の Simple Log Service (SLS) 向けの次世代ログ収集エージェントであり、Logtail のアップグレード版です。このトピックでは、Kubernetes クラスターに LoongCollector をインストールする方法について説明します。DaemonSet モードまたはサイドカーモードのいずれかでインストールできます。

事前準備

LoongCollector をインストールする前に、クラスターノードと SLS エンドポイント間のネットワーク接続を確認してください。これにより、LoongCollector がデータを正しくレポートできるようになります。

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

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

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

    3. [エンドポイント] セクションで、プロジェクトのリージョンのパブリックエンドポイントとプライベートエンドポイントを見つけます。

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

    curl https://${Project_Name}.${SLS_ENDPOINT}
  3. 結果の確認:

    • コマンドが {"Error":{"Code":"OLSInvalidMethod",...}} を返した場合、ノードと SLS 間のネットワーク接続は正常です。

      説明

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

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

インストール方法の選択

クラスターのタイプと要件に応じて、次の表からインストール方法を選択してください。

インストール方法

利用シーン

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

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

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

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

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

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

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

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

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

  • 詳細な収集:各アプリケーションに対して、個別の収集ソース、フィルター ルール、および出力先を設定します。

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

説明

logtail-ds を使用していて LoongCollector にアップグレードしたい場合は、LoongCollector をインストールする前に logtail-ds をアンインストールする必要があります。

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

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

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

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

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

  4. インストールが完了すると、SLS は ACK クラスターが配置されているリージョンに次のリソースを自動的に作成します。Simple Log Service コンソールにログインして表示します

    リソースタイプ

    リソース名

    目的

    プロジェクト

    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. [Kubernetes クラスターの作成] をクリックします。[詳細設定] セクションで、SLS はデフォルトで有効になっています。[デフォルト設定の変更] をクリックして、プロジェクトを作成するか、既存のプロジェクトを使用します。

    このトピックでは、SLS に関連する設定のみを説明します。その他の設定項目については、「ACK マネージドクラスターの作成」をご参照ください。
  3. [プロジェクトの作成] を選択すると、SLS はデフォルトで次のリソースを作成します。Simple Log Service コンソールにログインして表示します

    リソースタイプ

    リソース名

    目的

    プロジェクト

    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.0.12/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.1.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。詳細については、「リージョン」をご参照ください。

    aliUid String (必須)

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

    net String (必須)

    ログデータの転送に使用されるネットワークタイプ

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

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

    accessKeyID String (必須)

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

    accessKeySecret String (必須)

    指定された AccessKey ID に対応する AccessKey Secret。

    clusterID String (必須)

    クラスターのカスタム ID。名前には、大文字、小文字、数字、ハイフン (-) のみ使用できます。

    重要

    異なる Kubernetes クラスターに同じクラスター ID を使用しないでください。

  3. インストールスクリプトの実行loongcollector-custom-k8s-package フォルダで、次のコマンドを実行して LoongCollector とその依存コンポーネントをインストールします。

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

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

    実行結果の例:

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

    コンポーネントの起動に失敗した場合 (ステータスが Running ではない場合):

    1. 設定の確認: values.yaml 内の設定項目が正しいことを確認します。

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

      kubectl describe pod loongcollector-ds -n kube-system
  5. コンポーネントがインストールされると、Simple Log Service (SLS) は自動的に次のリソースを作成します。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)の別コンテナを挿入し、そのポッド内での専用ログ収集を可能にします。アプリケーションをまだデプロイしていない場合、または手順の検証を行いたい場合は、付録: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
          
          # アプリケーションコンテナの終了(トゥームストーンファイルによる通知)を待機します。
          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 および Node のメタデータを自動的にログタグとして挿入します。
        - 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)] ビジネス: トゥームストーンファイルを作成しました。終了します"

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] トゥームストーンファイルを書き込みます"
    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] 予期せぬ終了です。トゥームストーンファイルを書き込みます"
    touch /tasksite/tombstone
fi

exit $EXIT_CODE

3. グレースフル終了期間を設定する

spec.template.spec 内で、LoongCollector が残りのログを確実に送信できる十分な猶予期間(グレースフル終了期間)を設定します。

spec:
  # ... その他の既存の spec 構成 ...
  template:
    spec:
      terminationGracePeriodSeconds: 600  # 10 分間のグレースフルシャットダウン期間。

4. 変数

パラメーター

説明

${your_aliyun_user_id}

メインアカウント ID を設定します。詳細については、「ユーザー識別子の構成」をご参照ください。

${your_machine_group_user_defined_id}

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

重要

この識別子は、プロジェクトのリージョン内で一意である必要があります。

${your_region_config}

Log Service プロジェクトのリージョンおよびネットワークアクセス方式に基づいて値を設定します。リージョンに関する情報については、「サービスリージョン」をご参照ください。

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

${shared_volume_name}

ボリュームのカスタム名を設定します。

重要

volumeMounts セクション内の name パラメーターは、volumes セクション内の name パラメーターと一致させる必要があります。これにより、両方のコンテナが同一のボリュームをマウントできます。

${dir_containing_your_files}

マウントパスを設定します。これは、テキストログを含むコンテナ内のディレクトリです。

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リソース > マシングループ を選択します。次に、マシングループ の横にある 机器组 > マシングループの作成 をクリックします。

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

    • 名前:マシングループの名前です。作成後は変更できません。命名規則は以下のとおりです。

      • 小文字、数字、ハイフン(-)、アンダースコア(_)のみ使用可能です。

      • 先頭および末尾は小文字または数字で始まり・終わる必要があります。

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

    • マシングループ識別子カスタム識別子 を選択します。

    • カスタム識別子:「1. アプリケーションポッドの YAML 構成を変更する」で YAML ファイルに設定した LoongCollector コンテナの環境変数 ALIYUN_LOGTAIL_USER_DEFINED_ID の値を入力します。値は完全に一致する必要があります。そうでない場合、関連付けが失敗します。

  4. マシングループのハートビートステータスを確認します:マシングループが作成された後、その名前をクリックし、ステータス領域でハートビートステータスを確認します。

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

    • FAIL:

      • 構成がまだ有効になっていない可能性があります。構成が有効になるまで約 2 分かかります。ページを更新して、しばらくしてから再試行してください。

      • 2 分経過後もステータスが依然として FAIL の場合は、「Logtail マシングループの問題のトラブルシューティング」を参照して原因を特定してください。

各 Pod は個別の LoongCollector インスタンスに対応します。異なるアプリケーションまたは環境には、異なるカスタム識別子を使用して、細かい粒度での管理を容易にしてください。

よくある質問

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

Alibaba Cloud ACK コンソールから LoongCollector をインストールした場合、デフォルトでは、同一の Alibaba Cloud アカウント内の SLS プロジェクトへコンテナログを収集します。異なるアカウントまたはリージョン間でコンテナログを収集するには、以下のいずれかの方法をご利用ください。

方法 1:アンインストールおよび再インストール

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

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

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

  4. コンポーネントを再インストールします。詳細については、「セルフマネージドクラスターへのインストール(DaemonSet モード)」をご参照ください。

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

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

  2. Helm ページで loongcollector を見つけ、[操作] 列の [更新] をクリックします。[リリースの更新] ページで、下記の表に記載されたパラメーターのみを変更し、その後 [OK] をクリックします。

    クラスターおよびプロジェクト

    変更対象のパラメーター

    同一アカウント、異なるリージョン

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

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

    異なるアカウント、同一リージョン

    aliUid:SLS プロジェクトが配置されている Alibaba Cloud アカウントの ID。複数のアカウント ID をカンマ (,) で区切ります。

    net:値を Intranet に設定します。同一リージョン内では、内部ネットワーク経由でデータ転送が可能です。

    異なるアカウント、異なるリージョン

    aliUid:SLS プロジェクトが配置されている Alibaba Cloud アカウントの ID。複数のアカウント ID をカンマ (,) で区切ります。

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

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

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

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

    2. 左側のナビゲーションウィンドウで、image[リソース] > [マシングループ] に移動します。[マシングループ] の右側にある 机器组 > [マシングループの作成] をクリックします。

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

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

      2. [マシン グループ識別子][カスタム識別子] に設定します。

      3. [カスタム識別子] フィールドに k8s-group-${cluster_id} を入力します。${cluster_id} は、ご利用のクラスターの実際の clusterID に置き換えてください。

    4. マシングループが作成された後、マシングループ一覧から該当のマシングループ名をクリックします。[マシングループ構成] > [マシングループステータス] セクションで、[ハートビート] ステータスを確認します。「OK」であれば、マシングループの作成は正常に完了しています。ハートビートが失敗している場合は、ユーザー ID およびカスタム識別子を確認してください。

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


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

次のステップ

LoongCollector をインストールした後、「Kubernetes クラスターからのコンテナログ収集」をご参照ください。このトピックでは、基本原則、主要なプロセス、選択に関する推奨事項、およびベストプラクティスについて説明します。次に、以下のいずれかの方法を使用して収集設定を作成します。

附録:YAML の例

この例では、NGINX アプリケーションコンテナと LoongCollector サイドカーコンテナを含む、完全な Kubernetes デプロイメント構成を提供します。この構成は、サイドカーパターンを使用してコンテナログを収集するのに適しています。

開始する前に、次の3つの置き換えを行ってください。

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

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

  3. ${your_region_config} を、ご利用の 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 application container to complete"
              until [[ -f /tasksite/tombstone ]]; do 
                sleep 2
              done
              
              echo "[$(date)] LoongCollector: Application task 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_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"
            - 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 application container to complete"
              until [[ -f /tasksite/tombstone ]]; do 
                sleep 2
              done
              
              echo "[$(date)] LoongCollector: Application task 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 コンソールにログインします。[プロジェクト] リストで、送信先のプロジェクトをクリックします。

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

  3. [基本情報] セクションで、現在のプロジェクトのリージョン名を確認します。リージョン名とリージョン ID のマッピングについては、次の表をご参照ください。

    リージョンとは、Alibaba Cloud サービスの物理データセンターが設置されている地理的な場所のことです。リージョン ID は、Alibaba Cloud サービスのリージョンの一意の識別子です。

    リージョン名

    リージョン ID

    中国 (青島)

    cn-qingdao

    中国 (北京)

    cn-beijing

    中国 (張家口)

    cn-zhangjiakou

    中国 (フフホト)

    cn-huhehaote

    中国 (ウランチャブ)

    cn-wulanchabu

    中国 (杭州)

    cn-hangzhou

    中国 (上海)

    cn-shanghai

    中国 (南京-ローカルリージョン - 提供終了)

    cn-nanjing

    中国 (福州-ローカルリージョン - 提供終了)

    cn-fuzhou

    中国 (深セン)

    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 のネットワーク転送タイプ

エンドポイントは、Simple Log Service (SLS) のサービスアクセスポイントです。これは、プロジェクトとそのログデータにアクセスするために使用される URL であり、プロジェクトが配置されているリージョンによって決定されます。SLS は、プライベート、パブリック、およびアクセラレーションのエンドポイントを提供します。エンドポイントを表示するには、次の手順に従います:

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

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

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

ネットワークタイプ

エンドポイントタイプ

説明

シナリオ

Alibaba Cloud 内部ネットワーク

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

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

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

説明

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

インターネット

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

インターネット経由でのログデータ転送は、ネットワーク帯域幅によって制限され、ジッター、遅延、パケット損失などの要因の影響を受けます。

次のシナリオでインターネット経由でデータを転送できます:

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

  • サーバーが他のクラウドプロバイダーのものであるか、オンプレミスの IDC である。

転送アクセラレーション

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

この方式では、Alibaba Cloud CDN のエッジノードを使用してログ収集を高速化します。インターネット経由のログ収集と比較して遅延を削減し、安定性を向上させますが、追加のトラフィック料金が発生します。

中国本土と他のリージョン間でデータを転送する場合、インターネットを使用すると高いネットワーク遅延や不安定性を引き起こす可能性があります。この場合、転送アクセラレーションを使用できます。詳細については、「転送アクセラレーション」をご参照ください。

LoongCollector の実行モード

属性

DaemonSet モード

サイドカーモード

デプロイ方法

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

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

リソース消費

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

高い (各 Pod が個別に占有)

ユースケース

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

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

隔離

ノードレベルの共有

Pod レベルの独立性

DaemonSet モードの仕組み

クラスター内の各ノードに LoongCollector エージェントがデプロイされ、そのノード上のすべてのコンテナからログを収集します。このモードは、操作が簡単で、リソース消費が少なく、構成が柔軟であるという特徴がありますが、テナント間の隔離は弱くなります。

  • DaemonSet モードでは、Kubernetes クラスターは各ノードで LoongCollector コンテナが 1 つだけ実行されるようにし、そのノード上のすべてのコンテナからログを収集します。

  • 新しいノードがクラスターに参加すると、Kubernetes は自動的にそのノード上に LoongCollector コンテナを作成します。ノードがクラスターから離脱すると、Kubernetes はそのノード上の LoongCollector コンテナを自動的に削除します。この自動スケーリングにより、LoongCollector インスタンスを手動で管理する必要がありません。

サイドカーモードの仕組み

各 Pod には、アプリケーションコンテナと並行して LoongCollector サイドカーコンテナがインジェクトされます。アプリケーションコンテナのログディレクトリは、emptyDirhostPath、または PVC などの Kubernetes のボリュームメカニズムを使用して共有ボリュームとしてマウントされます。これにより、ログファイルはアプリケーションコンテナとサイドカーコンテナの両方からアクセス可能になり、LoongCollector が直接読み取ることができます。このモードは、強力なマルチテナント隔離と高いパフォーマンスを提供しますが、リソース消費が多く、構成とメンテナンスがより複雑になります。

  • サイドカーモードでは、各 Pod は専用の LoongCollector コンテナを実行し、同じ Pod 内の他のすべてのコンテナからログを収集します。ログ収集は、異なる Pod 間で隔離されます。

  • 同じ Pod 内の他のコンテナからログファイルを収集するには、共有ボリュームを使用する必要があります。同じボリュームをアプリケーションコンテナと LoongCollector コンテナの両方にマウントする必要があります。

  • ノード上の単一 Pod のデータ量が非常に大きく、DaemonSet エージェントの収集能力を超える場合、サイドカーモードを使用すると、LoongCollector に特定のリソースを割り当てることができ、収集のパフォーマンスと安定性が向上します。

  • サーバーレスコンテナ環境にはノードの概念がないため、DaemonSet デプロイモードは適用できません。このような場合、サイドカーモードはサーバーレスアーキテクチャと効果的に統合され、柔軟で適応性のあるログ収集プロセスを保証します。