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

Simple Log Service:LoongCollector を使用した ECS テキストログの収集と分析

最終更新日:Mar 01, 2026

このガイドでは、Simple Log Service (SLS) の LoongCollector を使用して、Elastic Compute Service (ECS) インスタンスから NGINX ログを収集する方法について説明します。ログ収集の設定、SQL を使用したデータクエリ、可視化ダッシュボードの表示、アラートの設定、および料金を回避するためのリソースのクリーンアップ方法を学びます。

前提条件

サービスの有効化とアカウントの準備

  • SLS の有効化:初めて SLS を使用する場合は、Simple Log Service コンソールにログインし、プロンプトに従ってサービスを有効化します。

  • アカウントの準備:

    • Alibaba Cloud アカウントでログイン:このアカウントはデフォルトですべての権限を持っており、直接使用できます。

    • RAM ユーザーでログイン:Alibaba Cloud アカウントは、RAM ユーザーに必要なアクセスポリシーを付与する必要があります:

      • AliyunLogFullAccess:プロジェクトや Logstore などの SLS リソースを作成および管理するために使用します。

      • AliyunECSFullAccess:ECS インスタンスに収集エージェントをインストールするために使用します。

      • AliyunOOSFullAccess:Alibaba Cloud Operation Orchestration Service (OOS) を通じて ECS インスタンスに収集エージェントを自動的にインストールするために使用します。

      本番環境では、RAM ユーザーのより詳細な権限管理のために、カスタム権限ポリシーを作成できます。

ECS インスタンスの準備

ECS インスタンスのセキュリティグループで、ポート 80 (HTTP) とポート 443 (HTTPS) のアウトバウンドトラフィックが許可されていることを確認してください。

モックログの生成

  1. ECS インスタンスにログインします。

  2. generate_nginx_logs.sh という名前のスクリプトファイルを作成し、次の内容をファイルに貼り付けます。このスクリプトは、5 秒ごとに標準の NGINX アクセスログエントリを /var/log/nginx/access.log ファイルに書き込みます。

    generate_nginx_logs.sh

    #!/bin/bash
    
    #==============================================================================
    # スクリプト名:generate_nginx_logs.sh
    # スクリプトの説明:NGINX サーバーをシミュレートし、継続的に access.log にログを書き込みます。
    #==============================================================================
    
    # --- 設定可能なパラメータ ---
    
    # ログファイルのパス
    LOG_FILE="/var/log/nginx/access.log"
    
    # --- モックデータプール ---
    
    # ランダム IP アドレスプール
    IP_ADDRESSES=(
        "192.168.1.10" "10.0.0.5" "172.16.31.40" "203.0.113.15"
        "8.8.8.8" "1.1.X.X" "91.198.XXX.XXX" "114.114.114.114"
        "180.76.XX.XX" "223.5.5.5"
    )
    
    # HTTP リクエストメソッドプール
    HTTP_METHODS=("GET" "POST" "PUT" "DELETE" "HEAD")
    
    # 一般的なリクエストパスプール
    REQUEST_PATHS=(
        "/index.html" "/api/v1/users" "/api/v1/products?id=123" "/images/logo.png"
        "/static/js/main.js" "/static/css/style.css" "/login" "/admin/dashboard"
        "/robots.txt" "/sitemap.xml" "/non_existent_page.html"
    )
    
    # HTTP ステータスコードプール (重みを調整できます。例えば、200 を増やすとその出現確率が高まります。)
    HTTP_STATUSES=(200 200 200 200 201 301 404 404 500 502 403)
    
    # 一般的な User-Agent プール
    USER_AGENTS=(
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
        "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36"
        "Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Mobile/15E148 Safari/604.1"
        "Mozilla/5.0 (Linux; Android 11; SM-G991U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.120 Mobile Safari/537.36"
        "curl/7.68.0"
        "Googlebot/2.1 (+http://www.google.com/bot.html)"
    )
    
    # 一般的な Referer プール
    REFERERS=(
        "https://www.google.com/"
        "https://www.bing.com/"
        "https://github.com/"
        "https://stackoverflow.com/"
        "-"
        "-"
        "-"
    )
    #  ログディレクトリの確認と作成
    LOG_DIR=$(dirname "$LOG_FILE")
    if [ ! -d "$LOG_DIR" ]; then
        echo "ログディレクトリ '$LOG_DIR' が存在しません。作成を試みます..."
        # 通常は root 権限が必要なため、sudo を使用してディレクトリを作成します
        sudo mkdir -p "$LOG_DIR"
        if [ $? -ne 0 ]; then
            echo "エラー:ディレクトリ '$LOG_DIR' の作成に失敗しました。権限を確認するか、手動で作成してください。"
            exit 1
        fi
        echo "ディレクトリは正常に作成されました。"
    fi
    
    # ログファイルの書き込み権限を確認します
    trap 'echo -e "\n\nスクリプトが中断されました。ログ生成を停止します..."; exit 0;' SIGINT
    
    # --- コア機能 ---
    
    # 配列からランダムに要素を選択する関数を定義します
    # 使用法:random_element "配列名"
    function random_element() {
        local arr=("${!1}")
        echo "${arr[$((RANDOM % ${#arr[@]}))]}"
    }
    
    # Ctrl+C 割り込みシグナルをキャッチして、正常に終了します
    trap 'echo -e "\n\nスクリプトが中断されました。ログ生成を停止します..."; exit 0;' SIGINT
    
    # --- メインループ ---
    
    echo "$LOG_FILE へのモック NGINX ログの生成を開始します..."
    echo "5 秒ごとにログエントリが生成されます。"
    echo "停止するには Ctrl+C を押してください。"
    sleep 2
    
    # ログを継続的に生成するための無限ループ
    while true; do
        # 1. デフォルトの NGINX 形式で現在時刻を取得します:[dd/Mon/YYYY:HH:MM:SS +ZZZZ]
        timestamp=$(date +'%d/%b/%Y:%H:%M:%S %z')
    
        # 2. プールからデータをランダムに選択します
        ip=$(random_element IP_ADDRESSES[@])
        method=$(random_element HTTP_METHODS[@])
        path=$(random_element REQUEST_PATHS[@])
        status=$(random_element HTTP_STATUSES[@])
        user_agent=$(random_element USER_AGENTS[@])
        referer=$(random_element REFERERS[@])
    
        # 3. ランダムなレスポンスボディサイズ (バイト単位) を生成します
        bytes_sent=$((RANDOM % 5000 + 100)) # 100 から 5100 までの乱数
    
        # 4. 完全な NGINX 複合形式のログエントリに連結します
        # フォーマット:$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"
        log_line="$ip - - [$timestamp] \"$method $path HTTP/1.1\" $status $bytes_sent \"$referer\" \"$user_agent\""
    
        # 5. ログ行をファイルに追加します
        # echo "$log_line" >> "$LOG_FILE"
        echo "$log_line" | sudo tee -a "$LOG_FILE" > /dev/null
        
        # 6. 次のループの前に 5 秒間待機します
        sleep 5
    done
  3. 実行権限を付与します:chmod +x generate_nginx_logs.sh

  4. スクリプトをバックグラウンドで実行します:nohup ./generate_nginx_logs.sh &

