このトピックでは、PHP 向け Simple Log Service SDK を使用して専用 SQL 機能を使用する方法について説明します。
前提条件
Simple Log Service がアクティブ化されていること。詳細については、「Simple Log Service をアクティブ化する」をご参照ください。
AccessKey ペアが作成され、取得されていること。詳細については、「AccessKey ペア」をご参照ください。
Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して Simple Log Service で操作を実行することは、リスクの高い操作です。API 操作の呼び出しや日常的な O&M の実行には、Resource Access Management (RAM) ユーザーを使用することをお勧めします。RAM ユーザーを作成するには、RAM コンソールにログインします。RAM ユーザーが Simple Log Service リソースに対する管理権限を持っていることを確認してください。詳細については、「ステップ 2: RAM ユーザーに権限を付与する」をご参照ください。
PHP 向け Simple Log Service SDK がインストールされていること。詳細については、「PHP 向け Simple Log Service SDK をインストールする」をご参照ください。
背景情報
Simple Log Service は、SQL 分析機能を強化するために専用 SQL 機能を提供しています。この機能を使用すると、数百億件のデータレコードを処理できます。詳細については、「専用 SQL を有効にする」をご参照ください。
Simple Log Service は、Aliyun_Log_Models_LogStoreSqlRequest 操作と Aliyun_Log_Models_ProjectSqlRequest 操作を提供しています。これらの操作を呼び出して、専用 SQL 機能を効率的に使用できます。
Aliyun_Log_Models_LogStoreSqlRequest: 指定されたログストアで専用 SQL 機能を使用します。この操作は、標準 SQL-92 構文をサポートしています。クエリ文は
Search statement|Analytic statement
形式で、分析文は標準 SQL-92 構文に従います。Aliyun_Log_Models_ProjectSqlRequest: 指定されたプロジェクトで専用 SQL 機能を使用します。この操作は、標準 SQL-92 構文をサポートしています。SQL 文の WHERE 句で、フィルター条件と時間範囲を指定する必要があります。
データを分析する前にデータをフィルタリングする場合は、Aliyun_Log_Models_LogStoreSqlRequest 操作を呼び出し、Search statement|Analytic statement
形式でクエリ文を指定して、分析効率を向上させることをお勧めします。
サンプルコード
次のサンプルコードは、専用 SQL 機能の使用方法の例を示しています。詳細については、「Alibaba Cloud Simple Log Service SDK for PHP」をご参照ください。
<?PHP
require_once realpath(dirname(__FILE__) . './aliyun-log-php-sdk-master/Log_Autoload.php');
class test
{
public static function main()
{
// Simple Log Service エンドポイント。この例では、中国 (杭州) リージョンの Simple Log Service エンドポイントが使用されています。パラメーター値を実際のエンドポイントに置き換えてください。
$endpoint = 'cn-hangzhou.log.aliyuncs.com';
// この例では、AccessKey ID と AccessKey シークレットは環境変数から取得されます。
$accessKeyId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID');
$accessKey = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');
// プロジェクト名。
$project = 'aliyun-test-project';
// ログストア名。
$logstore = 'aliyun-test-logstore';
// セキュリティトークンサービス (STS) トークン。
$token = '';
// Simple Log Service クライアントを作成します。
$client = new Aliyun_Log_Client($endpoint, $accessKeyId, $accessKey, $token);
// 指定されたログストアで SQL 文を実行します。
$from = time() - 3600;
$to = time();
$query = "* | select count(0)";
$request = new Aliyun_Log_Models_LogStoreSqlRequest($project, $logstore, $from, $to, $query, true);
try {
$response = $client->executeLogStoreSql($request);
foreach ($response->getLogs() as $log) {
print $log->getTime() . "\t";
foreach ($log->getContents() as $key => $value) {
print $key . ":" . $value . "\t";
}
print "\n";
}
// 分析結果に関する統計情報を表示します。
// 処理されたログデータの行数。
print "proccesedRows:" . $response->getProcessedRows() . "\n";
// SQL 文の実行に要した時間。
print "elapsedMilli:" . $response->getElapsedMilli() . "\n";
// 専用 SQL 機能が有効になった後、SQL 文の実行に消費された CPU 時間。単位: 秒。専用 SQL 機能は、CPU 時間に基づいて課金されます。詳細については、課金項目に関するトピックをご参照ください。
print "cpuSec:" . $response->getCpuSec() . "\n";
// 専用 SQL 機能が有効になった後、SQL 文の実行に使用された CPU コア数。
print "cpuCores:" . $response->getCpuCores() . "\n";
} catch (Aliyun_Log_Exception $ex) {
logVarDump($ex);
} catch (Exception $ex) {
logVarDump($ex);
}
// 指定されたプロジェクトで SQL 文を実行します。
$query = "select count(0) from gs-api where __time__ > to_unixtime(now()) - 300 and __time__ < to_unixtime(now())";
$request = new Aliyun_Log_Models_ProjectSqlRequest($project, $query, True);
try {
$response = $client->executeProjectSql($request);
#$response = $client->getProjectLogs($request);
foreach ($response->getLogs() as $log) {
print $log->getTime() . "\t";
foreach ($log->getContents() as $key => $value) {
print $key . ":" . $value . "\t";
}
print "\n";
}
// 分析結果に関する統計情報を表示します。
// 処理されたログデータの行数。
print "proccesedRows:" . $response->getProcessedRows() . "\n";
// SQL 文の実行に要した時間。
print "elapsedMilli:" . $response->getElapsedMilli() . "\n";
// 専用 SQL 機能が有効になった後、SQL 文の実行に消費された CPU 時間。単位: 秒。専用 SQL 機能は、CPU 時間に基づいて課金されます。詳細については、課金項目に関するトピックをご参照ください。
print "cpuSec:" . $response->getCpuSec() . "\n";
// 専用 SQL 機能が有効になった後、SQL 文の実行に使用された CPU コア数。
print "cpuCores:" . $response->getCpuCores() . "\n";
print "requestId:" . $response->getRequestId() . "\n";
} catch (Aliyun_Log_Exception $ex) {
logVarDump($ex);
} catch (Exception $ex) {
logVarDump($ex);
}
}
}
test::main();
Aliyun_Log_Models_LogStoreSqlRequest 操作
Aliyun_Log_Models_LogStoreSqlRequest 操作を呼び出して、専用 SQL 機能を使用できます。リクエストは次の形式である必要があります。
$from = time()-3600; $to = time(); $query = "* | select count(0)"; $request = new Aliyun_Log_Models_LogStoreSqlRequest($project,$logstore,$from,$to,$query,$powerSql);
次の表にパラメーターを示します。
パラメーター
タイプ
必須
例
説明
$project
String
はい
N/A
プロジェクト名。
Simple Log Service クライアントを作成するときに、$project パラメーターの値を指定する必要があります。そのため、このパラメーターを再度設定する必要はありません。
$logstore
String
はい
N/A
ログストア名。
Simple Log Service クライアントを作成するときに、$logstore パラメーターの値を指定する必要があります。そのため、このパラメーターを再度設定する必要はありません。
$from
Long
はい
time()-3600
クエリ対象の時間範囲の開始時刻。値は、1970 年 1 月 1 日 00:00:00 UTC から経過した秒数を表す UNIX タイムスタンプです。
$to
Long
はい
time()
クエリ対象の時間範囲の終了時刻。値は、1970 年 1 月 1 日 00:00:00 UTC から経過した秒数を表す UNIX タイムスタンプです。
$topic
String
いいえ
topic-test
ログのトピック。
$query
String
はい
"* | select count(method)"
クエリ文。形式:
Search statement|Analytic statement
。詳細については、「構文」をご参照ください。デフォルトでは、Simple Log Service は 100 行のデータを返します。LIMIT 句を使用して、返すデータ行数を指定できます。詳細については、「LIMIT 句」をご参照ください。
$powerSql
Boolean
いいえ
true
専用 SQL 機能を使用するかどうかを指定します。詳細については、「専用 SQL を有効にする」をご参照ください。有効な値:
true: 専用 SQL 機能を使用します。
false (デフォルト): 標準 SQL 機能を使用します。
Aliyun_Log_Models_ProjectSqlRequest 操作
Aliyun_Log_Models_ProjectSqlRequest 操作を呼び出して、専用 SQL 機能を使用できます。リクエストは次の形式である必要があります。
$query = "select count(0) from sls_operation_log where __time__ > to_unixtime(now()) - 300 and __time__ < to_unixtime(now())"; $request = new Aliyun_Log_Models_ProjectSqlRequest($project,$query,$powerSql);
次の表にパラメーターを示します。
パラメーター
タイプ
必須
例
説明
$project
String
はい
N/A
プロジェクト名。
Simple Log Service クライアントを作成するときに、$project パラメーターの値を指定する必要があります。そのため、このパラメーターを再度設定する必要はありません。
$query
String
はい
" select count(method) from sls_operation_log where __time__ > to_unixtime(now()) - 300 and __time__ < to_unixtime(now())"
SQL 文。SQL 文の WHERE 句で、検索条件と時間範囲を指定する必要があります。
デフォルトでは、Simple Log Service は 100 行のデータを返します。LIMIT 句を使用して、返すデータ行数を指定できます。詳細については、「LIMIT 句」をご参照ください。
$powerSql
Boolean
いいえ
true
専用 SQL 機能を使用するかどうかを指定します。詳細については、「専用 SQL を有効にする」をご参照ください。有効な値:
true: 専用 SQL 機能を使用します。
false (デフォルト): 標準 SQL 機能を使用します。