全部產品
Search
文件中心

Simple Log Service:Node.js SDK快速入門

更新時間:Aug 30, 2025

本文介紹如何快速使用Log ServiceNode.js SDK完成常見操作,包括建立專案(Project)、建立日誌庫(Logstore)、寫入日誌和查詢日誌等。

前提條件

注意事項

本樣本以華東1(杭州)的公網Endpoint為例,其公網Endpoint為https://cn-hangzhou.log.aliyuncs.com。如果您通過與Project同地區的其他阿里雲產品訪問Log Service,請使用內網Endpointhttps://cn-hangzhou-intranet.log.aliyuncs.com。關於Log Service支援的地區與Endpoint的對應關係,請參見服務入口

參數說明

createProject

請求參數

變數

類型

是否必填

說明

projectName

String

Project名稱全域唯一,且建立後不可修改。

其命名規則如下:

  • 僅支援小寫字母、數字和連字號(-)。

  • 必須以小寫字母開頭,以小寫字母和數字結尾

  • 名稱長度為3~63個字元。

description

String

Project的描述:不支援角括弧(<>)、撇號(')、反斜線(\)、雙引號(")和兩個反斜線(\\),最多包含64個字元。

resourceGroupId

String

資源群組ID,如果不指定,將使用預設資源群組。更多資訊,請參見建立資源群組

dataRedundancyType

String

預設使用本地備援儲存體,部分地區提供本地備援儲存體和同城冗餘儲存兩種儲存冗餘類型,Project建立後不支援修改冗餘儲存類型。更多資訊,請參見儲存冗餘

  • LRS:本地備援儲存體

  • ZRS:同城冗餘儲存

返回參數

返回參數請參見:CreateProject - 建立Project

createLogStore

請求參數

變數

類型

是否必填

說明

projectName

String

Project名稱:專案(Project)是Log Service的資源嵌入式管理單元,是進行多使用者隔離與存取控制的主要邊界。更多資訊,請參見管理Project

logstoreName

String

Logstore名稱在Project中全域唯一,且建立後不可修改。

其命名規則如下:

  • 僅支援小寫字母、數字、連字號(-)和底線(_)。

  • 必須以小寫字母開頭,以小寫字母和數字結尾。

  • 名稱長度為3~63個字元。

ttl

int

資料儲存時間,單位為天。取值範圍:1~3650,如果配置為3650,表示永久儲存。當設定的儲存期限到達時,日誌將被刪除。

資料儲存時間(ttl)是以下三部分時間的總和:

  • 熱儲存資料儲存時間(hotTtl

  • 低頻儲存資料儲存時間(infrequentAccessTtl

  • Archive Storage資料儲存時間

shardCount

int

分區(Shard)數量。取值範圍為1~10。更多資訊,請參見Shard範圍

enableTracking

bool

是否啟用WebTracking

  • True:開啟WebTracking功能,則表示該Logstore開啟互連網匿名寫入許可權,沒有經過有效鑒權,可能產生髒資料。

  • False(預設值):關閉WebTracking

說明

WebTracking支援快速採集各種瀏覽器以及iOS/Android/APP的訪問資訊。更多資訊,請參見使用Web Tracking採集日誌

appendMeta

bool

是否開啟記錄外網IP功能。

  • True:開啟記錄外網IP功能,開啟後Log Service自動把以下資訊添加到日誌的Tag欄位中。

    • __client_ip__:用戶端外網IP。

    • __receive_time__:日誌到達時間,格式為Unix時間戳記。

  • False(預設值):不開啟記錄外網IP功能。

autoSplit

bool

是否開啟自動分裂Shard

maxSplitShard

int

最大分裂數:開啟自動分裂Shard後,最大可支援自動分裂至256個分區。當auto_split參數為True時必須設定。

重要

auto_split為True時必須指定。

encryptConf

dict

加密配置資料結構,包含參數enableencrypt_typeuser_cmk_info。更多資訊,請參見EncryptConf資料加密

telemetryType

String

可觀測資料類型。取值包括:

  • None:日誌資料。預設為日誌資料。

  • Metrics:時序資料。此時只有以下參數生效:

    • logstoreName

    • ttl

    • shardCount

    • autoSplit

    • maxSplitShard

    • appendMeta

重要

此參數建立後不可修改

hotTtl

int

資料在Logstore熱儲存層中的儲存時間,單位為天。最小為7,最大不能超過ttl的值,取值為-1代表儲存時間ttl內全是熱儲存。

當資料的儲存時間超過您所配置的熱儲存層資料儲存時間後,資料將轉為低頻儲存。關於熱儲存、低頻儲存、Archive Storage的概念和轉換流程,請參見管理智能儲存分層

  • 熱儲存資料至少需要儲存7天才能轉換為低頻儲存,低頻儲存至少需要儲存30天才能轉換為Archive Storage。

  • 熱儲存資料至少需要儲存30天才能轉換為Archive Storage。

mode

String

Simple Log Service提供Standard(標準型)和Query(查詢型)兩種類型的Logstore。

  • standard(預設值):支援Log Service一站式資料分析功能,適用於即時監控、互動式分析以及構建完整的可觀測性系統等情境。

  • query:支援高效能查詢,索引流量費用約為Standard的一半,但不支援SELECT語句,適用於資料量大、儲存周期長(周、月層級以上)或無日誌分析的情境。

更多資訊,請參見Logstore類型對比

infrequentAccessTtl

int

資料在Logstore低頻儲存層中的儲存時間,單位:天。低頻儲存資料至少需要儲存30天才能轉換為Archive Storage。更多資訊,請參見管理智能儲存分層

返回參數

返回參數請參見:CreateLogStore - 建立LogStore

createIndex

請求參數

名稱

類型

是否必填

說明

projectName

String

Project名稱:專案(Project)是Log Service的資源嵌入式管理單元,是進行多使用者隔離與存取控制的主要邊界。更多資訊,請參見管理Project

logstoreName

String

Logstore名稱:Logstore是Log Service中日誌資料的採集、儲存和查詢單元。更多資訊,請參見管理Logstore

index

index

索引配置資訊。

返回參數

返回參數請參見:CreateIndex - 建立索引

getLogs

請求參數

名稱

類型

是否必填

說明

projectName

String

Project名稱:專案(Project)是Log Service的資源嵌入式管理單元,是進行多使用者隔離與存取控制的主要邊界。更多資訊,請參見管理Project

logstoreName

String

Logstore名稱:Logstore是Log Service中日誌資料的採集、儲存和查詢單元。更多資訊,請參見管理Logstore

from

int

查詢開始的時間點,使用Unix時間戳記格式。

說明
  • 該時間為日誌到達Logstore的時間。更多資訊,請參見保留欄位__tag__:__receive_time__

  • 開始時間點和結束時間點定義的時間區間。遵循左閉右開原則,即該時間區間包括區間開始時間點,但不包括區間結束時間點。如果開始時間點和結束時間點相同,則為無效區間,函數直接返回錯誤。

  • 如果您要確保不漏查資料,請將查詢時間對齊到分鐘層級。如果您在分析語句中設定了時間範圍,則查詢分析時以該時間範圍為準。

  • 如果您需要在分析語句中指定時間範圍並精確到秒時,可使用日期和時間函數或日期和時間函數轉換下時間格式。例如:

    • * | SELECT * FROM log WHERE from_unixtime(__time__) > from_unixtime(1664186624) AND from_unixtime(__time__) < now()

    • * | SELECT * FROM log WHERE __time__ > to_unixtime(date_parse('2022-10-19 15:46:05', '%Y-%m-%d %H:%i:%s')) AND __time__ < to_unixtime(now())

to

int

查詢結束的時間點,使用Unix時間戳記格式。

說明
  • 該時間為日誌到達Logstore的時間。更多資訊,請參見保留欄位__tag__:__receive_time__

  • 開始時間點和結束時間點定義的時間區間。遵循左閉右開原則,即該時間區間包括區間開始時間點,但不包括區間結束時間點。如果開始時間點和結束時間點相同,則為無效區間,函數直接返回錯誤。

  • 如果您要確保不漏查資料,請將查詢時間對齊到分鐘層級。如果您在分析語句中設定了時間範圍,則查詢分析時以該時間範圍為準。

  • 如果您需要在分析語句中指定時間範圍並精確到秒時,可使用日期和時間函數或日期和時間函數轉換下時間格式。例如:

    • * | SELECT * FROM log WHERE from_unixtime(__time__) > from_unixtime(1664186624) AND from_unixtime(__time__) < now()

    • * | SELECT * FROM log WHERE __time__ > to_unixtime(date_parse('2022-10-19 15:46:05', '%Y-%m-%d %H:%i:%s')) AND __time__ < to_unixtime(now())

topic

String

日誌主題。預設值為空白字串。更多資訊,請參見日誌主題(Topic)

query

String

查詢語句或分析語句。更多資訊,請參見查詢與分析概述。 在query參數的分析語句中加上set session parallel_sql=true;,表示使用 SQL 獨享版。例如* | set session parallel_sql=true; select count(*) as pv。常見查詢與分析問題,請參見查詢與分析日誌的常見報錯

說明

query參數中有分析語句(SQL 陳述式)時,該介面的line參數和offset參數無效。建議設定該介面的參數為0,需通過SQL語句的LIMIT文法實現翻頁。更多資訊,請參見分頁顯示查詢分析結果

line

int

僅當query參數為查詢語句時,該參數有效。表示請求返回的最大日誌條數,最小值為 0,最大值為 100,預設值為 100。

offset

int

僅當query參數為查詢語句時,該參數有效。表示查詢開始行。預設值為 0。

reverse

bool

用於指定返回結果是否按日誌時間戳記降序返回日誌,精確到分鐘層級。

  • True:按照日誌時間戳記降序返回日誌。

  • False(預設值):按照日誌時間戳記升序返回日誌。

重要
  • query參數為查詢語句時,參數reverse有效,用於指定返回日誌排序方式。

  • query參數為查詢和分析語句時,參數reverse無效,由SQL分析語句中order by指定排序方式。

powerSql

bool

是否使用SQL獨享版。更多資訊,請參見高效能完全精確查詢與分析(SQL獨享版)

  • True:使用SQL獨享版。

  • False(預設值):使用SQL普通版。

除通過powerSql參數配置SQL獨享版外,您還可以使用query參數。

返回參數

返回參數請參見:GetLogs - 查詢日誌庫日誌

樣本

編寫Node.js代碼採集日誌

本樣本中,建立一個SLSQuickStart.js檔案,並調用介面分別完成建立Project、建立Logstore、建立索引、寫入日誌資料和查詢日誌資料。以下為範例程式碼:


const Client = require('@alicloud/log')
const sls = new Client({
    // 本樣本從環境變數中擷取AccessKey ID和AccessKey Secret。
    accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
    accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
    //Log Service的網域名稱。此處以杭州為例,其它地區請根據實際情況填寫。 
    endpoint: 'cn-hangzhou.log.aliyuncs.com'
})
// 必選,Project名稱。
const projectName = "aliyun-test-node-project"
// 必選,Logstore名稱。
const logstoreName = "request_log"


async function test() {
    // 建立Project
    await sls.createProject(projectName, {
        description: 'test'
    })
    // 建立Logstore
    await sls.createLogStore(projectName, logstoreName, {
        // 必選,設定資料儲存時間長度,單位為天。如果ttl配置為3650,表示永久儲存。
        ttl: 3600,
        // 必選,設定Shard數量。
        shardCount: 2
    })
    // 建立index
    const index = {
        "keys": {
            "request_method": {
                // 是否大小寫敏感  false為大小寫不敏感。
                "caseSensitive": false,
                // 是否對該欄位開啟統計分析
                "doc_value": true,
                "token": ["\n", "\t", ";", ",", "=", ":"],
                "type": "text"
            }, "status": {
                // 是否大小寫敏感  false為大小寫不敏感。
                "caseSensitive": false,
                // 是否對該欄位開啟統計分析
                "doc_value": true,
                "token": ["\n", "\t", ";", ",", "=", ":"],
                "type": "long"
            }
        },
    }
    await sls.createIndex(projectName, logstoreName, index)
    // 寫入日誌
    const logGroup = {
        logs: [
          { content: { request_method: 'GET', status: '200' }, timestamp: Math.floor(new Date().getTime() / 1000) },
          { content: { request_method: 'GET', status: '500' }, timestamp: Math.floor(new Date().getTime() / 1000) },
          { content: { request_method: 'GET', status: '200' }, timestamp: Math.floor(new Date().getTime() / 1000) },
          { content: { request_method: 'POST', status: '500'}, timestamp: Math.floor(new Date().getTime() / 1000) }
        ],
        tags: [{ tag1: 'testTag' }],
        topic: 'testTopic',
        source: 'testSource'
      };
      await sls.postLogStoreLogs(projectName, logstoreName, logGroup);
      // 查詢日誌樣本1:查詢最近1天的日誌資料。
      const from = new Date();
      from.setDate(from.getDate() - 1);
      const to = new Date();
      const res = await sls.getLogs(projectName, logstoreName, from, to);
      
      // 查詢日誌樣本2:通過query分析語句,統計最近10分鐘的日誌條數。
      // const from = new Date();
      // from.setSeconds(from.getSeconds() - 600)
      // const to = new Date();
      // query = '* | select count(*) as count';
      // topic = 'testTopic';
    
      // const res = await sls.getLogs(projectName,logstoreName,from,to,{
      //     query: query,
      //     topic: topic,
      //     line: 100,
      //     offset: 0,
      //     reverse: false,
      //     powersql: false
      // });
      
      console.log(res)
}
// 運行function。
test()

返回結果樣本如下:

[
  {
    request_method: 'GET',
    status: '200',
    __topic__: 'testTopic',
    __source__: 'testSource',
    '__tag__:tag1': 'testTag',
    __time__: '1744882259'
  },
  {
    request_method: 'GET',
    status: '500',
    __topic__: 'testTopic',
    __source__: 'testSource',
    '__tag__:tag1': 'testTag',
    __time__: '1744882259'
  },
  {
    request_method: 'GET',
    status: '200',
    __topic__: 'testTopic',
    __source__: 'testSource',
    '__tag__:tag1': 'testTag',
    __time__: '1744882259'
  },
  {
    request_method: 'POST',
    status: '500',
    __topic__: 'testTopic',
    __source__: 'testSource',
    '__tag__:tag1': 'testTag',
    __time__: '1744882259'
  }
]

更多範例程式碼如下表,方便您參考或直接使用。

GitHub源碼

說明

integration.test.js

建立Project、建立Logstore、建立索引、寫入日誌、查詢日誌、查詢Logstore、擷取日誌分布情況等相關樣本。

通過Logtail採集Node.js日誌

通過Logtail方式,以採集Node.js的log4js日誌為例,請參見採集Node.js日誌