プロジェクトと Logstore の作成

プロジェクトは SLS のリソース管理単位であり、異なるプロジェクトのデータを分離するために使用されます。Logstore はログデータのストレージ単位です。

  1. Simple Log Service コンソールにログインします。

  2. [プロジェクトの作成] をクリックします:

    • リージョン:ご利用の ECS インスタンスと同じリージョンを選択します。これにより、Alibaba Cloud の内部ネットワーク経由でログを収集でき、ログ収集が高速化されます。

    • プロジェクト名:Alibaba Cloud 内でグローバルに一意な名前を入力します。例:nginx-quickstart-abc

  3. その他の設定はデフォルトのままにし、[作成] をクリックします。

  4. プロジェクトが作成されたことを示すページで、[Logstore の作成] をクリックします。

  5. [Logstore 名] を入力し (例:nginx-access-log)、その他の設定は変更せずに [OK] をクリックします。

    デフォルトでは、中間 Logstore が作成され、これは書き込まれたデータ量に基づいて課金されます。

LoongCollector のインストール

  1. Logstore の作成後に表示されるダイアログボックスで [OK] をクリックし、[データ高速インポート] パネルを開きます。

  2. [Nginx - テキストログ] カードで、[今すぐ統合] をクリックします。

  3. マシングループの設定:

    • シナリオサーバー

    • インストール環境: ECS

  4. [マシングループの作成] をクリックします。表示されるパネルで、ターゲットの ECS インスタンスを選択します。

  5. [インストールしてマシングループを作成] をクリックします。インストールが成功したら、マシングループの[名前] を設定し (例:my-nginx-server)、[OK] をクリックします。

    説明

    インストールが失敗するか保留中のままである場合は、ECS のリージョンがプロジェクトのリージョンと同じであるかを確認してください。

  6. [次へ] をクリックして、マシングループのハートビートステータスを確認します。

    マシングループを初めて作成したときに、ハートビートステータスが FAIL の場合は、[自動リトライ] をクリックします。約 2 分後にステータスが OK に変わります。

