SQL文を使用してデータを分析する場合、標準SQL機能では、1つのクエリ要求で指定された期間内にすべてのログをスキャンできません。 このシナリオでは、専用SQL機能を有効にして、コンピューティングリソースと、1回のクエリ要求で分析できるデータ量を増やすことができます。 このトピックでは、Simple Log Service SDK for Javaを使用して専用SQL機能を使用する方法について説明します。
前提条件
Simple Log Serviceが有効化されています。 詳細については、次をご参照ください: Simple Log Serviceの有効化
RAM (Resource Access Management) ユーザーが作成され、必要な権限がRAMユーザーに付与されます。 詳細については、「RAMユーザーの作成とRAMユーザーへの権限付与」をご参照ください。
ALIBABA_CLOUD_ACCESS_KEY_IDおよびALIBABA_CLOUD_ACCESS_KEY_SECRET環境変数が設定されています。 詳細については、「環境変数の設定」をご参照ください。
重要Alibaba CloudアカウントのAccessKeyペアには、すべてのAPI操作に対する権限があります。 RAMユーザーのAccessKeyペアを使用して、API操作を呼び出したり、ルーチンのO&Mを実行したりすることを推奨します。
プロジェクトコードにAccessKey IDまたはAccessKey secretを保存しないことを推奨します。 そうしないと、AccessKeyペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
Simple Log Service SDK for Java V0.6.68以降がインストールされています。 詳細については、「Simple Log Service SDK For Javaのインストール」をご参照ください。
背景情報
Simple Log Serviceは、専用SQL機能を提供し、SQL分析機能を強化します。 この機能を使用して、数千億のデータレコードを処理できます。 詳細については、「Dedicated SQLの有効化」をご参照ください。
使用上の注意
この例では、中国 (杭州) リージョンのパブリックSimple Log Serviceエンドポイントが使用されています。これは https://cn-hangzhou.log.aliyuncs.com
です。 プロジェクトと同じリージョンにある他のAlibaba Cloudサービスを使用してSimple Log Serviceにアクセスする場合は、内部のSimple Log Serviceエンドポイント ( https://cn-hangzhou-intranet.log.aliyuncs.com
) を使用できます。 Simple Log Serviceのサポートされているリージョンとエンドポイントの詳細については、「エンドポイント」をご参照ください。
手順1: シンプルなLog Serviceクライアントの作成
// In this example, the AccessKey ID and AccessKey secret are obtained from environment variables.
String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// Enter the project name.
String project = "aliyun-test-project";
// Specify the Simple Log Service endpoint. In this example, the Simple Log Service endpoint for the China (Hangzhou) region is used. Replace this parameter value with your actual endpoint.
String host = "cn-hangzhou.log.aliyuncs.com";
// Enter the name of the Logstore.
String logStore = "aliyun-test-logstore";
// Specify the shard ID.
int shardId = 0;
// Create a Simple Log Service client.
Client client = new Client(host, accessId, accessKey);
ステップ2: 専用SQL機能の使用
Dedicated SQL機能を使用する前に、機能が有効になっているかどうかを確認してください。 詳細については、「Dedicated SQLの有効化」をご参照ください。
Simple Log Serviceは、executeLogStoreSqlおよびexecuteProjectSql操作を提供します。 操作を呼び出して、Dedicated SQL機能を効率的に使用できます。
詳細については、「Alibaba Cloud Simple Log Service SDK For Java」をご参照ください。
説明データを分析する前にデータをフィルタリングする場合は、executeLogStoreSql操作を呼び出して、分析効率を向上させるために
Search statement | Analytic statement
形式でクエリステートメントを指定することを推奨します。executeLogStoreSql
この操作を呼び出して、特定のLogstoreでDedicated SQL機能を使用できます。 この操作は、標準のSQL-92構文をサポートしています。 クエリステートメントは
Searchステートメント | Analyticステートメント
の形式であり、分析ステートメントは標準のSQL-92構文に従います。import com.aliyun.openservices.log.Client; import com.aliyun.openservices.log.common.LogContent; import com.aliyun.openservices.log.common.LogItem; import com.aliyun.openservices.log.common.QueriedLog; import com.aliyun.openservices.log.exception.LogException; import com.aliyun.openservices.log.response.GetLogsResponse; import java.util.Date; public class SlsSample { public static void main(String args[]) throws LogException, InterruptedException { // In this example, the AccessKey ID and AccessKey secret are obtained from environment variables. String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); // Enter the project name. String project = "aliyun-test-project"; // Specify the Simple Log Service endpoint. In this example, the Simple Log Service endpoint for the China (Hangzhou) region is used. Replace this parameter value with your actual endpoint. String host = "cn-hangzhou.log.aliyuncs.com"; // Enter the name of the Logstore. String logStore = "aliyun-test-logstore"; // Specify the shard ID. int shardId = 0; // Create a Simple Log Service client. Client client = new Client(host, accessId, accessKey); // Execute an SQL statement in the specified Logstore. try { String sql = "* | select count(1)"; int from = (int) (new Date().getTime() / 1000 - 600); int to = (int) (new Date().getTime() / 1000); GetLogsResponse logsResponse = client.executeLogstoreSql(project, logStore, 1627268185, 1627269085, "* | SELECT count(*)", true); System.out.println("Returned sql result count:" + logsResponse.GetCount()); for (QueriedLog log : logsResponse.getLogs()) { LogItem item = log.GetLogItem(); System.out.println("time : " + item.mLogTime); for (LogContent content : item.mContents) { System.out.println(content.mKey + ":" + content.mValue); } } // Display the statistics about the analysis results. // The number of lines of log data that is processed. System.out.println("proccesedRows:" + logsResponse.getProcessedRow()); // The time that is consumed to execute the SQL statement. System.out.println("elapsedMilli:" + logsResponse.getElapsedMilliSecond()); // The CPU time that is consumed to execute the SQL statement after the Dedicated SQL feature is enabled. Unit: seconds. You are charged for the Dedicated SQL feature based on the CPU time. For more information, see the topics that are related to billable items. System.out.println("cpuSec:" + logsResponse.getCpuSec()); // The number of CPU cores that are used to execute the SQL statement after the Dedicated SQL feature is enabled. System.out.println("cpuCores:" + logsResponse.getCpuCores()); System.out.println("requestId:" + logsResponse.GetRequestId()); } catch (LogException e) { System.out.println("error code :" + e.GetErrorCode()); System.out.println("error message :" + e.GetErrorMessage()); throw e; } } }
executeLogStoreSql操作を呼び出して、Dedicated SQL機能を使用できます。
GetLogsResponse logsResponse = client.exe cuteLogstoreSql(project, logStore, from, to, query, powerSql)
形式でリクエストを作成する必要があります。 下表に、各パラメーターを説明します。パラメーター
データ型
必須
例
説明
project
String
課金されます
非該当
プロジェクトの名前。
Simple Log Serviceクライアントを作成するときは、
project
パラメーターの値を指定する必要があります。 したがって、パラメーターを再度設定する必要はありません。logStore
String
課金されます
非該当
ログストアの名前
Simple Log Serviceクライアントを作成するときは、
logStore
パラメーターの値を指定する必要があります。 したがって、パラメーターを再度設定する必要はありません。from
Long
課金されます
1627268185
照会する期間の開始時刻です。 この値は、1970年1月1日00:00:00 UTCから経過した秒数を表すUNIXタイムスタンプです。
to
Long
課金されます
1627269085
照会する期間の終了時刻を設定します。 この値は、1970年1月1日00:00:00 UTCから経過した秒数を表すUNIXタイムスタンプです。
query
String
課金されます
"* | SELECT count(*)"
Simple Log Service詳細については、「構文」をご参照ください。
デフォルトでは、Simple Log Serviceは100行のデータを返します。 LIMIT句を使用して、返すデータ行の数を指定できます。 詳細は、「LIMIT句」をご参照ください。
powerSql
ブール値
課金されません
true
専用SQL機能を使用するかどうかを指定します。 詳細については、「Dedicated SQLの有効化」をご参照ください。 有効な値:
true: 専用SQL機能を使用します。
false (デフォルト): 標準SQL機能を使用します。
executeProjectSql
import com.aliyun.openservices.log.Client; import com.aliyun.openservices.log.common.LogContent; import com.aliyun.openservices.log.common.LogItem; import com.aliyun.openservices.log.common.QueriedLog; import com.aliyun.openservices.log.exception.LogException; import com.aliyun.openservices.log.response.GetLogsResponse; import java.util.Date; public class SlsSample { public static void main(String args[]) throws LogException, InterruptedException { // In this example, the AccessKey ID and AccessKey secret are obtained from environment variables. String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); // Enter the project name. String project = "aliyun-test-project"; // Specify the Simple Log Service endpoint. In this example, the Simple Log Service endpoint for the China (Hangzhou) region is used. Replace this parameter value with your actual endpoint. String host = "cn-hangzhou.log.aliyuncs.com"; // Enter the name of the Logstore. String logStore = "aliyun-test-logstore"; // Specify the shard ID. int shardId = 0; // Create a Simple Log Service client. Client client = new Client(host, accessId, accessKey); // Execute an SQL statement in the specified project. try { int now = (int) (new Date().getTime() / 1000); String sql = "select count(1) as cnt from xxx where __time__ > " + now; GetLogsResponse logsResponse = client.executeProjectSql(project, "select avg(latency),max(latency) ,count(1) as c from sample-logstore where status>200 and __time__>=1500975424 and __time__ < 1501035044 GROUP BY method ORDER BY c", true); System.out.println("Returned sql result count:" + logsResponse.GetCount()); for (QueriedLog log : logsResponse.getLogs()) { LogItem item = log.GetLogItem(); for (LogContent content : item.mContents) { System.out.println(content.mKey + ":" + content.mValue); } } // Display the statistics about the analysis results. // The number of lines of log data that is processed. System.out.println("proccesedRows:" + logsResponse.getProcessedRow()); // The time that is consumed to execute the SQL statement. System.out.println("elapsedMilli:" + logsResponse.getElapsedMilliSecond()); // The CPU time that is consumed to execute the SQL statement after the Dedicated SQL feature is enabled. Unit: seconds. You are charged for the Dedicated SQL feature based on the CPU time. For more information, see the topics that are related to billable items. System.out.println("cpuSec:" + logsResponse.getCpuSec()); // The number of CPU cores that are used to execute the SQL statement after the Dedicated SQL feature is enabled. System.out.println("cpuCores:" + logsResponse.getCpuCores()); System.out.println("requestId:" + logsResponse.GetRequestId()); } catch (LogException e) { System.out.println("error code :" + e.GetErrorCode()); System.out.println("error message :" + e.GetErrorMessage()); throw e; } } }
専用SQL機能を使用するには、executeProjectSql操作を呼び出します。
GetLogsResponse logsResponse = client.exe cuteProjectSql(project、query、powerSql)
形式でリクエストを作成する必要があります。 下表に、各パラメーターを説明します。パラメーター
データ型
必須
例
説明
project
String
課金されます
非該当
プロジェクトの名前。
Simple Log Serviceクライアントを作成するときは、
project
パラメーターの値を指定する必要があります。 したがって、パラメーターを再度設定する必要はありません。query
String
課金されます
"sample-logstoreからavg(latency) 、max(latency) 、count(1) をcとして選択します。status>200 and __time __>= 1500975424 and __time__ < 1501035044 GROUP BY method ORDER BY c"
デフォルトでは、Simple Log Serviceは100行のデータを返します。 LIMIT句を使用して、返すデータ行の数を指定できます。 詳細は、「LIMIT句」をご参照ください。
説明標準SQL文を記述するには、SQL文のWHERE句でフィルター条件とクエリ時間範囲を指定する必要があります。
WHERE
句に__time__
フィールドを含めて、クエリ時間範囲を指定できます。powerSql
ブール値
課金されません
true
専用SQL機能を使用するかどうかを指定します。 詳細については、「Dedicated SQLの有効化」をご参照ください。 有効な値:
true: 専用SQL機能を使用します。
false (デフォルト): 標準SQL機能を使用します。
関連ドキュメント
Simple Log ServiceコンソールでDedicated SQL機能を有効にする方法の詳細については、「Dedicated SQLの有効化」をご参照ください。
APIを使用してDedicated SQL機能を有効にする方法の詳細については、「CreateSqlInstance」をご参照ください。
API操作を呼び出した後、Simple Log Serviceによって返された応答にエラー情報が含まれている場合、呼び出しは失敗します。 API呼び出しが失敗したときに返されるエラーコードに基づいてエラーを処理できます。 詳細については、エラーコードをご参照ください。
Alibaba Cloud OpenAPI Explorerは、デバッグ機能、SDK、サンプル、および関連ドキュメントを提供します。 OpenAPI Explorerを使用する場合、リクエストを手動でカプセル化したり、リクエストに署名したりすることなく、Simple Log Service API操作をデバッグできます。 詳細については、をご覧ください。 OpenAPI Explorerを使用します。
Simple Log Serviceは、Simple Log Serviceの自動設定の要件を満たすコマンドラインインターフェイス (CLI) を提供します。 詳細については、「Simple Log Service CLIの概要」をご参照ください。
サンプルコードの詳細については、GitHubの「Alibaba Cloud Simple Log Service SDK For Java」をご参照ください。
サンプルコードの詳細については、GitHubの「Alibaba Cloud Simple Log Service SDK For Python」をご参照ください。