참고: 이 프로젝트는 개발 중이므로 문제가 발생할 수 있으므로 아직 의존하지 마십시오.
MinSQL은 상호 작용하는 데 SDK가 필요하지 않을 정도로 단순성을 염두에 두고 설계된 로그 검색 엔진입니다. 대부분의 프로그래밍 언어와 도구에는 일종의 http 요청 기능(예: 컬)이 있으며 이것이 MinSQL과 상호 작용하는 데 필요한 전부입니다. .
docker build . -t minio/minsql
docker run --rm minio/minsql --help
또는
make
./minsql --help
MinSQL의 스토리지 엔진으로 MinIO 인스턴스가 필요합니다. 작업을 더 쉽게 하기 위해 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 엔터티를 사용하여 데이터의 일부만 가져올 수 있습니다.
위치에 따라 데이터에서 선택할 수 있습니다. 예를 들어 첫 번째 열과 네 번째 열을 얻으려면 $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이 지원하는 엔터티 목록은 다음과 같습니다.