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

Simple Log Service:クイックスタート:SLS SDK を使用したログのアップロードと分析

最終更新日:Jun 23, 2026

Simple Log Service (SLS) SDK を使用すると、プログラムでログをアップロードできます。このクイックスタートでは、Python SDK を使用してログをアップロードし、コンソールでデータを可視化し、異常に対するアラートを設定する方法を説明します。

前提条件

  • 利用可能な Elastic Compute Service (ECS) インスタンスがあること。詳細については、「ECS クイックスタート」をご参照ください。

  • Simple Log Service を有効化していること。詳細については、「Simple Log Service の有効化」をご参照ください。

  • Python および PyCharm などの Python 開発環境がインストールされていること。

    SLS SDK for Python は、次のバージョンをサポートしています。

    • Python 2: 2.7 以降

    • Python 3: 3.7 以降

    • PyPy 2: 2.7 以降

    • PyPy 3: 3.7 以降

ソリューション概要

このクイックスタートでは、次のことを学びます。

  • プロジェクト (リソース管理ユニット) と Logstore (ログストレージユニット) を作成します。

  • Python SDK を使用して Logstore にログをアップロードし、インデックスを作成してから、ログのクエリと分析を行います。

  • 分析結果をダッシュボード上のチャートとして可視化します。

  • モニタリングのためのアラートルールを設定します。

  • 不要なリソースをクリーンアップして、課金を回避します。

1. プロジェクトと Logstore の作成

1.1 プロジェクトの作成

Simple Log Service コンソールにログインします。「プロジェクト」セクションで、プロジェクトの作成 をクリックします。プロジェクトの作成 パネルで、リージョン を選択し、プロジェクト名 を入力します。このドキュメントでは、China (Hangzhou) リージョンにある aliyun-test-project という名前のプロジェクトを例として使用します。その他のパラメーターはデフォルト値のままにします。

1.2 Logstore の作成

2. SDK のインストール

  1. コマンドラインインターフェイス (CLI) で、管理者として次のコマンドを実行して Python SDK をインストールします。バージョンの詳細については、「Aliyun Log Python Release」をご参照ください。

    pip install -U aliyun-log-python-sdk
  2. SDK がインストールされた後、次のコマンドを実行してインストールを検証します。

    pip show aliyun-log-python-sdk

    次の出力は、SDK がインストールされたことを示します。

    Name: aliyun-log-python-sdk
    Version: 0.9.12
    Summary: Aliyun log service Python client SDK
    Home-page: https://github.com/aliyun/aliyun-log-python-sdk
    Author: Aliyun

3. クライアントの初期化

`LogClient` は SLS のクライアントです。プロジェクトや Logstore の作成、ログの書き込みと読み取りを行うメソッドを提供します。AccessKey ペア (V1 署名) を使用してクライアントを初期化するには、次の手順に従います。

  1. AccessKey ペアを取得します。Alibaba Cloud コンソールで、AccessKey を作成し、access_key_idaccess_key_secret を取得します。

  2. ご使用のオペレーティングシステム (Linux、macOS、または Windows) に基づいて、ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET などのキーを 環境変数として設定します。

  3. エンドポイントを設定します。このドキュメントでは、中国 (杭州) リージョンを例として、 endpointcn-hangzhou.log.aliyuncs.com に設定します。他のリージョンの場合は、値を対応するエンドポイントに置き換えます。

# SLS パッケージをインポートします。
from aliyun.log import *
# このモジュールをインポートして、環境変数から AccessKey ペアを取得します。
import os
# 環境変数から AccessKey ID と AccessKey Secret を取得します。
access_key_id = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID', '')
access_key_secret = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET', '')
# Simple Log Service のエンドポイント。
endpoint = "cn-hangzhou.log.aliyuncs.com"
# LogClient インスタンスを作成します。
client = LogClient(endpoint, access_key_id, access_key_secret)

4. ログのアップロード

この例では、put_logs API オペレーションを呼び出してログデータをアップロードします。以下は生ログの例です。

10.0.*.1 - - [14/Jul/2025:12:00:03 +0000] "POST /login HTTP/1.1" 302 0 "http://example.com/login.html" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36"  

