注: このプロジェクトは開発中です。壊れる可能性があるため、まだ依存しないでください。
MinSQL は、操作に SDK が必要ないという点でシンプルさを念頭に設計されたログ検索エンジンです。ほとんどのプログラミング言語とツールには、何らかの形式の http リクエスト機能 (つまり、curl) が備わっており、MinSQL と操作するために必要なのはそれだけです。 。
docker build . -t minio/minsql
docker run --rm minio/minsql --help
または
make
./minsql --help
MinIO のインスタンスは、MinSQL のストレージ エンジンとして必要です。作業を簡単にするために、MinIO と MinSQL 用のdocker-compose
サンプルを用意しています。
プロジェクトを実行するには、複数のMinSQL
インスタンス間の共有構成を保存するためのMeta Bucket
のアクセス詳細を提供する必要があります。場所とアクセスは、 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 | オプション: minsql をブートストラップするための 16 桁のアクセス キー |
MINSQL_ROOT_SECRET_KEY | オプション: minsql をブートストラップするための 32 桁の秘密キー |
ログの保存を開始するには、 MinSQL でDataStore
、 Log
、 Token
、およびAuthorization
を設定する必要があります。これは管理 REST API を使用して行うことができます。
サンプルコードを実行するには、次のことを行います。
minioplay
データストアmylog
サンプル データストアは、MinIO のデモ インスタンスであるplay
を指します。
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"
} '
その内容をminioplay
データストアに保存するログmylog
追加します。
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
そしてそれをPOST経由でMinSQLに送信します
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 エンティティのいずれかを使用すると、データの一部のみを取得できます。
位置によってデータから選択できます。たとえば、最初の列と 4 番目の列を取得するには、 $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 は、強力な Schema on Read アプローチのおかげで、生データからのデータ チャンクの抽出を容易にするエンティティの優れたリストを提供します。たとえば、エンティティ$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 によってサポートされるエンティティのリスト: