OpenSearch SQL 언어 - Amazon CloudWatch Logs

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

OpenSearch SQL 언어

이 섹션에는 OpenSearch SQL을 사용한 CloudWatch Logs 쿼리에 대한 기본 소개가 포함되어 있습니다. 관계형 데이터베이스로 작업하는 데 익숙한 옵션을 제공합니다. OpenSearch SQL은 SQL 기능의 하위 집합을 제공하므로 임시 쿼리 및 데이터 분석 작업을 수행하는 데 적합합니다. OpenSearch SQL을 사용하면 SELECT, FROM, WHERE, GROUP BY, HAVING 및 기타 다양한 SQL 명령 및 함수와 같은 명령을 사용할 수 있습니다. 로그 그룹 간에 JOINs 실행하고, 하위 쿼리를 사용하여 로그 그룹 간에 데이터를 상호 연관시키고, 풍부한 JSON, 수학, 문자열, 조건부 및 기타 SQL 함수 세트를 사용하여 로그 및 보안 데이터에 대한 강력한 분석을 수행할 수 있습니다.

OpenSearch SQL은 표준 로그 클래스의 로그 그룹 쿼리에만 사용할 수 있습니다. 쿼리할 로그 그룹을 선택할 때 단일 로그 그룹, 접두사를 공유하는 로그 그룹 세트를 선택하거나 모든 로그 그룹을 선택할 수 있습니다.

참고

다음 표에는 CloudWatch Logs에서 지원되는 SQL 명령 및 함수가 나열되어 있습니다. 구문을 포함한 모든 OpenSearch SQL 명령에 대한 자세한 내용은 OpenSearch Service 개발자 안내서의 지원되는 SQL 명령을 참조하세요.

지원되는 SQL 명령

참고

예제 쿼리 열에서 쿼리하려는 데이터 소스에 따라 <logGroup> 필요에 따라를 바꿉니다.

명령 또는 함수 쿼리 예 설명

SELECT

SELECT `@message`, Operation FROM `LogGroupA`

프로젝션된 값을 표시합니다.

FROM

SELECT `@message`, Operation FROM `LogGroupA`

데이터를 검색할 소스 테이블(들) 또는 뷰(들)를 지정하는 기본 제공 절로, 다양한 유형의 조인 및 하위 쿼리를 지원합니다.

WHERE

SELECT * FROM `LogGroupA` WHERE Operation = 'x'

제공된 필드 기준에 따라 로그 이벤트를 필터링합니다.

GROUP BY

SELECT `@logStream`, COUNT(*) as log_count FROM `LogGroupA` GROUP BY `@logStream`

범주를 기반으로 로그 이벤트를 그룹화하고 통계를 기반으로 평균을 찾습니다.

HAVING

SELECT `@logStream`, COUNT(*) as log_count FROM `LogGroupA` GROUP BY `@logStream` HAVING log_count > 100

그룹화 조건을 기준으로 결과를 필터링합니다.

ORDER BY

SELECT * FROM `LogGroupA` ORDER BY `@timestamp` DESC

ORDER BY 절의 필드를 기반으로 결과를 정렬합니다. 내림차순 또는 오름차순으로 정렬할 수 있습니다.

JOIN

SELECT A.`@message`, B.`@timestamp`FROM `LogGroupA` as A INNER JOIN `LogGroupB` as B ON A.`requestId` = B.`requestId`

공통 필드를 기반으로 두 테이블의 결과를 조인합니다. 내부 조인 또는 왼쪽 외부 조인을 지정해야 합니다.

LIMIT

Select * from `LogGroupA` limit 10

표시된 쿼리 결과를 첫 번째 N개 행으로 제한합니다.

문자열 함수

SELECT upper(Operation) , lower(Operation), Operation FROM `LogGroupA`

SQL 쿼리 내에서 문자열 및 텍스트 데이터를 조작하고 변환할 수 있는 SQL의 내장 함수입니다. 예를 들어 변환 사례, 문자열 결합, 부분 추출, 텍스트 정리 등이 있습니다.

날짜 함수

SELECT current_date() as today, date_add(current_date(), 30) as thirty_days_later, last_day(current_date()) as month_end FROM `LogGroupA`

SQL 쿼리에서 날짜 및 타임스탬프 데이터를 처리하고 변환하기 위한 내장 함수입니다. 예: date_add, date_format, datediff, current_date.

조건 함수

SELECT Operation, IF(Error > 0, 'High', 'Low') as error_category FROM `LogGroupA`;

지정된 조건을 기반으로 작업을 수행하거나 조건부로 표현식을 평가하는 내장 함수입니다. 예: CASE 및 IF.

함수 집계

SELECT AVG(bytes) as bytesWritten FROM `LogGroupA`

여러 행에 대해 계산을 수행하여 단일 요약 값을 생성하는 내장 함수입니다. SUM, COUNT, AVG, MAX 및 MIN을 예로 들 수 있습니다.

JSON 함수

SELECT get_json_object(json_column, '$.name') as name FROM `LogGroupA`

데이터 세트에서 JSON 구조를 조작할 수 있도록 SQL 쿼리(예: from_json, to_json, get_json_object, json_tuple) 내에서 JSON 형식의 데이터를 구문 분석, 추출, 수정 및 쿼리하는 내장 함수입니다.