put_logs API オペレーションを使用する際、ログのコンテンツをフィールドごとに構造化すると、その後の分析が容易になります。

# プロジェクトの名前。
project_name = "aliyun-test-project"
# Logstore の名前。
logstore_name = "aliyun-test-logstore"
# Logstore にデータを書き込みます。
def put_logs():
    print("ready to put logs for %s" % logstore_name)
    log_group = []
    for i in range(0, 100):
        log_item = LogItem()
        # フィールドごとにログコンテンツを設定します。
        contents = [
            ('remote_addr', '192.168.0.%d' % (i % 255)),
            ('remote_user', 'user%d' % i),
            ('time_local', time.strftime('%d/%b/%Y:%H:%M:%S +0000', time.gmtime())),
            ('request_method', 'GET' if i % 2 == 0 else 'POST'),
            ('request_uri', '/index.html' if i % 3 == 0 else '/api/data'),
            ('status', str(200 + (i % 100))),  # ステータスコードは 200 から 299 の間です。
            ('body_bytes_sent', str(1024 + i)),
            ('http_referer', 'http://example.com/page%d' % (i // 10)),
            ('http_user_agent',
             'Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.%d Safari/537.36' % (i * 10))
        ]
        log_item.set_contents(contents)
        log_group.append(log_item)
    request = PutLogsRequest(project_name, logstore_name, "", "", log_group, compress=False)
    client.put_logs(request)
    print("put logs for %s success " % logstore_name)
    time.sleep(60)

5. インデックスの作成

アップロードされたログをクエリする前に、インデックスを設定する必要があります。remote_addrremote_usertime_localrequest_methodrequest_uristatusbody_bytes_senthttp_referer、および http_user_agent をインデックスフィールドとして設定します。

# プロジェクトの名前。
project_name = "aliyun-test-project"
# Logstore の名前。
logstore_name = "aliyun-test-logstore"
# インデックス。
logstore_index = {'line': {
    'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t',
              '\r'], 'caseSensitive': False, 'chn': False},
    'keys': {'remote_addr': {'type': 'text', 'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t', '\r'], 'caseSensitive': False, 'alias': 'remote_addr', 'doc_value': True, 'chn': False},
            'remote_user': {'type': 'text', 'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t', '\r'], 'caseSensitive': False, 'alias': 'remote_user', 'doc_value': True, 'chn': False},
            'time_local': {'type': 'text', 'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t', '\r'], 'caseSensitive': False, 'alias': 'time_local', 'doc_value': True, 'chn': False},
            'request_method': {'type': 'text', 'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t', '\r'], 'caseSensitive': False, 'alias': 'request_method', 'doc_value': True, 'chn': False},
            'request_uri': {'type': 'text', 'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t', '\r'], 'caseSensitive': False, 'alias': 'request_uri', 'doc_value': True, 'chn': False},
            'status': {'type': 'long', 'alias': 'status', 'doc_value': True},
            'body_bytes_sent': {'type': 'long', 'alias': 'body_bytes_sent', 'doc_value': True},
            'http_referer': {'type': 'text', 'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t', '\r'], 'caseSensitive': False, 'alias': 'http_referer', 'doc_value': True, 'chn': False},
            'http_user_agent': {'type': 'text', 'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t', '\r'], 'caseSensitive': False, 'alias': 'http_user_agent', 'doc_value': True, 'chn': False}}}
# インデックスを作成します。
def create_index():
    print("ready to create index for %s" % logstore_name)
    index_config = IndexConfig()
    index_config.from_json(logstore_index)
    client.create_index(project_name, logstore_name, index_config)
    print("create index for %s success " % logstore_name)
    time.sleep(60 * 2)

インデックスが作成されると、ログをクエリできます。

SLS コンソールの [生ログ] ページでは、合計 100 件のログが返されます。ログの詳細には、`body_bytes_sent:1024`、`remote_addr:192.168.0.1`、`request_method:GET`、`request_uri:/index.html`、`status:200`、`http_referer:http://example.com/page0` などのインデックスフィールドとその値が含まれます。これは、インデックスが作成され、ログデータが正常に書き込まれ、クエリ可能であることを示します。

