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

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

最終更新日:Aug 27, 2026

LoongCollector を使用して、ECS インスタンスから Nginx ログを Simple Log Service (SLS) に収集します。30 分以内に、ログ収集の設定、SQL によるデータ分析、ダッシュボードの表示、アラートの設定、リソースのクリーンアップを行い、料金の発生を防ぐことができます。

image

前提条件

SLS の有効化とアカウントの準備

  • SLS の有効化: 初めてご利用になる場合は、Simple Log Service コンソールにログオンし、画面の指示に従ってサービスを有効化してください。

  • アカウントの準備:

    • Alibaba Cloud アカウント: デフォルトですべての権限を持ちます。

    • RAM ユーザー: RAM ユーザーを使用する場合は、必要な権限ポリシーを付与する必要があります。

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

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

      • AliyunOOSFullAccess: 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 "array_name"
    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 combined 形式のログエントリに連結
        # 形式: $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 インスタンスと同じリージョンを選択します。

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

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

  4. プロジェクトの作成後、Logstore の作成 をクリックします。

  5. Logstore 名(例: nginx-access-log) を入力し、その他の設定はデフォルト設定のままにして、OK をクリックします。

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

LoongCollector のインストール

  1. Logstore の作成後、確認ダイアログボックスでOK をクリックすると、データのインポート パネルが開きます。

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

  3. [サーバグループ設定]:

    • [使用シナリオ]: [ホストシナリオ]

    • [インストール環境]:ECS

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

  5. マシングループとしてインストールおよび作成する をクリックします。インストールが成功したら、マシン グループの 名前 に my-nginx-server などを入力して OK をクリックします。

    説明

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

  6. 次へ をクリックして、ハートビートステータスチェックに進みます。

    初めてマシン グループを作成した際に、ハートビートステータスが FAIL の場合は、自動再試行 をクリックします。ステータスは 約 2 分で OK に変わります。

収集設定の作成

  1. ハートビートステータスが正常になったら、次へ をクリックして Logtail 設定 ページに移動します:

    • 設定名: nginx-access-log-config などの設定名を入力します。

    • ファイルパス: 1つ目のボックスに /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 を設定します。次に、確認 をクリックします。

        log_format main '$remote_addr - $remote_user [$time_local] "$request" $request_time $request_length $status $body_bytes_sent "$http_referer" "$http_user_agent"';
        本番環境では、ここで指定する 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 を使用して、構造化ログからキーメトリックを抽出します。時間範囲を 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 など)

    1 分単位およびリクエストメソッド (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. ビジネスニーズに基づいて、グラフをカスタマイズできます。

image

監視とアラートの設定

エラーの急増など、異常な動作が発生したときに通知を受け取るためのアラートルールを作成します。

  1. 左側のナビゲーションペインで、imageアラート をクリックします。

  2. アクションポリシーを作成します。

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

    • ID と 名前 (例: send-notification-to-admin) を設定します。

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

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

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

  3. アラートルールを作成します。

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

    2. ルール名: わかりやすい名前を入力します (例: Too many server 5xx errors)。

    3. クエリ統計: 追加 をクリックして、クエリ条件を設定します。

      • [ログストア]: nginx-access-log を選択します。

      • [検索期間]:15 分 (相対)。

      • 検索:status >= 500 | SELECT * を入力します。

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

    4. [トリガー条件]:[特定のエントリ数] が [>100] の場合に、重大 アラートをトリガーするように設定します。

      この設定では、15 分以内に 100 件を超える 5xx エラーが発生した場合にアラートがトリガーされます。
    5. ターゲット Logstore: [SLS 通知] を選択し、有効化 します。

      • アクションポリシー: 前の手順で作成したアクションポリシーを選択します。

      • [繰り返し間隔]: 繰り返し通知を防ぐため、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 インスタンスの リージョン 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-xxx) を見つけます。

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

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

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

    警告

    プロジェクトを削除すると、すべてのログデータと設定が完全に削除されます。この操作は元に戻せません。

Next steps

Now that you have collected, queried, visualized, and monitored logs, explore the following resources to learn more:

FAQ

Inconsistent log time after collection

By default, the __time__ field uses the server arrival time. To use the timestamp from the original log, add a time parsing plug-in to the collection configuration.

Charges for creating a project and logstore

Creating a logstore reserves shard resources by default, which may incur active shard lease fees. Why am I charged for active shard lease fees?

Troubleshooting log collection failures

Log collection with Logtail may fail due to abnormal Logtail heartbeats, collection errors, or incorrect Logtail configurations. Troubleshooting Logtail log collection failures.

Failure to analyze logs

Log analysis requires field indexes with the statistics feature enabled. Verify the index configuration of your logstore.

Stopping billing

Simple Log Service cannot be disabled after it is activated. If you no longer want to use the service, you can stop billing by deleting all projects under your account.