Topik ini menjelaskan cara menggunakan Simple Log Service SDK untuk C++ guna memanfaatkan fitur Dedicated SQL.
Prasyarat
Buat RAM user dan berikan izin yang diperlukan. Untuk informasi selengkapnya, lihat Buat RAM user dan berikan izin.
Konfigurasikan variabel lingkungan
ALIBABA_CLOUD_ACCESS_KEY_IDdanALIBABA_CLOUD_ACCESS_KEY_SECRET. Untuk informasi selengkapnya, lihat Konfigurasikan variabel lingkungan di Linux, macOS, dan Windows.PentingPasangan AccessKey dari Akun Alibaba Cloud dapat mengakses semua operasi API. Kami menyarankan Anda menggunakan pasangan AccessKey dari RAM user untuk panggilan API atau operasi dan pemeliharaan (O&M) rutin.
Untuk mencegah risiko keamanan, jangan hard-code ID AccessKey dan AccessKey Secret Anda dalam kode proyek. Kebocoran pasangan AccessKey dapat membahayakan keamanan seluruh sumber daya dalam akun Anda.
Simple Log Service SDK untuk C++ versi terbaru telah terinstal. Untuk informasi selengkapnya, lihat Alibaba Cloud Simple Log Service SDK untuk C++.
Informasi latar belakang
Simple Log Service menyediakan fitur Dedicated SQL untuk meningkatkan kemampuan analisis SQL. Anda dapat menggunakan fitur ini untuk memproses ratusan miliar baris data. Untuk informasi selengkapnya, lihat Aktifkan Dedicated SQL.
Simple Log Service menyediakan operasi ExecuteLogStoreSql dan ExecuteProjectSql. Anda dapat memanggil operasi ini untuk menggunakan fitur Dedicated SQL secara efisien.
Operasi ExecuteLogStoreSql: Menjalankan kueri Dedicated SQL di Logstore tertentu. Operasi ini mendukung sintaks kueri dan analisis yang kompatibel dengan SQL-92 standar. Formatnya adalah
search statement|analytic statement, di mana pernyataan analitik mengikuti sintaks SQL-92 standar.ExecuteProjectSql: menggunakan fitur Dedicated SQL di proyek tertentu. Operasi ini mendukung sintaks SQL-92. Anda harus menentukan kondisi filter dan rentang waktu di klausa WHERE dalam pernyataan SQL.
Untuk memfilter data sebelum analisis, gunakan sintaks search statement|analytic statement dengan operasi ExecuteLogStoreSql demi performa yang lebih baik.
Kode contoh
Kode contoh berikut menunjukkan cara menggunakan fitur Dedicated SQL. Untuk informasi selengkapnya, lihat Alibaba Cloud Simple Log Service SDK untuk C++.
#include <cstdlib>
// Titik akhir Simple Log Service. Contoh ini menggunakan China (Hangzhou). Ganti dengan titik akhir aktual Anda.
std::string endpoint = "cn-hangzhou.log.aliyuncs.com";
// Contoh ini mengambil ID AccessKey dan AccessKey Secret dari variabel lingkungan.
string accessId = (string)getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
string accessKey = (string)getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// Nama proyek.
std::string project = "your_project_name";
// Nama Logstore.
std::string logStore = "your_logstore";
// Buat client Simple Log Service.
LOGClient client(endpoint, accessId, accessKey);
// Jalankan analisis SQL di Logstore yang ditentukan.
try
{
std::string sql = "* | select count(1)";
int from = time(NULL) - 600;
int to = from + 600;
LogStoreSqlResponse logsResponse = client.ExecuteLogStoreSql(project, logStore,
1627268185,1627269085,"* | SELECT count(*)",true);
// Cetak statistik hasil analisis.
std::cout << "Returned sql result:" << std::endl
<< "count:" << logsResponse.result.logline << std::endl // Jumlah baris dalam hasil.
<< "processed rows:" << logsResponse.processedRows << std::endl // Jumlah baris log yang diproses.
<< "elapsed milli:" << logsResponse.elapsedMilli << std::endl // Durasi eksekusi analisis SQL.
<< "cpu sec:" << logsResponse.cpuSec << std::endl // Waktu CPU, dalam detik, untuk analisis Dedicated SQL. Dedicated SQL dikenai biaya berdasarkan nilai ini. Untuk informasi selengkapnya, lihat item yang dapat ditagih.
<< "cpu core:" << logsResponse.cpuCore << std::endl; // Jumlah core CPU yang digunakan untuk analisis SQL dengan Dedicated SQL diaktifkan.
for (std::vector<LogItem>::const_iterator itr = logsResponse.result.logdatas.begin();
itr != logsResponse.result.logdatas.end(); ++itr)
{
const LogItem &item = *itr;
for (std::vector<std::pair<std::string, std::string>>::const_iterator itr_data = item.data.begin();
itr_data != item.data.end(); ++itr_data)
{
std::cout << itr_data->first << ":" << itr_data->second;
}
}
}
catch (LOGException &e)
{
std::cout << "error code :" << e.GetErrorCode() << std::endl;
std::cout << "error message :" << e.GetMessage() << std::endl;
throw e;
}
// Jalankan analisis SQL di proyek yang ditentukan.
try
{
int now = time(NULL);
std::string sql = "select count(1) as cnt from xxx where __time__ > " + to_string(now);
ProjectSqlResponse 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);
// Cetak statistik hasil analisis.
std::cout << "Returned sql result:" << std::endl
<< "count:" << logsResponse.result.logline << std::endl // Jumlah baris dalam hasil.
<< "processed rows:" << logsResponse.processedRows << std::endl // Jumlah baris log yang diproses.
<< "elapsed milli:" << logsResponse.elapsedMilli << std::endl // Durasi eksekusi analisis SQL.
<< "cpu sec:" << logsResponse.cpuSec << std::endl // Waktu CPU, dalam detik, untuk analisis Dedicated SQL. Dedicated SQL dikenai biaya berdasarkan nilai ini. Untuk informasi selengkapnya, lihat item yang dapat ditagih.
<< "cpu core:" << logsResponse.cpuCore << std::endl; // Jumlah core CPU yang digunakan untuk analisis SQL dengan Dedicated SQL diaktifkan.
for (std::vector<LogItem>::const_iterator itr = logsResponse.result.logdatas.begin(); itr != logsResponse.result.logdatas.end(); ++itr)
{
const LogItem &item = *itr;
for (std::vector<std::pair<std::string, std::string>>::const_iterator itr_data = item.data.begin();
itr_data != item.data.end(); ++itr_data)
{
std::cout << itr_data->first << ":" << itr_data->second;
}
}
}
catch (LOGException &e)
{
std::cout << "error code :" << e.GetErrorCode() << std::endl;
std::cout << "error message :" << e.GetMessage() << std::endl;
throw e;
}Operasi ExecuteLogStoreSql
Panggil operasi ExecuteLogStoreSql dengan format berikut:
LogStoreSqlResponse logsResponse = client.ExecuteLogStoreSql(project, logStore, from, to, query, powerSql). Tabel berikut menjelaskan parameter-parameter tersebut.Parameter
Type
Wajib
Contoh
Deskripsi
project
String
Ya
N/A
Nama proyek.
Saat membuat client Simple Log Service, Anda harus menentukan nilai untuk parameter project. Oleh karena itu, Anda tidak perlu mengonfigurasi parameter ini lagi.
logStore
String
Ya
N/A
Nama Logstore.
Saat membuat client Simple Log Service, Anda harus menentukan nilai untuk parameter logStore. Oleh karena itu, Anda tidak perlu mengonfigurasi parameter ini lagi.
from
Long
Ya
1627268185
Awal rentang waktu untuk kueri. Nilainya berupa timestamp dalam format UNIX time, yaitu jumlah detik yang telah berlalu sejak 00:00:00 UTC, Kamis, 1 Januari 1970.
to
Long
Ya
1627269085
Akhir rentang waktu untuk kueri. Nilainya berupa timestamp dalam format UNIX time, yaitu jumlah detik yang telah berlalu sejak 00:00:00 UTC, Kamis, 1 Januari 1970.
query
String
Ya
"* | SELECT count(*)"Pernyataan kueri dan analisis untuk Simple Log Service, dalam format
search statement|analytic statement. Untuk informasi selengkapnya, lihat Sintaks dasar.Secara default, Simple Log Service mengembalikan 100 baris data. Anda dapat menggunakan klausa LIMIT untuk menentukan jumlah baris data yang dikembalikan. Untuk informasi selengkapnya, lihat Klausa LIMIT.
powerSql
Boolean
Tidak
true
Menentukan apakah akan menggunakan Dedicated SQL. Untuk informasi selengkapnya, lihat Aktifkan Dedicated SQL. Nilai yang valid:
true: menggunakan Dedicated SQL.
false (default): menggunakan Standard SQL.
Operasi ExecuteProjectSql
Panggil operasi ExecuteProjectSql dengan format berikut:
ProjectSqlResponse logsResponse = client.ExecuteProjectSql(project, query, powerSql). Tabel berikut menjelaskan parameter-parameter tersebut.Parameter
Tipe
Wajib
Contoh
Deskripsi
project
String
Ya
N/A
Nama proyek.
Saat membuat client Simple Log Service, Anda harus menentukan nilai untuk parameter project. Oleh karena itu, Anda tidak perlu mengonfigurasi parameter ini lagi.
query
String
Ya
"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"Pernyataan SQL yang harus mencantumkan kondisi filter dan rentang waktu di klausa WHERE.
Secara default, Simple Log Service mengembalikan 100 baris data. Anda dapat menggunakan klausa LIMIT untuk menentukan jumlah baris data yang dikembalikan. Untuk informasi selengkapnya, lihat Klausa LIMIT.
powerSql
Boolean
Tidak
true
Menentukan apakah akan menggunakan Dedicated SQL. Untuk informasi selengkapnya, lihat Aktifkan Dedicated SQL. Nilai yang valid:
true: menggunakan Dedicated SQL.
false (default): menggunakan Standard SQL.