6. ログのクエリと分析

手動でログをアップロードして、新しいログが生成されるようにします。クエリと分析の文 *| select request_method,status from aliyun-test-logstore を設定して、ログを取得します。クエリと分析機能の詳細については、「インデックスベースのクエリと分析」をご参照ください。

# プロジェクトの名前。
project_name = "aliyun-test-project"
# Logstore の名前。
logstore_name = "aliyun-test-logstore"
# クエリ文。
query = "*| select request_method,status from " + logstore_name
# from_time と to_time は、クエリの時間範囲を UNIX タイムスタンプ形式で指定します。
from_time = int(time.time()) - 3600
to_time = time.time() + 3600
# SQL を使用してログをクエリします。
def get_logs():
    print("ready to query logs from logstore %s" % logstore_name)
    request = GetLogsRequest(project_name, logstore_name, from_time, to_time, query=query)
    response = client.get_logs(request)
    for log in response.get_logs():
        for k, v in log.contents.items():
            print("%s : %s" % (k, v))
        print("*********************")

次の応答が返されます。

ready to query logs from logstore aliyun-test-logstore
request_method : GET
status : 200
*********************
request_method : POST
status : 201
*********************
request_method : GET
status : 202
*********************
request_method : POST
status : 203
*********************
Process finished with exit code 0

7. データの可視化

  1. チャート編集ページで、解析検索 パネルのドロップダウンリストから Logstore (SQL) を選択します。次に、対応する Logstore を選択し、* | SELECT request_method,status,COUNT(*) AS request_count GROUP BY request_method,status ORDER BY request_count DESC LIMIT 10; を入力します。このクエリは、メソッドと状態コードごとに上位 10 件のリクエスト数を計算します。この例ではフィールドをカウントするため、右側のチャートタイプから テーブル Pro を選択し、次に 適用 をクリックして結果を表示します。可視化が要件を満たしている場合は、OK をクリックし、次にダッシュボードページの右上隅にある 保存 をクリックします。ダッシュボードは、さまざまなチャートタイプ、データフィルタリング、およびサードパーティツールとの統合をサポートしています。詳細については、「可視化の概要」をご参照ください。

8. アラートとモニタリング

