CATATAN: Proyek ini sedang dalam pengembangan, mohon jangan bergantung padanya dulu karena mungkin ada yang rusak.
MinSQL adalah mesin pencari log yang dirancang dengan mempertimbangkan kesederhanaan sejauh tidak diperlukan SDK untuk berinteraksi dengannya, sebagian besar bahasa dan alat pemrograman memiliki beberapa bentuk kemampuan permintaan http (yaitu: curl) dan hanya itu yang Anda perlukan untuk berinteraksi dengan MinSQL .
docker build . -t minio/minsql
docker run --rm minio/minsql --help
ATAU
make
./minsql --help
Sebuah instance dari MinIO diperlukan sebagai mesin penyimpanan untuk MinSQL. Untuk mempermudah kami memiliki contoh docker-compose
untuk MinIO dan MinSQL.
Untuk menjalankan proyek, Anda perlu memberikan detail akses Meta Bucket
untuk menyimpan konfigurasi bersama antara beberapa instance MinSQL
, lokasi dan akses ke sana harus dikonfigurasi melalui variabel lingkungan saat memulai MinSQL.
export MINSQL_METABUCKET_NAME=minsql-meta
export MINSQL_METABUCKET_ENDPOINT=http://localhost:9000
export MINSQL_METABUCKET_ACCESS_KEY=minio
export MINSQL_METABUCKET_SECRET_KEY=minio123
export MINSQL_ROOT_ACCESS_KEY=minsqlaccesskeyx
export MINSQL_ROOT_SECRET_KEY=minsqlsecretkeypleasechangexxxx
./minsql
Lalu buka http://127.0.0.1:9999/ui/
dan login dengan MINSQL_ROOT_ACCESS_KEY
dan MINSQL_ROOT_SECRET_KEY
yang disediakan.
Buat file penulisan
cat > docker-compose.yml <<EOF
version: '2'
services:
minio-engine:
image: minio/minio
volumes:
- data:/data
environment:
MINIO_ACCESS_KEY: minio
MINIO_SECRET_KEY: minio123
command: server /data
mc:
image: minio/mc
depends_on:
- minio
entrypoint: >
/bin/sh -c "
echo /usr/bin/mc config host a http://minio-engine:9000 minio minio123;
/usr/bin/mc mb a/minsql-meta;
"
minsql:
image: minio/minsql
depends_on:
- minio
- mc
ports:
- "9999:9999"
environment:
MINSQL_METABUCKET_NAME: minsql-meta
MINSQL_METABUCKET_ENDPOINT: http://minio-engine:9000
MINSQL_ACCESS_KEY: minio
MINSQL_SECRET_KEY: minio123
MINSQL_ROOT_ACCESS_KEY: minsqlaccesskeyx
MINSQL_ROOT_SECRET_KEY: minsqlsecretkeypleasechangexxxx
volumes:
data:
EOF
docker-compose up
Lingkungan | Keterangan |
---|---|
MINSQL_METABUCKET_NAME | Nama ember meta |
MINSQL_METABUCKET_ENDPOINT | Nama titik akhir, misal: http://localhost:9000 |
MINSQL_METABUCKET_ACCESS_KEY | Kunci Akses Meta Bucket |
MINSQL_METABUCKET_SECRET_KEY | Kunci Rahasia Meta Bucket |
MINSQL_PKCS12_CERT | Opsional: lokasi ke sertifikat pkcs12. |
MINSQL_PKCS12_PASSWORD | Opsional: kata sandi untuk membuka kunci sertifikat. |
MINSQL_ROOT_ACCESS_KEY | Opsional: kunci akses 16 digit untuk bootstrap minsql |
MINSQL_ROOT_SECRET_KEY | Opsional: 32 digit kunci rahasia untuk bootstrap minsql |
Untuk mulai menyimpan log, Anda perlu menyiapkan DataStore
, Log
, Token
, dan Authorization
di MinSQL, ini dapat dilakukan menggunakan REST API admin.
Untuk menjalankan kode sampel, kita akan:
minioplay
mylog
Contoh penyimpanan data kami akan mengarah ke play
, contoh demo MinIO.
curl -X POST
http://127.0.0.1:9999/api/datastores
-H ' Content-Type: application/json '
-d ' {
"bucket" : "play-minsql",
"endpoint" : "https://play.minio.io:9000",
"prefix" : "",
"name" : "minioplay",
"access_key" : "Q3AM3UQ867SPQQA43P2F",
"secret_key" : "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG"
} '
Kami akan menambahkan log mylog
yang menyimpan isinya di datastore minioplay
.
curl -X POST
http://127.0.0.1:9999/api/logs
-H ' Content-Type: application/json '
-d ' {
"name" : "mylog",
"datastores" : [
"minioplay",
],
"commit_window" : "5s"
} '
Kita akan membuat token dengan token hardcoded abcdefghijklmnopabcdefghijklmnopabcdefghijklmnop
curl -X POST
http://127.0.0.1:9999/api/tokens
-H ' Content-Type: application/json '
-d ' {
"access_key" : "abcdefghijklmnop",
"secret_key" : "abcdefghijklmnopabcdefghijklmnop",
"description" : "test",
"is_admin" : true,
"enabled" : false
} '
Terakhir, kami akan mengotorisasi token baru kami untuk mengakses mylog
curl -X POST
http://127.0.0.1:9999/api/auth/abcdefghijklmnop
-H ' Content-Type: application/json '
-d ' {
"log_name" : "mylog",
"api" : ["search","store"]
} '
Untuk log mylog
yang ditentukan pada konfigurasi, kami dapat menyimpan log di MinSQL dengan melakukan PUT
ke instance MinSQL Anda
curl -X PUT
http://127.0.0.1:9999/mylog/store
-H 'MINSQL-TOKEN: TOKEN1'
-d '10.8.0.1 - - [16/May/2019:23:02:56 +0000] "GET / HTTP/1.1" 400 256 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0"'
Anda dapat mengirim beberapa baris log yang dipisahkan oleh new line
Untuk mengambil data dari MinSQL Anda dapat menggunakan SQL. Perhatikan bahwa MinSQL adalah lapisan data dan bukan lapisan komputasi, oleh karena itu pernyataan SQL tertentu yang memerlukan komputasi (SUM, MAX, GROUP BY, JOIN, dll...) tidak didukung.
Semua pernyataan kueri harus dikirim melalui POST
ke instance MinSQL Anda.
Untuk memilih semua log untuk log tertentu, Anda dapat melakukan pernyataan SELECT sederhana
SELECT * FROM mylog
Dan kirimkan ke MinSQL melalui POST
curl -X POST
http://127.0.0.1:9999/search
-H 'MINSQL-TOKEN: TOKEN1'
-d 'SELECT * FROM mylog'
Ini akan mengembalikan Anda semua baris log mentah yang disimpan untuk log itu.
67.164.164.165 - - [24/Jul/2017:00:16:46 +0000] "GET /info.php HTTP/1.1" 200 24564 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"
67.164.164.165 - - [24/Jul/2017:00:16:48 +0000] "GET /favicon.ico HTTP/1.1" 404 209 "http://104.236.9.232/info.php" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"
24.26.204.22 - - [24/Jul/2017:00:17:16 +0000] "GET /info.php HTTP/1.1" 200 24579 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"
45.23.126.92 - - [24/Jul/2017:00:16:18 +0000] "GET /info.php HTTP/1.1" 200 24589 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"
Kita hanya bisa mendapatkan sebagian data dengan menggunakan salah satu entitas MinSQL yang didukung, yang dimulai dengan tanda $
.
Kita bisa memilih data berdasarkan posisinya, misalnya untuk mendapatkan kolom pertama dan keempat kita bisa menggunakan $1
dan $4
SELECT $ 1 , $ 4 FROM mylog;
MinSQL mana yang akan membalas
67.164.164.165 [24/Jul/2017:00:16:46
67.164.164.165 [24/Jul/2017:00:16:48
24.26.204.22 [24/Jul/2017:00:17:16
45.23.126.92 [24/Jul/2017:00:16:18
Anda dapat melihat bahwa data dipilih apa adanya, namun kolom tanggal yang dipilih tidak cukup bersih, MinSQL menyediakan entitas lain untuk menangani hal ini.
MinSQL menyediakan daftar entitas bagus yang memudahkan ekstraksi potongan data dari data mentah Anda berkat pendekatan Schema on Read kami yang kuat. Misalnya kita dapat memilih ip apa pun dalam data kita dengan menggunakan entitas $ip
dan tanggal apa pun menggunakan $date
.
SELECT $ip, $ date FROM mylog
MinSQL mana yang akan membalas
67.164.164.165 24/Jul/2017
67.164.164.165 24/Jul/2017
24.26.204.22 24/Jul/2017
45.23.126.92 24/Jul/2017
Jika data Anda berisi lebih dari satu alamat ip, Anda dapat mengakses ip berikutnya menggunakan entitas posisi.
SELECT $ip, $ip2, $ip3, $ date FROM mylog
Harap dicatat bahwa jika tidak ada nomor posisi yang ditentukan pada suatu entitas, maka secara default akan berada pada posisi pertama, dalam hal ini $ip == $ip1
Dengan menggunakan mesin pilih MinSQL yang canggih, Anda juga dapat memfilter data sehingga hanya informasi relevan yang perlu Anda ekstrak dari log Anda yang dikembalikan.
Misalnya, untuk memfilter satu ip dari log Anda, Anda dapat memilih berdasarkan $ip
SELECT * FROM mylog WHERE $ip = ' 67.164.164.165 '
MinSQL hanya akan membalas dengan baris yang cocok
67.164.164.165 - - [24/Jul/2017:00:16:46 +0000] "GET /info.php HTTP/1.1" 200 24564 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"
67.164.164.165 - - [24/Jul/2017:00:16:48 +0000] "GET /favicon.ico HTTP/1.1" 404 209 "http://104.236.9.232/info.php" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"
Anda dapat memilih baris log yang berisi nilai dengan menggunakan operator LIKE
atau NOT NULL
untuk entitas apa pun.
SELECT * FROM mylog WHERE $ line LIKE ' Intel ' AND $email IS NOT NULL
Kueri ini akan mengembalikan semua baris log yang berisi kata Intel
yang juga berisi alamat email.
Daftar entitas yang didukung oleh MinSQL :