収集設定の作成

  1. ハートビートステータスが OK になったら、[次へ] をクリックして[Logtail 設定] ページに進みます:

    • [設定名]:設定名を入力します。例:nginx-access-log-config

    • [ファイルパス]:ログ収集のパスです。最初の入力ボックスにディレクトリパス (例:/var/log/nginx) を入力し、2 番目の入力ボックスにファイル名 (例:access.log) を入力します。

    • [プロセッサ設定]

      • [ログサンプル][ログサンプルの追加] をクリックし、サンプルログエントリを貼り付けます:

        192.168.*.* - - [15/Apr/2025:16:40:00 +0800] "GET /nginx-logo.png HTTP/1.1" 0.000 514 200 368 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.*.* Safari/537.36"
      • [処理方法][データ解析 (NGINX モード)] を選択します。[NGINX ログ設定] フィールドで、log_format を設定します。次の内容をコピーして貼り付け、[OK] をクリックします。

        log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                            '$status $body_bytes_sent "$http_referer" '
                            '"$http_user_agent" $request_time $request_length';
        本番環境では、ここでの log_format は、NGINX 設定ファイル (通常は /etc/nginx/nginx.conf にあります) の定義と一致している必要があります。

        ログ解析の例:

        生ログ

        構造化解析済みログ

        192.168.*.* - - [15/Apr/2025:16:40:00 +0800] "GET /nginx-logo.png HTTP/1.1" 0.000 514 200 368 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.*.* Safari/537.36"

        body_bytes_sent: 368
        http_referer: -
        http_user_agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.x.x Safari/537.36
        remote_addr:192.168.*.*
        remote_user: -
        request_length: 514
        request_method: GET
        request_time: 0.000
        request_uri: /nginx-logo.png
        status: 200
        time_local: 15/Apr/2025:16:40:00
  2. [次へ] をクリックして、[クエリ・分析設定] ページに進みます。収集設定が適用されるまで約 1 分かかります。[自動更新] をクリックします。プレビューデータが表示されれば、設定は適用されています。

ログのクエリと分析

[次へ] をクリックして最終ページに進みます。[ログのクエリ] をクリックすると、ターゲット Logstore のクエリ・分析ページにリダイレクトされます。SQL 分析文を記述して、解析されたログから主要なビジネスおよび O&M メトリックを抽出できます。時間範囲を[過去 15 分] に設定します:

説明

エラーのポップアップが表示された場合、インデックスがまだ設定されていないことが原因です。ポップアップを閉じて 1 分間待ってください。その後、access.log ファイルのログ内容を表示できます。

  • 例 1:Web サイトのページビュー (PV)

    指定された時間範囲内のログエントリの総数をカウントします。

    * | SELECT count(*) AS pv
  • 例 2:分ごとのリクエスト数とエラー率の統計

    1 分あたりの総リクエスト数、エラーリクエスト数 (HTTP ステータスコード ≥ 400)、およびエラー率を計算します。

    * | SELECT 
      date_trunc('minute', __time__) as time,
      count(1) as total_requests,
      count_if(status >= 400) as error_requests,
      round(count_if(status >= 400) * 100.0 / count(1), 2) as error_rate
    GROUP BY time 
    ORDER BY time DESC 
    LIMIT 100
    
  • 例 3:リクエストメソッド (GET、POST など) 別の PV 統計

    分ごとおよびリクエストメソッド (GET、POST など) ごとにページビューをグループ化してカウントします。

    * |
    SELECT
        date_format(minute, '%m-%d %H:%i') AS time,
        request_method,
        pv
    FROM (
        SELECT
            date_trunc('minute', __time__) AS minute,
            request_method,
            count(*) AS pv
        FROM
            log
        GROUP BY
            minute,
            request_method
    )
    ORDER BY
        minute ASC
    LIMIT 10000

ダッシュボードでのデータ可視化

NGINX 解析プラグインを設定すると、SLS は自動的に nginx-access-log_NGINX Access Log という名前のプリセットダッシュボードを作成します。

  1. 左側のナビゲーションウィンドウで image をクリックし、[ダッシュボード] > [ダッシュボード]を選択します。

  2. ダッシュボード名を見つけてクリックし、ページビュー (PV)、ユニークビジター (UV)、エラー率、リクエストメソッドの分布などのコアメトリックのチャートを表示します。

  3. すべてのチャートは、必要に応じてカスタマイズおよび変更できます。

監視とアラートの設定