8.1 アクションポリシーの作成

  1. 左側のナビゲーションウィンドウで、アラート > 通知ポリシー > アクションポリシー を選択して、作成 をクリックします。

  2. [アクションポリシーの追加] ダイアログボックスで、[Identifier]test-action-policy に、名前New Alert Rule-My Action Policy test に設定したアクションポリシーを作成します。このポリシーは、アラートがトリガーされると DingTalk を使用して通知を送信します。アクショングループの具体的な構成は次のとおりです。

    • チャネル DingTalk-カスタム を選択します。

    • リクエスト URL : DingTalk チャットボットの Webhook (例: https://oapi.dingtalk.com/robot/send?access_token=4dff******6bfe) を入力します。

    • リマインダー リマインダーなし を選択して、DingTalk アラート通知でのメンションを防ぎます。

    • コンテンツテンプレート SLS 組み込みコンテンツテンプレート を選択します。

    • 送信期間 任意の時間 を選択して、アラートが発生するたびにアラート通知を送信します。

SLS は、ユーザー、ユーザーグループ、Webhook 統合、アクションポリシー、アラートポリシー、およびコンテンツテンプレートを管理するための SDK を提供します。詳細については、「アラートリソースデータの管理」をご参照ください。

8.2 アラートルールの作成

  1. 左側のナビゲーションウィンドウで、アラート > アラームルール を選択し、次に アラートの作成 をクリックします。

  2. [アラートを作成] ページで、データが検出されたときに 15 分ごとに DingTalk アラート通知をトリガーするルールを設定します。ルールを次のように設定します。

    • ルール名New Alert Rule

    • チェック頻度15 分の固定間隔

    • クエリ統計

      • タイプLogstore

      • エリア中国 (杭州)

      • プロジェクトaliyun-test-project

      • ログストアaliyun-test-logstore

      • 照会* | select *

      • 検索期間今日

    • グループ評価グループ化なし

    • トリガー条件データがある 場合、重要度 のアラートがトリガーされます。

    • ラベルを追加する: キーを titledesc に設定し、両方の値を ${alert_name} alert is triggered に設定します。

    • ターゲット Logstore: SLS 通知の場合、アクションポリシーを作成済みの test-action-policy に設定します。

    また、EventStoreCloudMonitor イベントセンター の送信先を有効にします。アラートポリシーについては、通常モード を選択し、繰り返し間隔を 1 分 に設定します。

9. リソースのクリーンアップ

課金が発生しないように、このクイックスタートで作成したリソースを削除してください。Logstore が存在している限り、使用されていなくてもアクティブシャードに対して課金されます。次のコードを実行して、プロジェクトとそれに関連するすべてのリソースを削除します。

# プロジェクトの名前。
project_name = "aliyun-test-project"

# 指定されたプロジェクトを削除します。
def main():
    try:
        response = client.delete_project(project_name)
        response.log_print()
    except Exception as error:
        print(error)

完全なサンプルコード

from aliyun.log import LogClient, PutLogsRequest, LogItem, GetLogsRequest, IndexConfig
import time
import os
# この例では、環境変数から AccessKey ID と AccessKey Secret を取得します。
access_key_id = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID', '')
access_key_secret = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET', '')
# Simple Log Service のエンドポイント。この例では中国 (杭州) リージョンを使用します。他のリージョンについては、実際のエンドポイントを指定してください。
endpoint = "cn-hangzhou.log.aliyuncs.com"
# Simple Log Service クライアントを作成します。
client = LogClient(endpoint, access_key_id, access_key_secret)
# プロジェクトの名前。
project_name = "aliyun-test-project"
# Logstore の名前。
logstore_name = "aliyun-test-logstore"
# クエリ文。
query = "*| select request_method,status from " + logstore_name
# from_time と to_time は、クエリの時間範囲を UNIX タイムスタンプ形式で指定します。
from_time = int(time.time()) - 3600
to_time = time.time() + 3600
# インデックス。
logstore_index = {'line': {
    'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t',
              '\r'], 'caseSensitive': False, 'chn': False},
    'keys': {'remote_addr': {'type': 'text', 'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t', '\r'], 'caseSensitive': False, 'alias': 'remote_addr', 'doc_value': True, 'chn': False},
            'remote_user': {'type': 'text', 'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t', '\r'], 'caseSensitive': False, 'alias': 'remote_user', 'doc_value': True, 'chn': False},
            'time_local': {'type': 'text', 'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t', '\r'], 'caseSensitive': False, 'alias': 'time_local', 'doc_value': True, 'chn': False},
            'request_method': {'type': 'text', 'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t', '\r'], 'caseSensitive': False, 'alias': 'request_method', 'doc_value': True, 'chn': False},
            'request_uri': {'type': 'text', 'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t', '\r'], 'caseSensitive': False, 'alias': 'request_uri', 'doc_value': True, 'chn': False},
            'status': {'type': 'long', 'alias': 'status', 'doc_value': True},
            'body_bytes_sent': {'type': 'long', 'alias': 'body_bytes_sent', 'doc_value': True},
            'http_referer': {'type': 'text', 'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t', '\r'], 'caseSensitive': False, 'alias': 'http_referer', 'doc_value': True, 'chn': False},
            'http_user_agent': {'type': 'text', 'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t', '\r'], 'caseSensitive': False, 'alias': 'http_user_agent', 'doc_value': True, 'chn': False}}}
# インデックスを作成します。
def create_index():
    print("ready to create index for %s" % logstore_name)
    index_config = IndexConfig()
    index_config.from_json(logstore_index)
    client.create_index(project_name, logstore_name, index_config)
    print("create index for %s success " % logstore_name)
    time.sleep(60 * 2)
