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 명령을 참조하세요.

사용할 수 있는 다른 쿼리 언어에 대한 자세한 내용은CloudWatch Logs Insights, OpenSearch Service PPLCloudWatch를 Metrics Insights참조하세요.

지원되는 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;