Azure Monitor의 변환 구조
Azure Monitor 의 변환을 사용하면 들어오는 데이터가 Log Analytics 작업 영역에 저장되기 전에 필터링하거나 수정할 수 있습니다. 이는 DCR(데이터 수집 규칙)에서 KQL(Kusto 쿼리 언어) 문으로 구현됩니다. 이 문서에서는 이 쿼리를 구성하는 방법에 대한 세부 정보와 허용되는 KQL 언어에 대한 제한 사항을 설명합니다.
변환 구조
KQL 문은 데이터 원본의 각 항목에 개별적으로 적용됩니다. 들어오는 데이터의 형식을 이해하고 대상 테이블의 구조로 출력을 만들어야 합니다. 명명된 source
가상 테이블은 입력 스트림을 나타냅니다. source
테이블 열은 입력 데이터 스트림 정의와 일치합니다. 다음은 변환의 일반적인 예입니다. 이 예에는 다음 기능이 포함됩니다.
- 문으로 들어오는 데이터를 필터링합니다
where
. - 연산자를 사용하여 새 열을 추가합니다
extend
. - 연산자를 사용하여 대상 테이블의 열과 일치하도록 출력의 형식을 지정
project
합니다.
source
| where severity == "Critical"
| extend Properties = parse_json(properties)
| project
TimeGenerated = todatetime(["time"]),
Category = category,
StatusDescription = StatusDescription,
EventName = name,
EventId = tostring(Properties.EventId)
KQL 제한 사항
변환은 각 레코드에 개별적으로 적용되므로 여러 레코드에서 작동하는 KQL 연산자를 사용할 수 없습니다. 단일 행을 입력으로 사용하고 둘 이상의 행을 반환하지 않는 연산자만 지원됩니다. 예를 들어, summarize는 여러 레코드를 요약하므로 지원되지 않습니다. 지원되는 기능의 전체 목록은 지원되는 KQL 기능을 참조하세요.
DCR(데이터 수집 규칙)의 변환을 통해 들어오는 데이터를 Log Analytics 작업 영역에 저장하기 전에 필터링하거나 수정할 수 있습니다. 이 문서에서는 변환 문에 사용되는 KQL(Kusto 쿼리 언어)의 세부 정보 및 제한 사항을 포함하여 DCR에서 변환을 빌드하는 방법을 설명합니다.
구문 분석 명령
변환의 구문 분석 명령은 성능상의 이유로 문당 10개의 열로 제한됩니다. 변환에 10개 이상의 열을 구문 분석해야 하는 경우 큰 구문 분석 명령 분리에 설명된 대로 여러 문으로 분할합니다.
필수 열
모든 변환의 출력은 datetime
형식의 TimeGenerated
라는 열에 유효한 타임스탬프를 포함해야 합니다. 최종 extend
또는 project
블록에 포함해야 합니다! 변환 출력 없이 TimeGenerated
DCR을 만들거나 업데이트하면 오류가 발생합니다.
동적 데이터 처리
동적 데이터와 함께 다음 입력을 고려합니다.
{
"TimeGenerated" : "2021-11-07T09:13:06.570354Z",
"Message": "Houston, we have a problem",
"AdditionalContext": {
"Level": 2,
"DeviceID": "apollo13"
}
}
AdditionalContext의 속성에 액세스하려면 입력 스트림에서 이를 동적 형식 열로 정의합니다.
"columns": [
{
"name": "TimeGenerated",
"type": "datetime"
},
{
"name": "Message",
"type": "string"
},
{
"name": "AdditionalContext",
"type": "dynamic"
}
]
이제 AdditionalContext 열의 콘텐츠를 구문 분석하여 KQL 변환에서 사용할 수 있습니다.
source
| extend parsedAdditionalContext = parse_json(AdditionalContext)
| extend Level = toint (parsedAdditionalContext.Level)
| extend DeviceId = tostring(parsedAdditionalContext.DeviceID)
동적 리터럴
함수를 parse_json
사용하여 동적 리터럴을 처리합니다.
예를 들어 다음 쿼리는 동일한 기능을 제공합니다.
print d=dynamic({"a":123, "b":"hello", "c":[1,2,3], "d":{}})
print d=parse_json('{"a":123, "b":"hello", "c":[1,2,3], "d":{}}')
지원되는 KQL 기능
지원되는 문장
Let 문
오른쪽 let
은 스칼라 식, 테이블 형식 식 또는 사용자 정의 함수일 수 있습니다. 스칼라 인수가 있는 사용자 정의 함수만 지원됩니다.
테이블 형식 식 명령문
KQL 문에 대해 지원되는 유일한 데이터 원본은 다음과 같습니다.
source, 원본 데이터를 나타냅니다. 예시:
source | where ActivityId == "383112e4-a7a8-4b94-a701-4266dfc18e41" | project PreciseTimeStamp, Message
print
연산자- 항상 단일 행을 생성합니다. 예시:print x = 2 + 2, y = 5 | extend z = exp2(x) + exp2(y)
테이블 형식 연산자
extend
project
print
where
parse
project-away
project-rename
datatable
columnifexists
(column_ifexists 대신 columnifexists 사용)
스칼라 연산자
숫자 연산자
모든 숫자 연산자가 지원됩니다.
날짜/시간 및 시간 범위 산술 연산자
모든 날짜/시간 및 시간 범위 산술 연산자가 지원됩니다.
문자열 연산자
다음 문자열 연산자가 지원됩니다.
==
!=
=~
!~
contains
!contains
contains_cs
!contains_cs
has
!has
has_cs
!has_cs
startswith
!startswith
startswith_cs
!startswith_cs
endswith
!endswith
endswith_cs
!endswith_cs
matches regex
in
!in
비트 연산자
다음 비트 연산자가 지원됩니다.
binary_and()
binary_or()
binary_xor()
binary_not()
binary_shift_left()
binary_shift_right()
스칼라 함수
비트 함수
변환 함수
DateTime 및 TimeSpan 함수
ago
datetime_add
datetime_diff
datetime_part
dayofmonth
dayofweek
dayofyear
endofday
endofmonth
endofweek
endofyear
getmonth
getyear
hourofday
make_datetime
make_timespan
now
startofday
startofmonth
startofweek
startofyear
todatetime
totimespan
weekofyear
동적 및 배열 함수
수학 함수
조건부 함수
문자열 함수
base64_encodestring
(base64_encode_tostring 대신 base64_encodestring 사용)base64_decodestring
(base64_decode_tostring 대신 base64_decodestring 사용)countof
extract
extract_all
indexof
isempty
isnotempty
parse_json
replace
split
strcat
strcat_delim
strlen
substring
tolower
toupper
hash_sha256
형식 함수
특수 함수
parse_cef_dictionary
CEF 메시지가 포함된 문자열이 지정된 경우 parse_cef_dictionary
는 메시지의 Extension 속성을 동적 키/값 개체로 구문 분석합니다. 세미콜론은 예제와 같이 메서드에 원시 메시지를 전달하기 전에 대체해야 하는 예약 문자입니다.
| extend cefMessage=iff(cefMessage contains_cs ";", replace(";", " ", cefMessage), cefMessage)
| extend parsedCefDictionaryMessage =parse_cef_dictionary(cefMessage)
| extend parsecefDictionaryExtension = parsedCefDictionaryMessage["Extension"]
| project TimeGenerated, cefMessage, parsecefDictionaryExtension
geo_location
IP 주소가 포함된 문자열(IPv4 및 IPv6이 지원됨)이 지정된 경우, geo_location
함수는 다음 속성을 포함하여 대략적인 지리적 위치를 반환합니다:
- 국가
- 지역
- State(상태)
- City
- 위도
- 경도
| extend GeoLocation = geo_location("1.0.0.5")
Important
이 함수에서 사용하는 IP 지리적 위치 서비스의 특성으로 인해 과도하게 사용되는 경우 데이터 수집 대기 시간이 발생할 수 있습니다. 변환당 이 함수를 여러 번 이상 사용할 때 주의해야 합니다.
식별자 인용
필요에 따라 식별자 인용을 사용합니다.
다음 단계
- 데이터 수집 규칙 및 연결을 Azure Monitor 에이전트를 사용하여 가상 머신에서 만듭니다.