# Logstore にデータを書き込みます。
def put_logs():
    print("ready to put logs for %s" % logstore_name)
    log_group = []
    for i in range(0, 100):
        log_item = LogItem()
        # フィールドごとにログコンテンツを設定します。
        contents = [
            ('remote_addr', '192.168.0.%d' % (i % 255)),
            ('remote_user', 'user%d' % i),
            ('time_local', time.strftime('%d/%b/%Y:%H:%M:%S +0000', time.gmtime())),
            ('request_method', 'GET' if i % 2 == 0 else 'POST'),
            ('request_uri', '/index.html' if i % 3 == 0 else '/api/data'),
            ('status', str(200 + (i % 100))),  # ステータスコードは 200 から 299 の間です。
            ('body_bytes_sent', str(1024 + i)),
            ('http_referer', 'http://example.com/page%d' % (i // 10)),
            ('http_user_agent',
             'Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.%d Safari/537.36' % (i * 10))
        ]
        log_item.set_contents(contents)
        log_group.append(log_item)
    request = PutLogsRequest(project_name, logstore_name, "", "", log_group, compress=False)
    client.put_logs(request)
    print("put logs for %s success " % logstore_name)
    time.sleep(60)
# SQL を使用してログをクエリします。
def get_logs():
    print("ready to query logs from logstore %s" % logstore_name)
    request = GetLogsRequest(project_name, logstore_name, from_time, to_time, query=query)
    response = client.get_logs(request)
    for log in response.get_logs():
        for k, v in log.contents.items():
            print("%s : %s" % (k, v))
        print("*********************")
if __name__ == '__main__':
    # インデックスを作成します。
    create_index()
    # Logstore にデータを書き込みます。
    put_logs()
    # SQL を使用してログをクエリします。
    get_logs()

関連トピック

  • SLS は、複数の言語の SDK を使用したログ収集をサポートしています。詳細については、「SDK リファレンスの概要」をご参照ください。

  • OpenAPI Explorer を使用すると、リクエストを手動でカプセル化したり、署名を処理したりすることなく、SLS API オペレーションを迅速にデバッグできます。詳細については、「OpenAPI Explorer」をご参照ください。

  • 自動設定のために、SLS はコマンドラインインターフェイス (CLI) を提供しています。詳細については、「CLI の概要」をご参照ください。

  • SDK、OpenAPI Explorer、または CLI を使用すると、コンソールを使用する場合と同じ料金が発生します。詳細については、「課金概要」をご参照ください。

よくある質問

Simple Log Service SDK はどのような機能をサポートしていますか?

SLS SDK は、ログ収集、インデックス作成、クエリと分析、データ変換、ログ消費、ログ配信管理、アラート機能、スケジュール化された SQL ジョブなど、ほとんどの SLS 機能をサポートしています。機能がサポートされていない場合は、最新の SDK バージョンにアップグレードするか、今後のリリースでの更新を確認してください。

Simple Log Service SDK を使用するための基本的な手順は何ですか?

SDK の使用は、コンソールの使用と似たワークフローに従います。

  1. Simple Log Service を有効化します。

  2. AccessKey ペアを取得します。

  3. プロジェクトと Logstore を作成します。

  4. ログを収集し、Logstore に保存します。

  5. ログのインデックスを作成します。

  6. ログのクエリと分析を行い、結果を可視化します。

  7. データ変換、配信、アラート機能など、ログデータに対する操作を実行します。

より簡単な操作については、SLS コンソールを使用してください。「クイックスタート」をご参照ください。

SDK のデバッグ時に一般的なエラーを処理するにはどうすればよいですか?

SLS SDK には、組み込みのエラー処理が備わっています。例外は次のカテゴリに分類されます。

  • SLS によって返される例外。SDK はこれらの例外を処理します。詳細については、API オペレーションの説明と「エラーコード」をご参照ください。

  • ネットワーク切断やサーバー応答タイムアウトなど、SDK がリクエストを送信する際に発生するネットワーク例外。

  • メモリオーバーフローなど、SDK によって生成されるプラットフォームおよび言語固有の例外。

エラー処理」をご参照ください。

ログ収集、インデックス作成、クエリと分析、および変換に関連する一般的なエラーの解決策については、「よくある質問」をご参照ください。

Simple Log Service SDK の使用に制限はありますか?

SLS は、プロジェクト、Logstore、シャード、および LogItem のサイズに制限を課しています。SDK を使用する前に、「基本リソースの制限事項」を確認してください。