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에서 변환을 빌드하는 방법을 설명합니다.

필수 열

모든 변환의 출력에는 형식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)

테이블 형식 연산자

스칼라 연산자

숫자 연산자

모든 숫자 연산자가 지원됩니다.

날짜/시간 및 시간 범위 산술 연산자

모든 날짜/시간 및 시간 범위 산술 연산자가 지원됩니다.

문자열 연산자

다음 문자열 연산자가 지원됩니다.

  • ==
  • !=
  • =~
  • !~
  • contains
  • !포함
  • contains_cs
  • !contains_cs
  • Hsa
  • !Hsa
  • 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 함수

동적 및 배열 함수

수학 함수

조건부 함수

문자열 함수

형식 함수

특수 함수

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

Sample output of parse_cef_dictionary function.

geo_location

IP 주소가 포함된 문자열(IPv4 및 IPv6이 지원됨) geo_location 이 지정된 경우 함수는 다음 특성을 포함하여 대략적인 지리적 위치를 반환합니다.

  • 국가
  • 지역
  • State(상태)
  • 구/군/시
  • 위도
  • 경도
| extend GeoLocation = geo_location("1.0.0.5")

Screenshot of sample output of geo_location function.

Important

이 함수에서 사용하는 IP 지리적 위치 서비스의 특성으로 인해 과도하게 사용되는 경우 데이터 수집 대기 시간이 발생할 수 있습니다. 변환당 이 함수를 여러 번 사용하는 경우 주의해야 합니다.

식별자 인용

필요에 따라 식별자 인용을 사용합니다.

다음 단계

  • 데이터 수집 규칙 및 연결을 Azure Monitor 에이전트를 사용하여 가상 머신에서 만듭니다.