全部產品
Search
文件中心

Simple Log Service:使用LoongCollector採集並分析ECS文本日誌

更新時間:Jan 29, 2026

通過本快速入門,可在30分鐘內從零開始,使用Log Service(SLS)的LoongCollector資料擷取器採集一台ECS伺服器上的Nginx日誌。內容包括配置日誌採集、通過SQL查詢分析資料、查看可視化儀錶盤、設定警示,以及在體驗結束後清理資源以避免產生費用。

image

前置準備

開通服務與準備帳號

  • 開通Log Service:首次使用時,請登入Log Service控制台,根據頁面提示開通服務。

  • 準備帳號:

    • 阿里雲主帳號登入:預設擁有全部許可權,可直接操作。

    • RAM使用者登入:需要主帳號授權相應權限原則:

      • AliyunLogFullAccess:用於建立和管理Log Service的Project和LogStore等資源。

      • AliyunECSFullAccess:用於在ECS執行個體上安裝採集Agent。

      • AliyunOOSFullAccess:用於通過阿里雲營運編排服務(OOS)在ECS執行個體中自動安裝採集Agent。

      在實際生產過程中,可以通過建立自訂權限原則,對RAM使用者實現更精細化的許可權管理

準備ECS執行個體

確保ECS執行個體的安全性群組配置滿足出口方向開放80(HTTP)連接埠和443(HTTPS)連接埠。

產生類比日誌

  1. 登入ECS執行個體

  2. 建立指令碼檔案 generate_nginx_logs.sh 並粘貼以下內容。該指令碼向/var/log/nginx/access.log檔案中每5秒寫入一條標準的Nginx訪問日誌。

    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' 不存在,正在嘗試建立..."
        # 使用 sudo 建立目錄,因為通常需要 root 許可權
        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 "開始產生NGINX類比日誌到 $LOG_FILE ..."
    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)
        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 &

建立Project和LogStore

Project是Log Service的資源嵌入式管理單元,用於隔離不同專案的資料;LogStore是日誌資料的儲存單元。

  1. 登入Log Service控制台

  2. 單擊建立Project

    • 所屬地區:選擇與ECS執行個體相同的地區,即可通過阿里雲內網採集日誌,加快日誌採集速度。

    • Project名稱:輸入一個在阿里雲內全域唯一的名稱,例如 nginx-quickstart-abc

  3. 其他配置保持預設,單擊建立

  4. 在Project建立成功頁面,單擊建立LogStore

  5. 輸入LogStore名稱(例如 nginx-access-log),其他配置無需修改,單擊確定

    預設情況下建立的是標準型按寫入資料量計費的LogStore 。

安裝LoongCollector

  1. 在建立LogStore成功的彈窗中,單擊確定,開啟快速資料接入面板。

  2. 單擊Nginx - 文本日誌卡片的立即接入

  3. 機器組配置

    • 使用情境主機情境

    • 安裝環境ECS

  4. 單擊建立機器組,在彈出面板中,選擇目標ECS執行個體。

  5. 單擊安裝並建立為機器組,安裝成功後,配置機器組名稱(例如 my-nginx-server),單擊確定

    說明

    如果安裝失敗或一直處於等待中,請檢查ECS地區是否與Project相同。

  6. 單擊下一步,檢測機器組心跳狀態。

    首次建立機器組,如果心跳為FAIL,單擊自動重試,等待兩分鐘左右心跳會變為OK。

建立採集配置

  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,複製並粘貼如下內容,單擊確認

        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 : Mozi11a/5.0 (Nindows NT 10.0; Win64; x64) AppleMebKit/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:按分鐘統計請求量與錯誤率

    計算每分鐘的總請求數、錯誤請求數(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解析外掛程式後,Log Service會自動建立一個名為nginx-access-log_Nginx訪問日誌的預設儀錶盤。

  1. 在左側導覽列中,單擊 image儀錶盤 > 儀錶盤列表

  2. 找到並單擊該儀錶盤名稱,查看包含PV、UV、錯誤率、要求方法分布等多個核心指標的可視化圖表。

  3. 所有圖表均可根據業務需求自訂修改

image

配置監控警示

配置一條警示規則,當服務出現異常(例如錯誤數激增)時,自動發送通知。

  1. 在左側導覽列中,單擊image警示

  2. 建立行動策略:

    • 通知策略 > 行動策略頁簽下,單擊建立

    • 配置標識符名稱(例如send-notification-to-admin)。

    • 第一行動列表中,單擊image行動組

    • 選擇渠道(例如簡訊),並配置接收人,選擇內容範本

    • 單擊 確認

  3. 建立警示規則:

    1. 切換到警示規則頁簽,單擊建立警示

    2. 規則名稱:輸入描述性名稱,例如 伺服器5xx錯誤數過多

    3. 查詢統計:單擊添加,配置查詢條件。

      • 日誌庫:選擇已建立的 nginx-access-log

      • 查詢區間15分鐘(相對)

      • 查詢:輸入status >= 500 | SELECT *

      • 單擊預覽,確認可以查詢到資料,單擊確定

    4. 觸發條件:配置為當:有特定條資料>100條時,觸發嚴重警示。

      該配置表示15分鐘內出現超過100個5xx錯誤時觸發警示。
    5. 輸出目標:選擇SLS通知開啟

      • 行動策略:選擇上一步建立的行動策略。

      • 重複等待:設定為15分鐘,避免過多的週期性通知。

    6. 單擊確定,儲存警示規則。

  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. 刪除Project。

    1. Log Service控制台Project列表頁面,找到已建立的Project(例如 nginx-quickstart-xxx)。

    2. 在右側操作列單擊刪除

    3. 在刪除面板中,輸入Project名稱,選擇刪除原因。

    4. 單擊確定,刪除Project將同時刪除其下的LogStore、採集配置、儀錶盤、警示規則等所有關聯資源。

    警告

    刪除Project後,其管理的所有日誌資料及配置資訊都會被釋放且不可恢複。刪除前請謹慎確認,避免資料丟失。

後續步驟

通過本教程,您已成功完成日誌採集、查詢分析、可視化儀錶盤和警示配置的全流程操作。建議您繼續閱讀以下文檔,深入理解核心概念,並結合業務需求合理規劃日誌資源體系:

常見問題

採集日誌後,顯示時間與原始日誌時間不一致怎麼辦?

預設情況下,Log Service的時間欄位(__time__)使用的是日誌到達伺服器的時間。若要使用日誌原文中的時間,需要在採集配置中添加時間解析外掛程式

僅建立Project和LogStore,會產生費用嗎?

當您在建立LogStore時,Log Service預設預留Shard資源,因此可能產生活躍Shard租用費用。更多資訊,請參見為什麼會產生活躍Shard租用費用?

日誌採集失敗,如何排查?

使用Logtail採集日誌失敗,可能是因為Logtail心跳異常、採集錯誤、Logtail採集配置錯誤等原因。如何排查,請參見Logtail採集日誌失敗的排查思路

為什麼可以查詢到日誌,但無法進行分析?

分析日誌需要為相關欄位配置欄位索引並開啟統計功能,請檢查LogStore的索引配置

如何停止Log Service計費?

Log Service開通後無法關閉,如果不再使用Log Service,可以刪除帳號下的所有Project即可停止計費