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

Simple Log Service:LoongCollector を使用して ECS テキストログを収集および分析する

最終更新日:Sep 21, 2025

このクイックスタートでは、Simple Log Service (SLS) LoongCollector を使用して、Elastic Compute Service (ECS) インスタンスから NGINX アクセスログを収集および分析します。次の方法を学習します。

  • LoongCollector を使用してログ収集を構成する。

  • SQL を使用してログデータをクエリおよび分析する。

  • モニタリングアラートを設定する。

始める前に

アカウント権限の設定

  • Alibaba Cloud アカウント

    Alibaba Cloud アカウントは、デフォルトで SLS への完全かつ無制限のアクセス権を持っています。操作は必要ありません。

  • Resource Access Management (RAM) ユーザー

    RAM ユーザーはデフォルトでは権限を持たず、Alibaba Cloud アカウントによって明示的にアクセスを許可される必要があります。これには 2 つの方法があります。

    • 次のシステムポリシーをアタッチします。

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

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

      • AliyunOOSFullAccess: CloudOps Orchestration Service (OOS) を使用して ECS インスタンスに収集エージェントを自動的にインストールします。

    • カスタムポリシーの作成とアタッチ

      よりきめ細かい制御を行うには、カスタムポリシーを作成してアタッチし、最小権限の原則に基づいて RAM ユーザーに権限を付与します。

ECS インスタンスの準備

ECS インスタンスがない場合は、「このドキュメント」を参照して作成してください。インスタンスのセキュリティグループには、ポート 80 (HTTP) とポート 443 (HTTPS) のトラフィックを許可するアウトバウンドルールが必要です。

プロジェクトと Logstore の作成

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

  2. [Create Project] をクリックします:

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

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

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

  4. 確認ページで、[Create Logstore] をクリックします。

  5. Logstore 名 (例: nginx-access-log) を入力します。他のパラメーターはデフォルト設定のままにし、[OK] をクリックします。

    デフォルトでは、標準 Logstore が作成され、取り込まれたデータの量に応じて課金されます

ステップ 1. モックログの生成

  1. ECS インスタンスに接続します

  2. generate_nginx_logs.sh という名前のスクリプトファイルを作成し、次の内容をファイルに貼り付けます。このスクリプトは、標準の NGINX アクセスログエントリを 5 秒ごとに /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/"
        "-"
        "-"
        "-"
    )
    
    
    # --- コア機能 ---
    
    # 配列から要素をランダムに選択する関数を定義します
    # 使用法: random_element "array_name"
    function random_element() {
        local arr=("${!1}")
        echo "${arr[$((RANDOM % ${#arr[@]}))]}"
    }
    
    # Ctrl+C 割り込みシグナルをキャッチして正常に終了します
    trap 'echo -e "\n\nScript interrupted. Stopping log generation..."; exit 0;' SIGINT
    
    # --- メインループ ---
    
    echo "Start generating mock NGINX logs to $LOG_FILE ..."
    echo "Generating one log entry every 5 seconds."
    echo "Press Ctrl+C to stop."
    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 結合形式のログエントリを組み立てます
        # Format: $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"
        
        # 6. 次のループの前に 5 秒間待機します
        sleep 5
    done
  3. ファイルに実行権限を付与します: chmod +x generate_nginx_logs.sh

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

ステップ 2. LoongCollector のインストール

  1. Logstore が作成されたことを確認するダイアログボックスで、[OK] をクリックして [クイックデータインポート] パネルを開きます。

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

  3. マシングループを構成します。

    • シナリオ: サーバー

    • インストール環境: ECS

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

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

    説明

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

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

    新しいマシングループの場合、ハートビートステータスが FAIL の場合は、[自動再試行] をクリックします。ステータスは約 2 分で OK に変わります。

ステップ 3. 収集構成の作成

  1. ハートビートステータスが OK になったら、[次へ] をクリックして [Logtail 構成] ページを開き、次のパラメーターを構成します。

    • 構成名: 名前 (例: nginx-access-log-config) を入力します。

    • ファイルパス: ログ収集パス /var/log/nginx/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 分かかります。[自動更新] をクリックします。プレビューデータが表示されると、構成は有効です。

ステップ 4. ログのクエリと分析

[次へ] をクリックして最終ページに進み、[ログのクエリ] をクリックします。システムはターゲット Logstore のクエリおよび分析ページにリダイレクトします。SQL 分析ステートメントを記述して、構造化ログから主要なビジネスおよび運用メトリックを抽出します。時間範囲を [過去 15 分] に設定します。

説明

エラーメッセージが表示された場合、インデックスはまだ構成されていません。ダイアログボックスを閉じて約 1 分待ちます。その後、access.log ファイルからログの内容を表示します。

  • 例 1: ウェブサイトの合計ページビュー (PV)

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

    * | SELECT count(*) AS pv
  • 例 2: 1 分あたりのリクエスト数とエラー率

    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: リクエストメソッド別の 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

ステップ 5. モニタリングアラートの設定

モニタリングアラートを設定して、エラーの急増など、サービスの異常が発生したときに自動的に通知を送信します。

  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. 構成の確認: アラート条件が満たされると、構成された通知チャネルにアラートが送信されます。トリガーされたすべてのアラートレコードは [アラート履歴] ページで表示できます。

ステップ 6. リソースのクリーンアップ

課金を避けるため、操作完了後に作成したすべてのリソースをクリーンアップしてください。

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

    ECS インスタンスに接続し、次のコマンドを実行してログ生成スクリプトを停止します。

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

    1. 実行を高速化するには、次のコマンドの ${region_id} を、お使いの ECS インスタンスの リージョン ID に置き換えます。

      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-abc) を見つけます。

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

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

    4. [OK] をクリックします。この操作により、プロジェクトとその関連リソース (Logstore、収集構成、アラートルールなど) がすべて削除されます。

よくある質問

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

デフォルトでは、SLS の時刻フィールド (__time__) には、ログがサーバーに到着した時刻が記録されます。元のログエントリの時刻を使用するには、収集構成に 時刻解析プラグイン を追加します。

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

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

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

ログ収集は、ハートビートの異常、収集エラー、または LoongCollector (Logtail) 構成の誤りが原因で失敗する可能性があります。「Logtail 収集の失敗のトラブルシューティング」をご参照ください。

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

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

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

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