기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
OpenSearch Structured Query Language(SQL)
이 섹션에는 OpenSearch SQL을 사용한 CloudWatch Logs 쿼리에 대한 기본 소개가 포함되어 있습니다. 관계형 데이터베이스로 작업하는 데 익숙한 옵션을 제공합니다. OpenSearch SQL은 SQL 기능의 하위 집합을 제공하므로 임시 쿼리 및 데이터 분석 작업을 수행하는 데 적합합니다. OpenSearch SQL을 사용하면 SELECT, FROM, WHERE, GROUP BY, HAVING 및 기타 다양한 SQL 명령 및 함수와 같은 명령을 사용할 수 있습니다. 로그 그룹 간에 조인하고, 하위 쿼리를 사용하여 로그 그룹 간에 데이터를 상호 연관시키고, 풍부한 JSON, 수학, 문자열, 조건부 및 기타 SQL 함수 집합을 사용하여 로그 및 보안 데이터에 대한 강력한 분석을 수행할 수 있습니다.
filterIndex를 사용하여 쿼리에서 지정한 필드에 인덱싱된 로그 그룹만 검색하도록 강제하여 인덱스된 데이터만 반환합니다. 쿼리에 지정된 필드가 포함된 로그 이벤트가 없는 로그 그룹을 건너뛰고이 필드 인덱스의 쿼리에 지정된 값과 일치하는 로그 그룹만 스캔하여 스캔 볼륨을 줄입니다. filterIndex를 사용하여 필드 이름을 지정하고 필드 이름 및 값을 지정하여 지정된 필드 및 값이 포함된 인덱싱된 데이터만 쿼리합니다.
표준 로그 클래스에서 로그 그룹의 쿼리에 OpenSearch SQL을 사용할 수 있습니다. SQL은 데이터 소스 이름 및 데이터 소스 유형을 사용한 쿼리도 지원합니다.
참고
다음 표에는 CloudWatch Logs에서 지원되는 SQL 명령 및 함수가 나열되어 있습니다. 구문을 포함한 모든 OpenSearch SQL 명령에 대한 자세한 내용은 OpenSearch Service 개발자 가이드의 지원되는 SQL 명령을 참조하세요.
사용할 수 있는 다른 쿼리 언어에 대한 자세한 내용은CloudWatch Logs Insights, OpenSearch Service PPL 및 CloudWatch Metrics Insights를 참조하세요.
지원되는 SQL 명령
참고
예제 쿼리 열에서 쿼리하려는 데이터 소스에 따라 필요에 따라 을 바꿉니다.<logGroup>
| 명령 또는 함수 | 예제 쿼리 | 설명 |
|---|---|---|
|
SELECT |
|
프로젝션된 값을 표시합니다. |
|
FROM |
|
다양한 유형의 조인 및 하위 쿼리를 지원하여 데이터를 검색할 소스 테이블 또는 보기를 지정하는 기본 제공 절입니다. |
|
WHERE |
|
제공된 필드 기준에 따라 로그 이벤트를 필터링합니다. |
|
filterIndex |
|
쿼리에서 지정한 필드에 인덱싱된 로그 그룹만 검색하도록 쿼리를 강제하여 인덱싱된 데이터만 반환합니다. |
|
GROUP BY |
|
카테고리를 기반으로 로그 이벤트를 그룹화하고 통계를 기반으로 평균을 찾습니다. |
|
HAVING |
|
그룹화 조건을 기준으로 결과를 필터링합니다. |
|
ORDER BY |
|
ORDER BY 절의 필드를 기반으로 결과를 정렬합니다. 내림차순 또는 오름차순으로 정렬할 수 있습니다. |
|
JOIN |
|
공통 필드를 기반으로 두 테이블의 결과를 조인합니다. 내부 조인 또는 왼쪽 외부 조인을 지정해야 합니다. |
|
LIMIT |
|
표시된 쿼리 결과를 첫 번째 N개 행으로 제한합니다. |
|
문자열 함수 |
|
SQL 쿼리 내에서 문자열 및 텍스트 데이터를 조작하고 변환할 수 있는 SQL의 내장 함수입니다. 예를 들어, 변환 사례, 문자열 결합, 부분 추출, 텍스트 정리 등이 있습니다. |
|
날짜 함수 |
|
SQL 쿼리에서 날짜 및 타임스탬프 데이터를 처리하고 변환하기 위한 내장 함수입니다. 예: date_add, date_format, datediff, current_date |
|
조건 함수 |
|
지정된 조건을 기반으로 작업을 수행하거나 조건부로 표현식을 평가하는 내장 함수입니다. 예: CASE 및 IF |
|
집계 함수 |
|
여러 행에서 계산을 수행하여 단일 요약 값을 생성하는 내장 함수입니다. 예: SUM, COUNT, AVG, MAX 및 MIN |
|
JSON 함수 |
|
데이터세트에서 JSON 구조를 조작할 수 있도록 SQL 쿼리(예: from_json, to_json, get_json_object, json_tuple) 내에서 JSON 형식의 데이터를 구문 분석, 추출, 수정 및 쿼리하는 기본 제공 함수입니다. |
|
배열 함수 |
|
SQL 쿼리에서 배열 유형 열로 작업하기 위한 내장 함수를 사용하면 배열 데이터 액세스, 수정 및 분석과 같은 연산(예: size, explode, array_contains)을 수행할 수 있습니다. |
|
윈도우 함수 |
|
현재 행(윈도우)과 관련된 지정된 행 세트에서 계산을 수행하여 순위, 합계 실행 및 이동 평균과 같은 연산을 활성화하는 내장 함수입니다. 예: ROW_NUMBER, RANK, LAG 및 LEAD |
|
변환 함수 |
|
SQL 쿼리 내에서 데이터를 한 유형에서 다른 유형으로 변환하여 데이터 유형 변환 및 형식 변환을 지원하는 내장 함수. 예: CAST, TO_DATE, TO_TIMESTAMP 및 BINARY |
|
조건자 함수 |
|
조건을 평가하고 지정된 기준 또는 패턴에 따라 부울 값(true/false)을 반환하는 내장 함수입니다. 예: IN, LIKE, BETWEEN, IS NULL 및 EXISTS |
|
여러 로그 그룹 선택 |
|
SELECT 명령문에서 여러 로그 그룹 지정 가능 |
|
여러 데이터 소스 선택 |
|
SELECT 문에서 여러 데이터 소스를 지정할 수 있습니다. |
multi-log-group 쿼리에 지원되는 SQL
SQL에서 여러 로그 그룹을 쿼리하는 사용 사례를 지원하려면 logGroups 명령을 사용할 수 있습니다. 이 구문을 사용하여 FROM 명령에 지정하여 여러 로그 그룹을 쿼리할 수 있습니다.
구문:
`logGroups( logGroupIdentifier: ['LogGroup1','LogGroup2', ...'LogGroupn'] )
이 구문에서는 logGroupIdentifier 파라미터에 최대 50개의 로그 그룹을 지정할 수 있습니다. 모니터링 계정의 로그 그룹을 참조하려면 LogGroup 이름 대신 ARN을 사용합니다.
예제 쿼리:
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'
데이터 소스 쿼리에 지원되는 SQL
SQL에서 데이터 소스를 쿼리하는 사용 사례를 지원하려면 dataSource 명령을 사용하면 됩니다. 이 구문을 사용하면 FROM 명령에 지정하여 데이터 소스를 쿼리할 수 있습니다. 최대 10개의 데이터 소스를 지정할 수 있습니다.
구문
`dataSource( ['DataSource1', 'DataSource2', ...'DataSourcen'] )`
쿼리 예제
SELECT DS1.Column1, DS1.Column2 from `dataSource( ['DataSource1', 'DataSource2'] )` as DS1 WHERE DS1.Column1 = 'ABC'
쿼리 범위
AWS CLI 및 API에서 로그 그룹, 데이터 소스 및 유형, 필드 인덱스를 사용하여 쿼리할 로그를 지정할 수 있습니다.
로그 그룹
로그 그룹 소스 선택은 고객이 검색해야 하는 정확한 로그 그룹(들)을 알 때 사용할 수 있습니다.
SELECT * FROM `logGroups(logGroupIdentifier: ['/aws/lambda/my-function'])`;
데이터 소스 및 유형
고객은 데이터 소스 이름 및 데이터 소스 유형을 사용하여 로그를 쿼리할 수 있습니다.
데이터 소스 및 유형 기반 소스 선택은 고객이 쿼리해야 하는 정확한 데이터 소스를 알고 있을 때 사용할 수 있습니다. 이 쿼리는 지정된 데이터 소스 및 유형이 포함된 하나 이상의 로그 그룹을 통해 실행됩니다.
SQL에서 데이터 소스를 쿼리하는 사용 사례를 지원하려면 dataSource 명령을 사용하면 됩니다. 이 구문을 사용하면 FROM 명령에 지정하여 데이터 소스를 쿼리할 수 있습니다. 최대 10개의 데이터 소스를 지정할 수 있습니다.
구문:
`dataSource( ['DataSource1.Type1', 'DataSource2.Type2', ...'DataSourcen.Typen'] )`
예제 쿼리:
SELECT DS1.Column1, DS1.Column2 from `dataSource( ['DataSource1.Type1', 'DataSource2.Type2'] )` as DS1 WHERE DS1.Column1 = 'ABC'
데이터 소스별 쿼리에 대한 자세한 내용은 섹션을 참조하세요패싯을 사용하여 로그 그룹화 및 탐색.
결합된 예제
고객은 백틱 내의 모든 소스 선택 연산자를 어떤 순서로든 지정할 수 있으며 결과는 적용된 모든 조건의 교차점을 기반으로 합니다.
예를 들어 /aws/lambda/my-function-1에는 다양한 인덱스를 포함한 여러 데이터 소스 및 유형이 포함될 수 있습니다. 다음 쿼리가 실행되면 반환된 결과에는 소스 및 유형 DataSource1.Type1의 이벤트만 있으며 'status' = 200의 기준과 일치합니다.
SELECT * FROM ` logGroups(logGroupIdentifier: ['/aws/lambda/my-function']) filterIndex('status' = 200) dataSource(['DataSource1.Type1']) `;
필드 인덱스
필드 인덱스 기반 소스 선택은 필터가 인덱싱된 필드를 대상으로 할 때 관련 로그 그룹을 자동으로 식별하여 스캔 볼륨과 쿼리 런타임을 줄입니다.
filterIndex를 사용하여 쿼리에서 지정한 필드에 인덱싱된 로그 그룹만 검색하도록 강제하여 인덱스된 데이터만 반환합니다. 해당 필드에 인덱싱된 이러한 로그 그룹의 경우, 인덱싱된 필드의 쿼리에 지정된 필드가 포함된 로그 이벤트가 없는 로그 그룹을 건너뛰어 쿼리를 추가로 최적화합니다. 또한 해당 필드 인덱스의 쿼리에 지정된 값과 일치하는 이러한 로그 그룹의 로그 이벤트만 스캔하려고 시도하여 스캔 볼륨을 줄입니다. 필드 인덱스 및 필드 인덱스 생성 방법에 대한 자세한 내용은 필드 인덱스 생성을 참조하여 쿼리 성능을 개선하고 스캔 볼륨을 줄입니다.
SQL에서 filterIndex는 인덱스로 처리해야 하는 키 값 페어를 지정하는 데 사용됩니다. 구문은 다음과 같습니다.
SELECT * FROM `filterIndex('region' = 'us-east-1')`;
여기서 각 항목은 다음과 같습니다.
-
filterIndex(...)는 그 안에 있는 키 값을 필드 인덱스로 취급하도록 지정합니다. 각 키 값 페어는 쉼표로 구분됩니다(아래 예).
-
'region' = 'us-east-1'은 적용할 실제 조건을 지정합니다.
-
참고: 대신 = 고객이 IN을 사용하여 여러 값을 지정할 수 있음(아래 예)
-
여러 filterIndex를 사용하면 "AND"를 사용하여 조건을 결합합니다. 이 예에서는 로그 일치 상태=200이고 us-east-1 또는 us-west-2의 리전이 쿼리됩니다.
SELECT * FROM `filterIndex('status' = 200, 'region' IN ['us-east-1', 'us-west-2'])`;
제한 사항
OpenSearch SQL을 사용하여 CloudWatch Logs Insights에서 쿼리할 때 다음 제한 사항이 적용됩니다.
-
SELECT 명령문에는 JOIN을 하나만 포함할 수 있습니다.
-
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 명령을 사용하는 경우 특정 필드를 백틱에 묶어 성공적으로 쿼리합니다. 백틱은 특수 문자(비영문자 및 비숫자)가 있는 필드에 필요합니다. 예를 들어, 백틱에서
@message,Operation.Export및Test::Field을 묶습니다. 순전히 알파벳 이름의 필드를 백틱으로 묶을 필요는 없습니다.간단한 필드가 있는 예제 쿼리:
SELECT SessionToken, Operation, StartTime FROM `LogGroup-A` LIMIT 1000;백틱이 추가된 유사한 쿼리:
SELECT `@SessionToken`, `@Operation`, `@StartTime` FROM `LogGroup-A` LIMIT 1000;