エラー数が急増した場合など、サービスに異常が発生したときに自動的に通知を送信するアラートルールを設定します。

  1. 左側のナビゲーションウィンドウで image [アラート] をクリックします。

  2. アクションポリシーの作成:

    • [通知管理] > [アクションポリシー]タブで、[作成] をクリックします。

    • [ID][名前]を、たとえば send-notification-to-admin のように設定します。

    • [プライマリアクションポリシー] で、image [アクショングループ] をクリックします。

    • [通知方法] (例:[SMS メッセージ]) を選択し、[受信者] を設定して、[アラートテンプレート] を選択します。

    • [確認] をクリックします。

  3. アラートルールの作成:

    1. [アラートルール] タブに切り替え、[アラートの作成] をクリックします。

    2. ルール名を入力します。例:Too many server 5xx errors

    3. [クエリ統計] フィールドで、[作成] をクリックしてクエリ条件を設定します。

      • [Logstore]:作成した nginx-access-log を選択します。

      • [時間範囲][15 分 (相対)]

      • [クエリ]status >= 500 | SELECT * と入力します。

      • [プレビュー] をクリックしてデータがクエリできることを確認し、[OK] をクリックします。

    4. [トリガー条件]:クエリ結果に 100 件を超えるエントリが含まれる場合に、重大なアラートをトリガーするようにルールを設定します。

      この設定は、15 分以内に 100 件を超える 5xx エラーが発生した場合にアラートがトリガーされることを意味します。
    5. [宛先][Simple Log Service 通知] を選択し、有効にします。

      • [アクションポリシー]:前のステップで作成したアクションポリシーを選択します。

      • [繰り返し間隔]:過度な繰り返し通知を避けるため、15 分に設定します。

    6. [OK] をクリックしてアラートルールを保存します。

  4. 検証:アラート条件が満たされると、設定された通知チャネルがアラートを受信します。トリガーされたすべてのアラートレコードは、[アラート履歴] ページで表示できます。

リソースのクリーンアップ

不要な課金を避けるため、作業が完了したら作成したすべてのリソースをクリーンアップしてください。

  1. ログ生成スクリプトの停止

    ECS インスタンスにログインし、次のコマンドを実行してバックグラウンドで実行中のログ生成スクリプトを停止します。

    kill $(ps aux | grep '[g]enerate_nginx_logs.sh' | awk '{print $2}')
  2. LoongCollector のアンインストール (任意)

    1. サンプルコードでは、${region_id}cn-hangzhou に置き換えることができます。実行を高速化するには、${region_id} をご利用の ECS インスタンスのリージョンに置き換えます。

      wget https://aliyun-observability-release-${region_id}.oss-${region_id}.aliyuncs.com/loongcollector/linux64/latest/loongcollector.sh -O loongcollector.sh;
    2. アンインストールコマンドを実行します。

      chmod +x loongcollector.sh; sudo ./loongcollector.sh uninstall;
  3. プロジェクトの削除

    1. Simple Log Service コンソールで、プロジェクト一覧ページに移動し、作成したプロジェクト (例:nginx-quickstart-xxx) を見つけます。

    2. 操作列で、[削除] をクリックします。

    3. 削除パネルで、プロジェクト名を入力し、削除理由を選択します。

    4. [OK] をクリックします。プロジェクトを削除すると、その関連リソース (Logstore、収集設定、ダッシュボード、アラートルールなど) もすべて削除されます。

    警告

    プロジェクトを削除すると、そのすべてのログデータと設定情報が解放され、回復できなくなります。プロジェクトを削除する前に、データ損失を防ぐために操作を確認してください。

次のステップ

これで、ログの収集、クエリと分析、ダッシュボードの可視化、アラート設定のプロセスが完了しました。ビジネスニーズに基づいてログリソースシステムを計画し、コアコンセプトをよりよく理解するために、次のドキュメントを読むことを推奨します:

よくある質問

収集後、表示される時刻が元のログの時刻と一致しない場合はどうすればよいですか?

デフォルトでは、SLS の時間フィールド (__time__) は、ログがサーバーに到着した時間を使用します。元のログの時間を使用するには、コレクション構成に時間解析プラグインを追加します。

プロジェクトと Logstore を作成するだけで課金されますか?

Logstore を作成すると、SLS はデフォルトでシャードリソースを予約します。これにより、アクティブなシャードのリース料金が発生する場合があります。詳細については、「アクティブなシャードのリース料金はなぜ発生するのですか?」をご参照ください。

ログ収集の失敗をトラブルシューティングするにはどうすればよいですか?

Logtail を使用したログ収集は、Logtail のハートビートの異常、収集エラー、または不正な Logtail 収集設定などの理由で失敗することがあります。トラブルシューティング情報については、「Logtail のログ収集の失敗のトラブルシューティング」をご参照ください。

ログはクエリできますが、分析できないのはなぜですか?

ログを分析するには、関連するフィールドのフィールドインデックスを設定し、統計機能を有効にする必要があります。Logstore のインデックス設定を確認してください。

SLS の課金を停止するにはどうすればよいですか?

SLS は一度有効化すると無効にできません。SLS を使用しなくなった場合は、アカウント配下のすべてのプロジェクトを削除することで課金を停止してください。