Topik ini menjelaskan cara membuat penyimpanan eksternal untuk mengaitkan Simple Log Service dengan database MySQL.
Prasyarat
Data telah dikumpulkan di Simple Log Service. Untuk informasi lebih lanjut, lihat Pengumpulan Data.
Antarmuka baris perintah (CLI) Simple Log Service telah diinstal dan dikonfigurasi dengan titik akhir serta Pasangan Kunci Akses. Untuk informasi lebih lanjut, lihat Instal Simple Log Service CLI dan Konfigurasikan Titik Akhir dan Pasangan Kunci Akses.
Data disimpan dalam instansiasi ApsaraDB RDS for MySQL, AnalyticDB for MySQL, atau database MySQL yang dikelola sendiri pada instance ECS.
Database MySQL berada di virtual private cloud (VPC) Alibaba Cloud. Instansiasi RDS, instansiasi AnalyticDB for MySQL, atau instance ECS harus berada di wilayah yang sama dengan proyek Simple Log Service.
PentingAnda tidak dapat langsung terhubung ke database MySQL menggunakan alamat IP publik.
Informasi latar belakang
Fitur penyimpanan eksternal dari Simple Log Service memungkinkan Anda mengaitkan Simple Log Service dengan instansiasi ApsaraDB RDS for MySQL, AnalyticDB for MySQL, atau database MySQL yang dikelola sendiri pada instance ECS. Selain itu, Anda dapat menulis hasil kueri dan analisis ke database MySQL untuk diproses lebih lanjut.
Prosedur
1. Konfigurasikan daftar putih
Database RDS for MySQL
Tambahkan blok CIDR 100.104.0.0/16, 11.194.0.0/16, dan 11.201.0.0/16 ke daftar putih. Untuk informasi lebih lanjut, lihat Konfigurasikan Daftar Putih Alamat IP.
Database MySQL yang dikelola sendiri pada instance ECS
Tambahkan aturan grup keamanan untuk mengizinkan akses dari blok CIDR 100.104.0.0/16, 11.194.0.0/16, dan 11.201.0.0/16. Untuk informasi lebih lanjut, lihat Tambahkan Aturan Grup Keamanan.
Database AnalyticDB for MySQL
Tambahkan blok CIDR 100.104.0.0/16, 11.194.0.0/16, dan 11.201.0.0/16 ke daftar putih. Untuk informasi lebih lanjut, lihat Konfigurasikan Daftar Putih.
2. Buat ExternalStore
-
Masuk ke server tempat CLI diinstal. Jalankan perintah
touchuntuk membuat file konfigurasi /home/shell/config.json. Tambahkan skrip berikut ke file config.json. Ganti nilai parameterregion,vpc-id,host,port,username,password,db, dantablesesuai kebutuhan.-
Deskripsi Parameter
Contoh
{ "externalStoreName":"sls_join_meta_store", "storeType":"rds-vpc", "parameter":{ "region":"cn-qingdao", "vpc-id":"vpc-m5eq4irc1pucp*******", "host":"rm-bp1******rm76.mysql.rds.aliyuncs.com", "port":"3306", "username":"user", "password":"****", "db":"scmc", "table":"join_meta" } }externalStoreNameNama ExternalStore. Nama tersebut harus dalam huruf kecil.
storeTypeJenis sumber data. Atur parameter ini ke
rds-vpc.regionWilayah tempat instansiasi database berada. Detailnya adalah sebagai berikut:
-
Jika Anda menggunakan database ApsaraDB RDS for MySQL, atur parameter region ke wilayah instansiasi RDS.
-
Jika Anda menggunakan database AnalyticDB for MySQL, atur parameter region ke wilayah instansiasi AnalyticDB for MySQL.
-
Jika Anda menggunakan database MySQL yang dikelola sendiri pada instance ECS, atur parameter region ke wilayah instance ECS.
PentingInstansiasi RDS, instansiasi AnalyticDB for MySQL, atau instance ECS harus berada di wilayah yang sama dengan proyek Simple Log Service.
vpc-idID VPC tempat instansiasi database berada. Detailnya adalah sebagai berikut:
-
Jika instansiasi RDS PostgreSQL Anda berada di virtual private cloud (VPC), atur vpc-id ke ID VPC.
-
Untuk database ADB PostgreSQL di virtual private cloud (VPC), atur vpc-id ke ID VPC tersebut.
-
Jika database Hologres Alibaba Cloud berada di virtual private cloud (VPC), atur vpc-id ke ID VPC.
hostAlamat database. Detailnya adalah sebagai berikut:
Dalam VPC, jika alamat IP instansiasi database berubah setelah Anda membuat tabel eksternal, akses ke tabel eksternal akan terpengaruh. Misalnya, hal ini bisa terjadi jika instansiasi database dipindahkan. Masalah ini terjadi bahkan jika Anda menggunakan titik akhir internal dalam konfigurasi. Saat tabel eksternal dibuat, backend menerjemahkan nama domain menjadi alamat IP dan menyimpan alamat IP ke konfigurasi backend. Alamat IP yang sesuai dengan nama domain tidak diperbarui secara otomatis. Dalam kasus ini, Anda harus memperbarui atau membuat ulang tabel eksternal.
-
Jika Anda menggunakan database ApsaraDB RDS for MySQL, atur parameter host ke alamat internal instansiasi RDS. Alamat internal dapat berupa titik akhir internal atau alamat IP pribadi.
-
Jika Anda menggunakan database AnalyticDB for MySQL, atur parameter host ke alamat internal instansiasi AnalyticDB for MySQL. Alamat internal dapat berupa titik akhir internal atau alamat IP pribadi.
-
Jika Anda menggunakan database MySQL yang dikelola sendiri pada instance ECS, atur parameter host ke alamat IP pribadi instance ECS.
-
Jika database dapat diakses melalui Internet, atur parameter ini ke nama domain publik atau alamat IP publik.
portNomor port. Detailnya adalah sebagai berikut:
-
Jika Anda menggunakan database ApsaraDB RDS for MySQL, atur parameter port ke nomor port instansiasi RDS.
-
Jika Anda menggunakan database AnalyticDB for MySQL, atur parameter port ke nomor port instansiasi AnalyticDB for MySQL.
-
Jika Anda menggunakan database MySQL yang dikelola sendiri pada instance ECS, atur parameter port ke port layanan MySQL pada instance ECS.
usernameNama pengguna akun database.
passwordKata sandi akun database.
dbNama database.
tableNama tabel database. Format berikut didukung:
-
`table_name`, seperti `test`.
-
`schema_name.table_name`, seperti `public.test`.
-
-
-
Jalankan perintah berikut di baris perintah untuk membuat ExternalStore. project_name adalah nama proyek Simple Log Service. Ganti sesuai kebutuhan. Dalam topik ini,
log-rds-demodigunakan sebagai contoh.aliyunlog log create_external_store --project_name="log-rds-demo" --config="file:///home/shell/config.json" -
Kueri informasi ExternalStore. Jika perintah berhasil, tidak ada tanggapan yang dikembalikan. Anda dapat menjalankan perintah
aliyunlog log get_external_store --project_name="log-rds-demo" --store_name="sls_join_meta_store" --format-output=jsonuntuk menanyakan detail sumber data eksternal ApsaraDB RDS for MySQL. Informasi berikut dikembalikan:{ "externalStoreName":"sls_join_meta_store", "storeType":"rds-vpc", "parameter":{ "db": "scmc", "host": "rm-bp1******rm76.mysql.rds.aliyuncs.com", "port": "3306", "region": "cn-wulanchabu", "table": "test", "username": "user", "vpc-id": "vpc-m5eq4irc1pucp*******" } }
3. Gunakan penyimpanan eksternal
Jalankan analisis kueri
-
Gunakan penyimpanan eksternal
Setelah Anda mengaitkan sumber data eksternal, buka Konsol Simple Log Service. Di proyek bernama
log-rds-demo, klik Logstore apa pun. Kemudian, jalankan pernyataan kueri* | select * from sls_join_meta_storeuntuk menanyakan data dari tabel MySQL yang terkait.
-
Gunakan JOIN untuk mengaitkan Simple Log Service dengan tabel MySQL
-
Anda hanya dapat menggabungkan Logstore dengan tabel database MySQL yang ukurannya kurang dari 20 MB.
-
Dalam pernyataan kueri, Logstore harus ditempatkan sebelum kata kunci join, dan ExternalStore harus ditempatkan setelah kata kunci join.
-
Dalam pernyataan kueri, Anda harus menentukan nama ExternalStore. Sistem secara otomatis mengganti nama tersebut dengan nama database MySQL dan nama tabel. Jangan langsung tentukan nama tabel MySQL.
Sintaks JOIN yang didukung termasuk INNER JOIN, LEFT JOIN, RIGHT JOIN, dan FULL JOIN.
[ INNER ] JOIN LEFT [ OUTER ] JOIN RIGHT [ OUTER ] JOIN FULL [ OUTER ] JOINBerikut adalah contoh sintaks JOIN.
method:postlogstorelogs | select count(1) , histogram(logstore) from log l join sls_join_meta_store m on l.projectid = cast( m.ikey as varchar) -
Simpan hasil kueri dan analisis ke database MySQL
Bidang dalam tabel database MySQL bertipe varchar. Anda harus mengonversi bidang dari Logstore agar sesuai dengan bidang dalam tabel MySQL. Misalnya, jika bidangdetaildalam tabel MySQL adalahvarchar(60), gunakan fungsi cast untuk mengonversi indekscontentdalam Logstore:cast(content as varchar(60)). Untuk informasi lebih lanjut tentang fungsi cast, lihat Fungsi Konversi Tipe.
Simple Log Service memungkinkan Anda menggunakan sintaks INSERT untuk menyisipkan hasil kueri ke database MySQL. Berikut adalah contoh sintaks INSERT:
method:postlogstorelogs | insert into join_meta select cast(method as varchar(65535)),count(1) from log group by method
Operasi SDK
Program sampel Python
# encoding: utf-8
from __future__ import print_function
from aliyun.log import *
from aliyun.log.util import base64_encodestring
from random import randint
import time
import os
from datetime import datetime
endpoint = os.environ.get('ALIYUN_LOG_SAMPLE_ENDPOINT', 'cn-chengdu.log.aliyuncs.com')
accessKeyId = os.environ.get('ALIYUN_LOG_SAMPLE_ACCESSID', '')
accessKey = os.environ.get('ALIYUN_LOG_SAMPLE_ACCESSKEY', '')
logstore = os.environ.get('ALIYUN_LOG_SAMPLE_LOGSTORE', '')
project = "ali-yunlei-chengdu"
client = LogClient(endpoint, accessKeyId, accessKey, '')
# Buat ExternalStore.
res = client.create_external_store(project,
ExternalStoreConfig(externalStoreName="rds_store", region="cn-chengdu",
storeType="rds-vpc",
vpcId="vpc-2vctx8reuqswmk********",
host='rm-2vc6x67972iv********.mysql.cn-chengdu.rds.aliyuncs.com',
port="3306", username="root", password="123456",
database="test_database", table="test"))
res.log_print()
# Dapatkan detail ExternalStore.
res = client.get_external_store(project,"rds_store")
res.log_print()
res = client.list_external_store(project,"")
res.log_print()
# Lakukan kueri JOIN.
req = GetLogsRequest(project,logstore,From,To,"","* | select count(1) from "+ logstore +" s join meta m on s.projectid = cast(m.ikey as varchar)")
res = client.get_logs(req)
res.log_print()
# Tulis hasil kueri dan analisis ke database MySQL.
req = GetLogsRequest(project,logstore,From,To,"","* | insert into rds_store select count(1) from "+ logstore )
res = client.get_logs(req)
res.log_print()Operasi terkait
Perbarui penyimpanan eksternal MySQL.
aliyunlog log update_external_store --project_name="log-rds-demo" --config="file:///home/shell/config.json"Hapus penyimpanan eksternal MySQL.
aliyunlog log delete_external_store --project_name="log-rds-demo" --store_name=sls_join_meta_store
Referensi
Untuk informasi lebih lanjut mengenai praktik terbaik dalam membuat penyimpanan eksternal MySQL, lihat Mengaitkan Logstore dengan database MySQL untuk analisis kueri.
Untuk informasi lebih lanjut mengenai cara membuat database MySQL yang dikelola sendiri pada instance ECS Alibaba Cloud, lihat Menyiapkan manual database MySQL (Linux).
Untuk informasi lebih lanjut mengenai cara membuat database AnalyticDB for MySQL dengan cepat, lihat Gambaran umum panduan cepat.
Untuk informasi lebih lanjut mengenai cara membuat instansiasi ApsaraDB RDS for MySQL dengan cepat, lihat Buat instansiasi ApsaraDB RDS for MySQL dengan cepat dan konfigurasikan database.