本文介绍如何快速使用日志服务Node.js SDK完成常见操作,包括创建项目(Project)、创建日志库(Logstore)、写入日志和查询日志等。

前提条件

已完成Node.js SDK安装。更多信息,请参见安装Node.js SDK

示例代码

本示例中,创建一个SLSQuickStart.js文件,并调用接口分别完成创建Project、创建Logstore、创建索引、写入日志数据和查询日志数据。以下为示例代码:
const ALY = require('aliyun-sdk')
var sls = new ALY.SLS({
    accessKeyId: "11****ut",                         //阿里云访问密钥AccessKey ID。更多信息,请参见访问密钥。阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维。 
    secretAccessKey: "TS****7Y",                     //阿里云访问密钥AccessKey Secret。 
    endpoint: 'http://cn-hangzhou.log.aliyuncs.com', //日志服务的域名。更多信息,请参见服务入口。此处以杭州为例,其它地域请根据实际情况填写。
    apiVersion: '2015-06-01'                         //SDK版本号,固定值。
  })

const projectName = "you_project_name"               // 必选,Project名称。
const logstoreName= "your_logstore_name"             // 必选,Project描述。

// 创建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: 3,                                   // 必选,设置数据保存时长,单位为天。如果ttl配置为3650,表示永久保存。
      shardCount: 2                             // 必选,设置Shard数量。
    }
  }

  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 = {
    projectName,                                  // 必选,Project名称。
    logStoreName: logstoreName,                   // 必选,Logstore名称。
    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)

更多示例代码,请参见Aliyun Log Node.js SDK

返回结果

返回结果示例如下:

创建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: {…}}