다음을 통해 공유


고급 검토 집합 탐색기를 사용하여 검토 집합에서 콘텐츠 검색(미리 보기)

Microsoft Purview eDiscovery고급 검토 집합 탐색기(미리 보기)를 사용하면 검토자가 정의된 KQL(Kusto 쿼리 언어) 하위 집합을 사용하여 검토 집합 콘텐츠에 대한 실시간 빅 데이터 분석을 실행할 수 있습니다. 고급 검토 집합 탐색기(미리 보기)를 사용하면 기본 콘텐츠를 수정하지 않고도 Microsoft Purview 포털에서 직접 검토 집합 데이터를 쿼리, 필터링 및 시각화할 수 있습니다. 쿼리는 인덱싱된 항목의 전체 집합에 대해 실행되며 테이블 형식 결과 또는 차트 시각화를 반환합니다.

고급 검토 집합 탐색기(미리 보기)를 사용하여 다음을 수행합니다.

  • 검토 집합 내에서 상위 항목 유형, 스폿 패턴을 식별하고 추세를 찾습니다.
  • 복잡한 필터링, 패턴 기반 텍스트 추출 및 데이터 형식 구문 분석을 사용하여 강력한 쿼리를 빌드합니다.
  • 사례 또는 organization 관련된 주요 정보를 분석하고 찾습니다.
  • 검토 집합 데이터를 포괄적으로 이해하기 위해 차트를 사용하여 쿼리 결과를 시각화합니다.

Microsoft Security Copilot 시작하여 AI의 힘을 사용하여 더 스마트하고 빠르게 작업하는 새로운 방법을 알아봅니다. Microsoft Purview의 Microsoft Security Copilot 대해 자세히 알아보세요.

고급 검토 집합 탐색기 열기(미리 보기)

고급 검토 집합 탐색기(미리 보기)를 열려면 다음 단계를 완료합니다.

  1. Microsoft Purview 포털로 이동하여 eDiscovery 권한이 할당된 사용자 계정에 대한 자격 증명으로 로그인합니다.
  2. eDiscovery 솔루션 카드 선택한 다음, 왼쪽 탐색 창에서 사례를 선택합니다.
  3. 사례를 선택한 다음, 검토 집합 탭을 선택합니다.
  4. 검토 집합을 선택한 다음 고급 쿼리 작성기(미리 보기) 탭을 선택합니다.

여기에서 검토 집합 데이터에 대해 KQL 쿼리를 직접 작성하고 실행할 수 있습니다.

검토 집합 콘텐츠를 필터링하는 시각적 코드 없는 접근 방식을 선호하는 경우 쿼리 조건 작성기를 사용하여 검토 집합에서 콘텐츠 검색을 참조하세요.

검토 집합에서 고급 검토 집합 탐색기(미리 보기)가 작동하는 방식

각 쿼리는 전체 검토 집합의 데이터에 대해 실행되고 다음을 반환합니다.

  • 일치하는 항목의 테이블 형식 목록 또는
  • 쿼리에 따라 차트 시각화입니다.

쿼리는 표준 KQL 파이프라인 구문을 따르며, 각 줄은 이전 단계의 결과에 따라 빌드됩니다. 포털은 테이블 이름을 첫 줄로 자동으로 추가합니다 ReviewSetTable . 각 후속 쿼리 줄은 로 \|시작해야 합니다.

예시:

ReviewSetTable
| where SubjectTitle has "Case"
| summarize count() by FileClass

참고

고급 검토 집합 탐색기(미리 보기)의 모든 쿼리는 현재 검토 집합의 인덱싱된 항목에 대해 실행됩니다. 테이블 이름을 지정할 필요가 없습니다. 검토 집합은 기본 데이터 원본 역할을 합니다.