배열 함수

SELECT scores, size(scores) as length, array_contains(scores, 90) as has_90 FROM `LogGroupA`;

SQL 쿼리에서 배열 유형 열로 작업하기 위한 내장 함수를 사용하면 배열 데이터 액세스, 수정 및 분석과 같은 작업(예: 크기, 폭발, array_contains)을 수행할 수 있습니다.

윈도 함수

SELECT field1, field2, RANK() OVER (ORDER BY field2 DESC) as field2Rank FROM `LogGroupA`;

현재 행(창)과 관련된 지정된 행 집합에 대해 계산을 수행하여 순위, 실행 합계 및 이동 평균과 같은 작업을 활성화하는 내장 함수입니다. 예: ROW_NUMBER, RANK, LAG 및 LEAD

변환 함수

SELECT CAST('123' AS INT) as converted_number, CAST(123 AS STRING) as converted_string FROM `LogGroupA`

SQL 쿼리 내에서 데이터를 한 유형에서 다른 유형으로 변환하여 데이터 유형 변환 및 형식 변환을 지원하는 내장 함수입니다. 예: CAST, TO_DATE, TO_TIMESTAMP, BINARY.

조건자 함수

SELECT scores, size(scores) as length, array_contains(scores, 90) as has_90 FROM `LogGroupA`;

조건을 평가하고 지정된 기준 또는 패턴을 기반으로 부울 값(true/false)을 반환하는 내장 함수입니다. 예를 들어 IN, LIKE, BETWEEN, IS NULL 및 EXISTS가 있습니다.

여러 로그 그룹 선택

SELECT lg1.field1, lg1.field2 from `logGroups( logGroupIdentifier: ['LogGroup1', 'LogGroup2'])` as lg1 where lg1.field3= "Success"

SELECT 문에서 여러 로그 그룹을 지정할 수 있습니다.

multi-log-group 쿼리에 지원되는 SQL

SQL에서 여러 로그 그룹을 쿼리하는 사용 사례를 지원하려면 logGroups 명령을 사용할 수 있습니다. 이 구문을 사용하여 FROM 명령에 지정하여 여러 로그 그룹을 쿼리할 수 있습니다.

구문:

`logGroups( logGroupIdentifier: ['LogGroup1','LogGroup2', ...'LogGroupn'] )

이 구문에서는 logGroupIdentifier 파라미터에 최대 50개의 로그 그룹을 지정할 수 있습니다. 모니터링 계정의 로그 그룹을 참조하려면 LogGroup 이름 대신 ARNs 사용합니다.

쿼리 예제:

SELECT LG1.Column1, LG1.Column2 from `logGroups( logGroupIdentifier: ['LogGroup1', 'LogGroup2'] )` as LG1 WHERE LG1.Column1 = 'ABC'

CloudWatch Logs를 쿼리할 때 FROM 문 뒤에 여러 로그 그룹이 포함된 다음 구문은 지원되지 않습니다.

SELECT Column1, Column2 FROM 'LogGroup1', 'LogGroup2', ...'LogGroupn' WHERE Column1 = 'ABC'

제한 사항

OpenSearch SQL을 사용하여 CloudWatch Logs Insights에서 쿼리할 때 다음 제한 사항이 적용됩니다.

  • SELECT 문에는 JOIN을 하나만 포함할 수 있습니다.

  • 중첩 하위 쿼리는 한 수준만 지원됩니다.

  • 세미콜론(;)으로 구분된 여러 문 쿼리는 지원되지 않습니다.

  • 동일하지만 경우에 따라서만 다른 필드 이름을 포함하는 쿼리(예: field1 및 FIELD1)는 지원되지 않습니다.

    예를 들어 다음 쿼리는 지원되지 않습니다.

    Select AWSAccountId, AwsAccountId from LogGroup

    그러나 필드 이름(@logStream)이 두 로그 그룹에서 동일하기 때문에 다음 쿼리가 지원됩니다.

    Select a.`@logStream`, b.`@logStream` from Table A INNER Join Table B on a.id = b.id
  • 함수와 표현식은 필드 이름에서 작동해야 하며 FROM 절에 지정된 로그 그룹이 있는 SELECT 문의 일부여야 합니다.

    예를 들어이 쿼리는 지원되지 않습니다.

    SELECT cos(10) FROM LogGroup

    이 쿼리는 다음과 같이 지원됩니다.

    SELECT cos(field1) FROM LogGroup
  • SQL 또는 PPL 명령을 사용하는 경우 특정 필드를 백틱으로 묶어 성공적으로 쿼리합니다. 백틱은 특수 문자(비영숫자 및 비숫자)가 있는 필드에 필요합니다. 예를 들어 , Operation.Export@message를 백틱Test::Field으로 묶습니다. 순전히 영문자 이름의 필드를 백틱으로 묶을 필요는 없습니다.

    단순 필드가 있는 쿼리의 예:

    SELECT SessionToken, Operation, StartTime FROM `LogGroup-A` LIMIT 1000;

    백틱이 추가된 유사한 쿼리:

    SELECT `@SessionToken`, `@Operation`, `@StartTime` FROM `LogGroup-A` LIMIT 1000;