全部產品
Search
文件中心

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

更新時間:Jun 30, 2024

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

前提條件

  • 已建立RAM使用者並完成授權。具體操作,請參見建立RAM使用者並完成授權

  • 已配置環境變數ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET。具體操作,請參見在Linux、macOS和Windows系統配置環境變數

    重要
    • 阿里雲帳號的AccessKey擁有所有API的存取權限,建議您使用RAM使用者的AccessKey進行API訪問或日常營運。

    • 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。

  • 已完成Node.js SDK安裝。更多資訊,請參見安裝Node.js SDK

樣本

  • 直接編寫Node.js代碼採集日誌

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

    const ALY = require('aliyun-sdk')
    var sls = new ALY.SLS({
        // 本樣本從環境變數中擷取AccessKey ID和AccessKey Secret。
        "accessKeyId": process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,                  
        "secretAccessKey": process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,         
        //Log Service的網域名稱。此處以杭州為例,其它地區請根據實際情況填寫。 
        endpoint: 'http://cn-hangzhou.log.aliyuncs.com', 
        //SDK版本號碼,固定值。
        apiVersion: '2015-06-01'                         
      })
    // 必選,Project名稱。
    const projectName = "you_project_name"
    // 必選,Logstore名稱。
    const logstoreName= "your_logstore_name"             
    
    // 建立Project。
    function createProject () {
      const param = {
        projectDetail: {
          projectName,                                  
          description: "description about project"      
        }
      }
    
      sls.createProject(param, function(err, data) {
        if (err) {
          console.error('error:', err)
        } else {
          console.log('建立project', data)
        }
      })
    }
    
    // 建立Logstore。
    function createLogStore() {
      const param = {
        projectName,                                
        logstoreDetail: {
          logstoreName: logstoreName,               
          // 必選,設定資料儲存時間長度,單位為天。如果ttl配置為3650,表示永久儲存。
          ttl: 3,                                   
          // 必選,設定Shard數量。
          shardCount: 2                             
        }
      }
    
      sls.createLogstore(param, function (err, data) {
        if (err) {
          console.log(err)
        } else {
          console.log('建立LogStore', data)
        }
      })
    }
    // 建立LogStore索引。
    function createIndex () {
      const param = {
        projectName,
        logstoreName,
        indexDetail: {
          line: {
            token: [";"],
            include_keys: ["key2", "key3"],
            caseSensitive:false
          }
        }
      }
    
      sls.createIndex(param, function(err, data) {
        if (err) {
          console.log(err)
        } else {
          console.log('為logStore建立索引成功', data)
        }
      })
    }
    // 寫入日誌。
    function writeLog () {
      const param = {
        projectName,                                  
        logStoreName: logstoreName,                   
        logGroup: { 
        // 必選,寫入的日誌資料。
          logs: [
            {
              time:  Math.floor(new Date().getTime() / 1000),
              contents: [
                { key: 'a', value: '1' },
                { key: 'a', value: '2' },
                { key: 'a', value: '3' }
              ]
            }
          ],
          topic: 'vv',
          source: '127.0.0.1'
        }
      }
    
      sls.putLogs(param, function (err, data) {
        if (err) {
          console.error('error:', err)
        } else {
          console.log('寫入日誌成功', data)
        }
      })
    }
    
    // 查詢日誌。
    function queryLog () {
      // 查詢最近一個小時的日誌
      const to = Math.floor(new Date().getTime() / 1000)
      const from = to - 3600
    
      const param = {
        // 必選,Project名稱。
        projectName,     
        // 必選,Logstore名稱。
        logStoreName: logstoreName,  
        // 必選,開始時間,精度為秒。
        from,   
        // 必選,結束時間,精度為秒。
        to,  
        // 可選,指定日誌主題。
        topic: "",  
        // 可選,查詢的關鍵詞,不輸入則查詢全部日誌資料。
        query: ""                                    
      }
    
      sls.getLogs(param, function (err, data) {
        if(err) {
          console.error('error:', err)
        } else{
          console.log('查詢近一個小時的日誌', data)
        }
      })
    }
    // 運行function。
    createProject()
    
    setTimeout(() => {
      createLogStore()
    }, 10 * 1000)
    
    setTimeout(() => {
      createIndex()
    }, 20 * 1000)
      
    setTimeout(() => {
      writeLog()
    }, 80 * 1000)
      
    setTimeout(() => {
      queryLog()
    }, 90 * 1000)

    返回結果樣本如下:

    建立project {request_id: '6125F2E882518E4618E7C316', headers: {…}, body: {…}}
    建立LogStore {request_id: '6125F2F295D4E2210BE5BD59', headers: {…}, body: {…}}
    為logStore建立索引成功 {request_id: '6125F2FCE681A8360B6B3365', headers: {…}, body: {…}}
    寫入日誌成功 {request_id: '6125F3380EBCCCA1834DBD83', headers: {…}, body: {…}}
    查詢近一個小時的日誌 {request_id: '6125F34214C3A33B68052D5C', headers: {…}, body: {…}}

    更多範例程式碼,請參見Aliyun Log Node.js SDK

  • 通過Logtail採集Node.js日誌

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