모범 사례

  • 또는 render를 사용하기 전에 필터를 where 사용하여 summarize 데이터 범위를 좁히기 시작합니다.
  • 를 사용하여 take 전체 집계를 실행하기 전에 쿼리 논리의 유효성을 검사합니다.
  • 대규모 검토 집합에서 지나치게 광범위한 정규식 패턴을 사용하지 않습니다.
  • ColumnName)을 사용하여 where isnotempty( 속성에 대한 빈 값이 있는 항목을 제외하면 결과에서 예기치 않은 빈 행을 방지할 수 있습니다.

기타 고려 사항

고급 검토 집합 탐색기(미리 보기)는 모든 Kusto 연산자 및 속성을 지원하지 않습니다. 쿼리를 만들 때 다음 고려 사항을 염두에 두세요.

  • 쿼리는 읽기 전용이며 검토 집합 콘텐츠를 수정하지 않습니다. 검토 집합 작업에 대한 자세한 내용은 eDiscovery에서 검토 집합 관리를 참조하세요.
  • 결과는 검토 집합의 현재 인덱싱된 상태를 반영합니다. 검토 집합에 더 많은 데이터를 추가하면 쿼리가 다른 결과를 반환할 수 있습니다.
  • 모든 파일 형식을 쿼리할 수 있는 것은 아닙니다. 자세한 내용은 eDiscovery에서 지원되는 파일 형식을 참조하세요.
  • 쿼리가 10,000개 이상의 결과를 반환하는 경우 처음 10,000개 결과만 반환합니다. 쿼리를 수정하여 결과의 범위를 좁힐 수 있습니다.

Kusto 구문 및 참조는 다음 문서를 참조하세요.

지원되는 기본 연산자

쿼리에서 사용할 수 있는 속성의 전체 목록은 eDiscovery의 문서 메타데이터 필드를 참조하세요.

여기서 각 부분이 나타내는 의미는 다음과 같습니다.

연산자를 where 사용하여 제목, 키워드, 항목 클래스, 날짜 또는 참가자와 같은 메타데이터를 기반으로 항목을 필터링합니다.

다음 예제에서는 검토 집합을 필터링하여 제목 에 "Day" 텍스트가 포함된 항목만 반환합니다.

ReviewSetTable
| where SubjectTitle has "Day"

이 쿼리는 검토 집합을 필터링하여 ItemClass 가 로 시작하는 IPM.Appointment모든 일정 관련 항목을 포함하도록 필터링합니다. 이 항목은 표준 약속 및 확장 클래스(예: IPM.AppointmentSnapshot.SkypeTeams.Call)를 다룹니다.

ReviewSetTable
| where ItemClass startswith "IPM.Appointment"

Project

를 사용하여 project 관심 있는 속성만 반환합니다. 예를 들어 다음 쿼리는 두 가지 작업을 수행합니다.

  • 제목 텍스트별로 항목 필터링: 절은 where SubjectTitle has "Day"SubjectTitle 에 "Day"라는 단어가 포함된 항목으로만 결과를 제한합니다.
  • 단일 열 프로젝트: 절은 project SubjectTitle 필터링된 항목에 대한 SubjectTitle 속성만 반환하여 출력에서 다른 모든 열을 제거합니다.
ReviewSetTable
| where SubjectTitle has "Day"
| project SubjectTitle

확장

연산자는 extend 기본 데이터를 변경하지 않고 기존 필드에서 파생된 새 값을 만들어 쿼리 결과에 하나 이상의 계산 열을 추가합니다.

다음 예제에서는 검토 집합 항목을 함수를 사용하여 case() 새 열을 SizeCategory 만들어 작은(1MB), 중간(<1~5MB),중대형(5~10MB)큰 항목(>10MB)의 네 가지 크기 범주로 분류한 다음 를 사용하여 summarize각 범주의 항목 수를 집계합니다. 이는 조사자가 위험 평가 또는 우선 순위 지정을 위해 검토 집합의 파일 크기 분포를 신속하게 이해하는 데 도움이 됩니다.

ReviewSetTable
| extend SizeCategory = case(Size > 10485760, "Large (>10MB)", Size >= 5242880 and Size <= 10485760, "Medium-Large (5–10MB)", Size >= 1048576 and Size < 5242880, "Medium (1–5MB)", "Small (<1MB)")
| summarize count() by SizeCategory

요약

연산자는 summarize , sum(), 또는 avg()와 같은 count()함수를 적용하고 지정된 열을 기반으로 결과를 그룹화하여 데이터를 집계합니다.

다음 예제에서는 "Day"라는 단어가 포함된 항목에 대해 SubjectTitle 로 그룹화된 항목을 계산합니다.

ReviewSetTable
| where SubjectTitle has "Day"
| summarize count() by SubjectTitle

바차트 렌더링, columnchart 렌더링, 원형 차트 렌더링

연산자는 render barchart 쿼리의 테이블 형식 결과를 가져와 가로 막대형 차트로 표시합니다. 이렇게 하면 집계된 값의 분포 또는 비교를 더 쉽게 시각화할 수 있습니다.

다음 예제에서는 제목 개수를 가로 막대형 차트로 렌더링합니다.

ReviewSetTable
| where SubjectTitle has "Day"
| summarize count() by SubjectTitle
| render barchart

테이크(제한)

take 연산자는 쿼리 출력을 지정된 행 수로 제한합니다. 데이터 세트의 첫 번째 n 결과만 반환합니다. limit 연산자는 의 동의어 take 이며 서로 바꿔 사용할 수 있습니다.

다음 예제에서는 일치하는 처음 10개 항목만 반환하므로 전체 쿼리를 실행하기 전에 쿼리 논리 또는 스폿 검사 콘텐츠의 유효성을 검사할 수 있습니다. 이 방법은 결과가 출력을 제한하지 않고 take 컴퓨팅 및 로드하는 데 더 오래 걸릴 수 있는 대규모 검토 집합 또는 복잡한 필터를 처리할 때 도움이 됩니다.

ReviewSetTable
| where SubjectTitle has "day"
| project SubjectTitle, SenderDomain, Custodian, Size
| take 10

정렬

연산자는 sort 하나 이상의 지정된 열을 기준으로 오름차순 또는 내림차순으로 쿼리 결과를 정렬합니다.

다음 예제 쿼리는 를 사용하여 summarize count()검토 집합의 각 NativeFileExtension에 대한 총 항목 수를 계산합니다. 그런 다음, 가장 널리 퍼진 파일 형식을 확인할 수 있도록 해당 확장 그룹을 항목 수의 내림차순으로 정렬합니다.

ReviewSetTable
| summarize ItemCount = count() by NativeFileExtension
| sort by ItemCount desc

별개

연산자는 distinct 쿼리 결과에서 중복 행을 제거하여 지정된 열에 대한 고유 값을 반환합니다.

다음 예제에서는 을 사용하여 distinct 중복을 제거하여 고유한 보유자만 표시한 다음 를 사용하여 sort by Custodian asc 사전순으로 정렬하여 보고를 쉽게 검색하거나 내보낼 수 있도록 합니다.

ReviewSetTable
| distinct Custodian
| sort by Custodian asc

갯수

연산자는 count 쿼리 결과 집합의 총 행 수를 반환하므로 집합에 있는 항목 수를 빠르게 확인할 수 있습니다.

다음 예제에서는 "Day"라는 단어가 포함된 고유한 제목 수를 계산합니다.

ReviewSetTable
| where SubjectTitle has "Day"
| summarize by SubjectTitle
| count

맨 위

연산자는 top 하나 이상의 지정된 열 순서로 쿼리 결과에서 첫 번째 n 개의 행을 반환합니다. 정렬 조건에 따라 가장 높거나 가장 낮은 값을 가져오는 데 사용합니다.

다음 예제에서는 검토 집합에서 상위 5개의 가장 큰 항목을 가져옵니다.

ReviewSetTable
| top 5 by Size desc

함수는 bin() datetime 또는 numeric 값을 지정된 bin 크기의 가장 가까운 배수로 반올림합니다. 이 함수를 사용하여 시간 간격 또는 숫자 범위(예: 시간 버킷 또는 크기 범위)로 데이터를 그룹화합니다.

다음 예제에서는 를 사용하여 검토 집합의 항목을 1MB 의 크기 버킷으로 그룹화한 다음, 를 사용하여 bin(Size, 1048576)각 버킷 summarize count()에 속하는 항목 수를 계산한 다음, 파일 크기 분포를 가장 작은 것에서 가장 큰 항목으로 볼 수 있도록 버킷을 오름차순으로 정렬합니다.

ReviewSetTable
| summarize ItemCount = count() by bin(Size, 1048576)
| sort by bin(Size, 1048576) asc

일반적인 시나리오

다음 시나리오에서는 고급 검토 집합 탐색기(미리 보기)의 Kusto 쿼리가 검토 집합 데이터를 분석하고 더 잘 이해하는 데 어떻게 도움이 되는지 보여 줍니다.

시나리오 1: 두 사용자 간의 통신

John과 David와 같은 두 특정 사용자 간에만 교환된 항목을 다른 참가자와 함께 찾을 수 있습니다. 이 쿼리는 직접 일대일 통신을 격리하고 제목 제목, 보낸 사람 및 받는 사람의 세 가지 속성만 표시합니다.

ReviewSetTable
| where isnotempty(Participants)
| extend ParticipantEmails = extract_all(@"\<(\[^\>\]+)\>", tostring(Participants))
| extend ParticipantCount = array_length(ParticipantEmails)
| where ParticipantCount == 2
| where ParticipantEmails has "John@contoso.com" and ParticipantEmails has "David@contoso.com"
| project SubjectTitle, SenderAuthor, Recipients

시나리오 2: 외부에서 보낸 이메일

하나 이상의 외부 받는 사람(organization contoso.com 외부)이 포함된 모든 검토 집합 항목을 찾고 각 항목에 대한 외부 전자 메일 주소를 나열합니다.

ReviewSetTable
| where isnotempty(Recipients)
| extend Emails = extract_all(@"\<(\[^\>\]+)\>", tostring(Recipients))
| mv-expand Email = Emails
| extend Email = tostring(Email)
| where Email !contains "@contoso.com"
| summarize ExternalRecipients = make_set(Email) by ImmutableId, SubjectTitle

시나리오 3: 검토 집합에서 날짜 및 시간 패턴 식별

시간이 지남에 따라 데이터를 시각화하면 조사자가 알려진 인시던트와 관련이 있을 수 있는 이메일의 갑작스런 급증과 같은 통신 또는 문서 생성의 급증 또는 변칙을 식별할 수 있습니다. 분기별 보기는 비즈니스 주기와 일치하므로 재무 보고 기간, 내부 감사 또는 정책 변경과 결과를 보다 쉽게 상호 연결할 수 있습니다.

다음 예제에서는 연도 및 분기별로 항목을 그룹화하고 결과를 세로 차트로 시각화하여 검토 집합 항목이 시간에 따라 분산되는 방법을 분석합니다. 날짜 범위별로 항목을 필터링하고, 각 항목의 날짜 필드에서 연도 및 분기를 추출하고, 각 분기 조합의 항목을 계산하고, 읽을 수 있는 레이블(예: Q2 2024)을 만들고, 결과를 세로 막대형 차트로 렌더링합니다.

ReviewSetTable
| where Date > datetime(2015-01-01) and Date < datetime(2025-08-31)
| extend Year = datetime_part("year", Date), Quarter = datetime_part("quarter", Date)
| summarize EventCount = count() by Year, Quarter
| sort by Year asc, Quarter asc
| extend QuarterLabel = strcat("Q", tostring(Quarter), " ", tostring(Year))
| project QuarterLabel, EventCount
| render columnchart

시나리오 4: 검토 집합에서 Microsoft Teams 메시지 유형 시각화

다음 예제에서는 항목 클래스별로 설정된 검토에서 Microsoft Teams 메시지 유형을 분류하고 시각화하여 다양한 메시지 형식의 배포를 이해하는 데 도움이 됩니다.

ReviewSetTable
| where ItemClass startswith "IPM.SkypeTeams.Message."
| project SubjectTitle, Date, SenderAuthor, FileClass, ItemClass, InternetMessageId
| summarize ItemCount = count() by ItemClass
| sort by ItemCount desc
| render piechart

고급 검토 집합 탐색기에서 regex 사용(미리 보기)

고급 검토 집합 탐색기(미리 보기)는 텍스트 필드에서 강력한 패턴 일치를 위해 정규식(정규식) 을 지원합니다. Regex 지원을 사용하면 간단한 키워드(keyword) 일치를 넘어 영숫자 조합, 특수 문자 또는 구조화된 패턴과 같은 복잡한 문자 시퀀스를 검색할 수 있습니다. regex를 사용하여 다음을 수행합니다.

  • ID, 코드 또는 구조화된 토큰과 같은 특정 형식의 항목을 식별합니다.
  • 표준 연산자가 좋아 has 하거나 startswith 캡처할 수 없는 패턴을 검색합니다.
  • 규정 준수 또는 포렌식 조사를 위한 고급 필터링을 수행합니다.

KQL에서 정규식 작성 팁

  • 필요할 때 백슬라이쉬를 제대로(\\) 이스케이프합니다.
  • 정확한 위치를 지정하려면 앵커(^ 시작의 경우, $ 끝)를 사용합니다.
  • 지나치게 광범위한 일치를 방지하기 위해 패턴을 증분 방식으로 테스트합니다.
  • 정확한 쿼리를 위해 다른 연산자(예: and, or)와 결합합니다.
  • 참조: Regex 구문입니다.

구문

절에서 where 연산자를 matches regex 사용합니다.

where <PropertyName> matches regex "<pattern>"

예: 키워드의 복잡한 패턴 일치

ReviewSetTable
| where Keywords matches regex "\\w{10}\\d{10}\\W{10}"
| project SubjectTitle, CompoundPath, Date, SenderAuthor, FileClass, ItemClass, InternetMessageId
  • Keywords 속성에 다음이 포함된 항목을 필터링합니다.

    • 단어 10자(\w)
    • 뒤에 10자리(\d)
    • 뒤에 10자가 아닌 문자가 잇따릅니다(\W)
  • 검토를 위해 지정된 대로 키 메타데이터 필드를 반환합니다.

일반적인 KQL 구문 오류 수정

고급 검토 집합 탐색기(미리 보기)에서 쿼리를 만들 때 구문 오류가 발생할 수 있습니다.

다음 표에서는 일반적인 오류와 오류를 해결하는 방법을 나열합니다.

오류 원인 해결
sort 연산자에 열 이름이 필요합니다. 정렬할 항목은 지정하지 않고 를 사용 sort 하세요. 다음에 sort by열 이름을 추가합니다. 예를 들면 sort by Date desc와 같습니다.
예상 ) 또는 , 닫는 괄호 또는 잘못된 함수 인수가 없습니다. 여는 모든 괄호에 일치하는 닫는 괄호가 있고 함수 인수가 쉼표로 구분되어 있는지 확인합니다.
알 수 없는 함수 지원되지 않거나 철자가 잘못된 함수 이름을 사용합니다. KQL 설명서에 대해 함수 이름을 확인합니다. 일반적인 예로는 , 및 가 있습니다count()datetime(). tostring()
토큰 예상: \ | 쿼리 줄에 시작 시 파이프 연산자가 없습니다. 이후 ReviewSetTable 의 모든 줄이 로 \ | 시작하는지 확인합니다.
열을 찾을 수 없음 검토 집합 스키마에 없는 속성 이름을 참조합니다. 검토 집합에서 사용 가능한 열 이름을 확인합니다. 속성 이름은 대/소문자를 구분합니다.
summarize절 필요 by 집계와 함께 사용 summarize 하지만 그룹화 열은 없습니다. 하나 이상의 열이 있는 by 절을 추가합니다. 예를 들면 summarize count() by FileClass와 같습니다.
예기치 않은 쿼리 종료 쿼리가 불완전하거나 연산자가 없는 후행 파이프가 있습니다. 쿼리의 끝에 있는 \ | 후행을 제거하거나 원하는 연산자를 그 뒤에 추가합니다.

참고

검토 집합을 만들고 데이터를 생성할 때 해당 속성을 사용할 수 없는 경우 일부 이전 검토 집합은 특정 KQL 속성을 지원하지 않을 수 있습니다. 이전 검토 집합에서 지원되지 않는 속성을 쿼리하면 열을 찾을 수 없음 오류가 발생합니다. 이 오류를 resolve 새 검토 집합을 만들고 추가를 사용하여 집합을 검토하여 지원되는 최신 속성으로 데이터를 다시 생성합니다.