本文介紹如何快速使用Log ServiceNode.js SDK完成常見操作,包括建立專案(Project)、建立日誌庫(Logstore)、寫入日誌和查詢日誌等。
前提條件
已建立RAM使用者並完成授權。具體操作,請參見建立RAM使用者並完成授權。
已配置環境變數ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_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日誌。