ملحوظة: هذا المشروع قيد التطوير، يرجى عدم الاعتماد عليه حتى الآن لأن الأمور قد تتعطل.
MinSQL هو محرك بحث للسجلات تم تصميمه مع مراعاة البساطة إلى حد عدم الحاجة إلى SDK للتفاعل معه، ومعظم لغات وأدوات البرمجة لديها شكل من أشكال إمكانية طلب http (على سبيل المثال: curl) وهذا كل ما تحتاجه للتفاعل مع MinSQL .
docker build . -t minio/minsql
docker run --rm minio/minsql --help
أو
make
./minsql --help
هناك حاجة إلى مثيل MinIO كمحرك تخزين لـ MinSQL. لتسهيل الأمور، لدينا مثال docker-compose
لـ MinIO وMinSQL.
لتشغيل المشروع، تحتاج إلى توفير تفاصيل الوصول إلى Meta Bucket
لتخزين التكوين المشترك بين مثيلات MinSQL
المتعددة، ويجب تكوين الموقع والوصول إليه عبر متغيرات البيئة عند بدء 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
ثم انتقل إلى http://127.0.0.1:9999/ui/
وقم بتسجيل الدخول باستخدام MINSQL_ROOT_ACCESS_KEY
و MINSQL_ROOT_SECRET_KEY
المتوفرين.
قم بإنشاء ملف الإنشاء
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
بيئة | وصف |
---|---|
MINSQL_METABUCKET_NAME | اسم دلو التعريف |
MINSQL_METABUCKET_ENDPOINT | اسم نقطة النهاية، على سبيل المثال: http://localhost:9000 |
MINSQL_METABUCKET_ACCESS_KEY | مفتاح الوصول إلى دلو التعريف |
MINSQL_METABUCKET_SECRET_KEY | مفتاح ميتا دلو السري |
MINSQL_PKCS12_CERT | اختياري: الموقع لشهادة pkcs12. |
MINSQL_PKCS12_PASSWORD | اختياري: كلمة المرور لفتح الشهادة. |
MINSQL_ROOT_ACCESS_KEY | اختياري: مفتاح وصول مكون من 16 رقمًا لـ bootstrap minsql |
MINSQL_ROOT_SECRET_KEY | اختياري: مفتاح سري مكون من 32 رقمًا لـ bootstrap minsql |
لبدء تخزين السجلات، يتعين عليك إعداد DataStore
و Log
و Token
Authorization
على MinSQL، ويمكن القيام بذلك باستخدام REST APIs للمسؤول.
للحصول على نموذج التعليمات البرمجية الخاص بنا، سنقوم بما يلي:
minioplay
mylog
سيشير نموذج مخزن البيانات الخاص بنا إلى play
، وهو مثيل تجريبي لـ 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"
} '
سنقوم بإضافة سجل mylog
الذي يخزن محتوياته في مخزن بيانات 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"
} '
سنقوم بإنشاء رمز مميز باستخدام رمز مضمن 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
} '
أخيرًا، سنقوم بتفويض الرمز الجديد الخاص بنا للوصول إلى 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"]
} '
بالنسبة لسجل mylog
المحدد في التكوين، يمكننا تخزين السجلات على MinSQL عن طريق إجراء PUT
على مثيل MinSQL الخاص بك
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"'
يمكنك إرسال أسطر سجل متعددة مفصولة بسطر new line
للحصول على البيانات من MinSQL يمكنك استخدام SQL. لاحظ أن MinSQL عبارة عن طبقة بيانات وليست طبقة حسابية، وبالتالي فإن بعض عبارات SQL التي تحتاج إلى عمليات حسابية (SUM، MAX، GROUP BY، JOIN، إلخ...) غير مدعومة.
يجب إرسال جميع عبارات الاستعلام عبر POST
إلى مثيل MinSQL الخاص بك.
لتحديد كافة السجلات لسجل معين، يمكنك إجراء عبارة SELECT بسيطة
SELECT * FROM mylog
وأرسل ذلك إلى MinSQL عبر POST
curl -X POST
http://127.0.0.1:9999/search
-H 'MINSQL-TOKEN: TOKEN1'
-d 'SELECT * FROM mylog'
سيؤدي هذا إلى إرجاع جميع سطور السجل الأولية المخزنة لهذا السجل.
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"
يمكننا الحصول على أجزاء فقط من البيانات باستخدام أي من كيانات MinSQL المدعومة، والتي تبدأ بعلامة $
.
يمكننا الاختيار من البيانات حسب موضعها، على سبيل المثال للحصول على العمود الأول والرابع يمكننا استخدام $1
و $4
SELECT $ 1 , $ 4 FROM mylog;
الذي سوف MinSQL الرد عليه
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
يمكنك أن ترى أنه تم تحديد البيانات كما هي، ولكن عمود التاريخ المحدد ليس نظيفًا بدرجة كافية، ويوفر MinSQL كيانات أخرى للتعامل مع هذا الأمر.
يوفر MinSQL قائمة رائعة بالكيانات التي تجعل استخراج أجزاء البيانات من بياناتك الأولية أمرًا سهلاً بفضل نهجنا القوي في مخطط القراءة. على سبيل المثال، يمكننا تحديد أي IP في بياناتنا باستخدام الكيان $ip
وأي تاريخ باستخدام $date
.
SELECT $ip, $ date FROM mylog
الذي سوف MinSQL الرد عليه
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
إذا كانت بياناتك تحتوي على أكثر من عنوان IP واحد، فيمكنك الوصول إلى عناوين IP اللاحقة باستخدام الكيانات الموضعية.
SELECT $ip, $ip2, $ip3, $ date FROM mylog
يرجى ملاحظة أنه إذا لم يتم تحديد رقم موضعي للكيان، فسيتم تعيينه افتراضيًا على الموضع الأول، في هذه الحالة $ip == $ip1
باستخدام محرك التحديد القوي MinSQL، يمكنك أيضًا تصفية البيانات بحيث يتم إرجاع المعلومات ذات الصلة التي تحتاج إلى استخراجها من سجلاتك فقط.
على سبيل المثال، لتصفية عنوان IP واحد من سجلاتك، يمكنك تحديده بواسطة $ip
SELECT * FROM mylog WHERE $ip = ' 67.164.164.165 '
والتي سوف يقوم MinSQL بالرد عليها فقط بالأسطر المطابقة
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"
يمكنك تحديد أسطر السجل التي تحتوي على قيمة باستخدام عامل التشغيل LIKE
أو NOT NULL
لأي كيان.
SELECT * FROM mylog WHERE $ line LIKE ' Intel ' AND $email IS NOT NULL
سيُرجع هذا الاستعلام كافة أسطر السجل التي تحتوي على كلمة Intel
والتي تحتوي أيضًا على عنوان بريد إلكتروني.
قائمة الكيانات المدعومة بواسطة MinSQL: