すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:Node.js SDK クイックスタート

最終更新日:Nov 09, 2025

このトピックでは、Simple Log Service (SLS) SDK for Node.js を使用して、プロジェクトの作成、Logstore の作成、ログの書き込み、ログのクエリなどの一般的な操作を実行する方法について説明します。

前提条件

重要

この例では、中国 (杭州) リージョンのパブリックエンドポイント https://cn-hangzhou.log.aliyuncs.com を使用します。プロジェクトと同じリージョンにある別の Alibaba Cloud サービスから SLS にアクセスする場合は、内部エンドポイント https://cn-hangzhou-intranet.log.aliyuncs.com を使用します。SLS がサポートするリージョンとエンドポイントの詳細については、「エンドポイント」をご参照ください。

パラメーター

createProject

リクエストパラメーター

パラメーター

必須

説明

projectName

String

はい

プロジェクトの名前。名前はグローバルに一意である必要があります。プロジェクトの作成後に名前を変更することはできません。

名前は次の要件を満たす必要があります。

  • 名前に使用できるのは、小文字、数字、ハイフン (-) です。

  • 名前の先頭は小文字、末尾は小文字または数字である必要があります。

  • 名前の長さは 3~63 文字である必要があります。

description

String

はい

プロジェクトの説明。説明の長さは最大 64 文字です。山括弧 (<>)、一重引用符 (')、バックスラッシュ (\)、二重引用符 (") を含めることはできません。

resourceGroupId

String

いいえ

リソースグループの ID。このパラメーターを指定しない場合、デフォルトのリソースグループが使用されます。詳細については、「リソースグループを作成する」をご参照ください。

dataRedundancyType

String

いいえ

デフォルトのストレージ冗長タイプはローカル冗長ストレージです。一部のリージョンでは、ローカル冗長ストレージとゾーン冗長ストレージの両方がサポートされています。ストレージ冗長タイプは、プロジェクトの作成後に変更することはできません。詳細については、「ストレージの冗長性」をご参照ください。

  • LRS: ローカル冗長ストレージ

  • ZRS: ゾーン冗長ストレージ

レスポンスパラメーター

レスポンスパラメーターの詳細については、「CreateProject」をご参照ください。

createLogStore

リクエストパラメーター

パラメーター

必須

説明

projectName

String

はい

プロジェクトの名前。Simple Log Service のプロジェクトは、異なるユーザーのリソースを分離し、特定のリソースへのアクセスを制御するために使用されます。「プロジェクトの管理」をご参照ください。

logstoreName

String

はい

Logstore の名前。名前はグローバルに一意である必要があります。プロジェクトの作成後に名前を変更することはできません。

名前は次の要件を満たす必要があります。

  • 使用できるのは、小文字、数字、ハイフン (-)、アンダースコア (_) です。

  • 先頭は小文字、末尾は小文字または数字である必要があります。

  • 長さは 3~63 文字である必要があります。

ttl

int

いいえ

[データ保持期間] (日数)。有効値: 1~3650。このパラメーターを 3650 に設定すると、データは永続的に保存されます。指定された保存期間が経過すると、ログデータは削除されます。

データ保持期間 (ttl) は、次の期間の合計です。

  • ホットストレージ期間 (hotTtl)

  • 低頻度アクセスストレージ期間 (infrequentAccessTtl)

  • アーカイブストレージ期間

shardCount

int

いいえ

シャードの数。有効値: 1~10。詳細については、「シャードの範囲」をご参照ください。

enableTracking

bool

いいえ

[WebTracking] を有効にするかどうかを指定します。

  • True: [WebTracking] 機能を有効にし、Logstore が有効な認証なしでインターネットからの匿名の書き込みリクエストを受け入れるようにします。これにより、ダーティデータが発生する可能性があります。

  • False (デフォルト): [WebTracking] を無効にします。

説明

[WebTracking] を使用すると、さまざまなブラウザや、iOS および Android アプリからアクセス情報をすばやく収集できます。詳細については、「Web Tracking を使用してログを収集する」をご参照ください。

appendMeta

bool

いいえ

[パブリック IP アドレスを記録] 機能を有効にするかどうかを指定します。

  • true: クライアントの IP アドレスを追加します。この機能を有効にすると、SLS はログのタグフィールドに次の情報を自動的に追加します。

    • __client_ip__: クライアントのパブリック IP アドレス。

    • __receive_time__: ログが到着した時刻 (UNIX タイムスタンプ形式)。

  • false (デフォルト): クライアントの IP アドレスを追加しません。

autoSplit

bool

いいえ

[自動シャード分割] を有効にするかどうかを指定します。

maxSplitShard

int

いいえ

[最大分割数]: [自動シャード分割] を有効にすると、シャードは最大 256 個のパーティションに自動的に分割されます。このパラメーターは、auto_split パラメーターが True に設定されている場合に必須です。

重要

このパラメーターは、auto_split が true に設定されている場合に必須です。

encryptConf

dict

いいえ

暗号化構成のデータ構造。これには、enableencrypt_type、および user_cmk_info パラメーターが含まれます。詳細については、「EncryptConf」および「データ暗号化」をご参照ください。

telemetryType

String

いいえ

可観測性データのタイプ。有効な値:

  • None: ログデータ。これがデフォルト値です。

  • Metrics: メトリック。この場合、次のパラメーターのみが有効になります。

    • logstoreName

    • ttl

    • shardCount

    • autoSplit

    • maxSplitShard

    • appendMeta

重要

このパラメーターは作成後に変更できません

hotTtl

int

いいえ

Logstore のホットストレージレイヤーのデータ保存期間 (日数)。最小値は 7 です。この値は ttl の値より大きくすることはできません。-1 の値は、保持期間 (ttl) 内のすべてのデータがホットストレージとして保存されることを示します。

ホットストレージ期間が終了すると、データは低頻度アクセスストレージに変換されます。ホットストレージ、低頻度アクセスストレージ、およびアーカイブストレージの概念と変換プロセスの詳細については、「インテリジェントな階層型ストレージの管理」をご参照ください。

  • ホットデータは、低頻度アクセスストレージに変換される前に、少なくとも 7 日間保存する必要があります。低頻度アクセスデータは、アーカイブストレージに変換される前に、少なくとも 30 日間保存する必要があります。

  • ホットデータは、アーカイブストレージに変換される前に、少なくとも 30 日間保存する必要があります。

mode

String

いいえ

Simple Log Service は、[標準][クエリ] の 2 種類の Logstore を提供します。

  • standard (デフォルト): ワンストップのデータ分析をサポートします。このタイプは、リアルタイムモニタリング、インタラクティブ分析、完全な可観測性システムの構築などのシナリオに適しています。

  • query: パフォーマンス専有型クエリをサポートします。インデックス作成のトラフィックコストは、[標準] タイプの約半分です。ただし、このタイプは SELECT 文をサポートしておらず、データ量が大きい、保存期間が長い (週単位、月単位、またはそれ以上)、またはログ分析がないシナリオに適しています。

詳細については、「Logstore のタイプ」をご参照ください。

infrequentAccessTtl

int

いいえ

Logstore の低頻度アクセスストレージレイヤーのデータ保存期間 (日数)。低頻度アクセスデータは、アーカイブストレージに変換される前に、少なくとも 30 日間保存する必要があります。詳細については、「インテリジェントな階層型ストレージの管理」をご参照ください。

レスポンスパラメーター

レスポンスパラメーターの詳細については、「CreateLogStore」をご参照ください。

createIndex

リクエストパラメーター

パラメーター

必須

説明

projectName

String

はい

プロジェクトの名前。Simple Log Service のプロジェクトは、異なるユーザーのリソースを分離し、特定のリソースへのアクセスを制御するために使用されます。「プロジェクトの管理」をご参照ください。

logstoreName

String

はい

Logstore の名前。Simple Log Service の Logstore は、ログの収集、保存、クエリに使用されます。「Logstore の管理」をご参照ください。

index

index

はい

インデックス構成。

レスポンスパラメーター

レスポンスパラメーターの詳細については、「CreateIndex」をご参照ください。

getLogs

リクエストパラメーター

パラメーター

必須

説明

projectName

String

はい

プロジェクトの名前。Simple Log Service のプロジェクトは、異なるユーザーのリソースを分離し、特定のリソースへのアクセスを制御するために使用されます。「プロジェクトの管理」をご参照ください。

logstoreName

String

はい

Logstore の名前。Simple Log Service の Logstore は、ログの収集、保存、クエリに使用されます。「Logstore の管理」をご参照ください。

from

int

はい

クエリする時間範囲の開始。値は UNIX タイムスタンプです。

説明
  • Logstore がログを受信する時刻。__tag__:__receive_time__ フィールドは、Simple Log Service の予約フィールドです。

  • 開始時刻と終了時刻によって定義される時間範囲。時間範囲は、左閉じ右開きの区間です。この間隔には時間範囲の開始時刻は含まれますが、終了時刻は含まれません。両方が同じ場合、間隔は無効になり、エラーが返されます。

  • 完全なデータをクエリできるようにするには、分単位で正確なクエリ時間範囲を指定します。分析文で時間範囲も指定した場合、その時間範囲がクエリと分析に使用されます。

  • 秒単位で正確な時間範囲を指定する場合は、日付と時刻の関数を使用して時刻形式を変換できます。例:

    • * | 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__ フィールドは、Simple Log Service の予約フィールドです。

  • 開始時刻と終了時刻によって定義される時間範囲。時間範囲は、左閉じ右開きの区間です。この間隔には時間範囲の開始時刻は含まれますが、終了時刻は含まれません。両方が同じ場合、間隔は無効になり、エラーが返されます。

  • 完全なデータをクエリできるようにするには、分単位で正確なクエリ時間範囲を指定します。分析文で時間範囲も指定した場合、その時間範囲がクエリと分析に使用されます。

  • 秒単位で正確な時間範囲を指定する場合は、日付と時刻の関数を使用して時刻形式を変換できます。例:

    • * | 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

いいえ

ログのトピック。デフォルト値は空の文字列です。詳細については、「ログトピック」をご参照ください。

query

String

いいえ

検索文または分析文。詳細については、「クエリと分析の概要」をご参照ください。専用 SQL を使用するには、query パラメーターの分析文に set session parallel_sql=true; を追加します。例: * | set session parallel_sql=true; select count(*) as pv。一般的なクエリと分析の問題については、「ログのクエリと分析時に発生する一般的なエラー」をご参照ください。

説明

query パラメーターに分析文 (SQL 文) が含まれている場合、この API 操作の 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 パラメーターを使用するだけでなく、query パラメーターを使用して専用 SQL を構成することもできます。

レスポンスパラメーター

レスポンスパラメーターの詳細については、「GetLogs」をご参照ください。

Node.js コードを記述してログを収集する

この例では、SLSQuickStart.js という名前のファイルが作成されます。このファイルは API 操作を呼び出して、プロジェクトの作成、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,
    // SLS のエンドポイント。この例では、中国 (杭州) リージョンのエンドポイントを使用します。実際のエンドポイントに置き換えてください。
    endpoint: 'cn-hangzhou.log.aliyuncs.com'
})
// 必須。プロジェクトの名前。
const projectName = "aliyun-test-node-project"
// 必須。Logstore の名前。
const logstoreName = "request_log"


async function test() {
    // プロジェクトを作成します。
    await sls.createProject(projectName, {
        description: 'test'
    })
    // Logstore を作成します。
    await sls.createLogStore(projectName, logstoreName, {
        // 必須。データ保持期間 (日数)。値 3650 は、データが永続的に保存されることを示します。
        ttl: 3600,
        // 必須。シャードの数。
        shardCount: 2
    })
    // インデックスを作成します。
    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: クエリ文を使用して、過去 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)
}
// 関数を実行します。
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

プロジェクト、Logstore、インデックスの作成、ログの書き込み、ログと Logstore のクエリ、ログの分散の取得方法の例。

Logtail を使用して Node.js ログを収集する

Logtail を使用して Node.js アプリケーションから log4js ログを収集する方法の例については、「Node.js ログの収集」をご参照ください。