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

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

最終更新日:Aug 26, 2026

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

前提条件

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 クラスターからログを収集します。

Sidecar モードでのインストール

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

  • リソースの隔離: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 はそこにログを書き込みません。

Sidecar モードでのインストール

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

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

重要

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

${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 設定の変更」で 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 が明示的に指定されていない場合、システムはインストールコマンドで渡されたプロジェクトパラメーターをデフォルト値として使用し、そのプロジェクトの下に LoongCollector 関連の設定とクラスターのデフォルトマシングループを自動的に作成します。

次のステップ

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

付録:YAML の例

この例は、アプリケーションコンテナ (Nginx) と LoongCollector サイドカーコンテナを含む完全な Kubernetes Deployment 設定を示しています。Sidecar モードでコンテナログを収集するために使用します。

設定を使用する前に、次の置き換えを行ってください:

  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: LoongCollector の準備が完了するのを待っています..."
              until [[ -f /tasksite/cornerstone ]]; do 
                sleep 1
              done
              echo "[$(date)] Business: LoongCollector の準備が完了しました。ビジネスロジックを開始します"
              # アプリケーションロジックを実行します。
              echo "Hello, World!" >> /app/logs/business.log
              # 終了コードを保存します。
              retcode=$?
              echo "[$(date)] Business: タスクは終了コード $retcode で完了しました"
              # タスクが終了したことを LoongCollector に通知します。
              touch /tasksite/tombstone
              echo "[$(date)] Business: Tombstone を作成し、終了します"
              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: 初期化を開始します"
              # 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: "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] 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
          # リソースリクエストとリミット
          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: 初期化を開始します"
              # 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 とノードの情報を取得します。
            - 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 を示しています。

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

    リージョン名

    リージョン 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

    サウジアラビア (リヤド)

    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 は各ノードで正確に 1 つの LoongCollector コンテナを実行し、そのノード上のすべてのコンテナからログを収集します。

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

Sidecar モードの仕組み

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

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

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

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

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