# PantherFlow (Beta)

## 개요

{% hint style="info" %}
PantherFlow는 Panther 버전 1.110부터 공개 베타로 제공되며, 모든 고객이 사용할 수 있습니다. 버그 신고와 기능 요청은 Panther 지원팀에 공유해 주세요.
{% endhint %}

PantherFlow는 Panther의 파이프라인형 쿼리 언어입니다. 이해하기 쉽도록 설계되었지만, 강력하고 표현력이 뛰어납니다.

PantherFlow를 사용해 Panther에서 데이터를 탐색하고 분석하세요. 그 [연산자](https://docs.panther.com/ko/pantherflow/operators) 및 [함수](https://docs.panther.com/ko/pantherflow/functions)를 사용하면 필터링, 변환, 집계와 같은 다양한 데이터 작업을 수행할 수 있으며, 여기에 더해 [결과를 시각화](https://docs.panther.com/ko/pantherflow/operators/visualize) 하여 막대 그래프나 선 그래프로 표시할 수 있습니다. PantherFlow는 스키마에 유연하므로, 하나의 쿼리에서 서로 다른 스키마를 가진 데이터 소스를 포함한 여러 데이터 소스를 매끄럽게 검색할 수 있습니다.

{% hint style="info" %}
자체 PantherFlow 쿼리를 작성하는 것 외에도, [자연어로 PantherFlow를 생성하는 데 AI를 사용할 수 있습니다](https://docs.panther.com/ko/search/search-tool) Search에서.
{% endhint %}

PantherFlow 쿼리는 파이프(`|`)를 사용해 순차적으로 처리되는 데이터 작업을 구분합니다. 즉, 쿼리의 첫 번째 연산자의 출력이 두 번째 연산자의 입력으로 전달되고, 이런 식으로 계속됩니다. 아래 예시 쿼리를 보세요:

```kusto
panther_logs.public.okta_systemlog
| where p_event_time > time.ago(1d)
| search 'doug'
| summarize agg.count() by eventType 
```

에서 PantherFlow 쿼리를 최적화하는 방법을 알아보세요 [PantherFlow 모범 사례](https://docs.panther.com/ko/pantherflow/best-practices).

### PantherFlow를 사용할 위치

PantherFlow를 사용해 Search에서 데이터를 쿼리하세요. [여기에서 Search에 PantherFlow를 입력하는 방법을 알아보세요](https://docs.panther.com/ko/search/search-tool#using-pantherflow-in-search)와, 또한 [여기에서 자연어로 PantherFlow를 생성하는 데 AI를 사용하는 방법을 알아보세요](https://docs.panther.com/ko/search/search-tool#ai-powered-pantherflow-query-generation).

쿼리 작성을 돕기 위해 Search의 PantherFlow 코드 편집기에는 자동 완성, 오류 밑줄, 호버 툴팁, 인레이 힌트, 함수 시그니처 지원이 있습니다.

## PantherFlow 쿼리가 작동하는 방식

"PantherFlow 쿼리"라는 용어는 일반적으로 [표 형식 표현식 문](https://docs.panther.com/ko/statements#tabular-expression-statements)을 의미하며, 이는 데이터 세트를 가져와 어떤 형태로든 반환합니다(대조적으로 [let 문](https://docs.panther.com/ko/statements#let-statements)). 표 형식 표현식 문에는 일반적으로 [연산자](https://docs.panther.com/ko/pantherflow/operators) 파이프(`|`)로 구분된 항목이 포함됩니다. 각 연산자는 데이터를 필터링하거나 변환하는 등의 작업을 수행한 다음 다음 연산자에게 전달합니다. PantherFlow 문은 순차적으로 읽히므로 연산자 순서가 중요합니다.

PantherFlow 구문 개요는 다음에서 확인하세요 [PantherFlow 빠른 참고서](https://docs.panther.com/ko/pantherflow/quick-reference)에서, 또는 구문 주제를 더 자세히 살펴보세요:

* [PantherFlow 문](https://docs.panther.com/ko/pantherflow/statements)
* [PantherFlow 연산자](https://docs.panther.com/ko/pantherflow/operators)
* [PantherFlow 데이터 유형](https://docs.panther.com/ko/pantherflow/data-types)
* [PantherFlow 표현식](https://docs.panther.com/ko/pantherflow/expressions)
* [PantherFlow Functions](https://docs.panther.com/ko/pantherflow/functions)

### 단계별 PantherFlow 쿼리 예제

다음 PantherFlow 쿼리를 살펴보겠습니다:

```kusto
panther_logs.public.aws_alb
| where p_event_time > time.ago(1d)
| sort p_event_time
| limit 10
```

간단히 말해, 이 쿼리는 다음에서 데이터를 읽고 `aws_alb` 테이블에서 지난 하루 이전에 발생한 이벤트를 필터링한 다음, 남은 이벤트를 시간순으로 정렬하고, 처음 10개 이벤트를 반환합니다.

각 줄을 더 자세히 살펴보겠습니다:

1. `panther_logs.public.aws_alb`
   * 이 문은 데이터 소스를 식별합니다.
   * 이 쿼리는 다음에서 데이터를 읽고 있습니다 `panther_logs.public.aws_alb` 테이블. 쿼리에 이 줄만 포함되어 있다면, 테이블의 모든 데이터가 반환됩니다.
2. `| where p_event_time > time.ago(1d)`
   * The [`where` PantherFlow를 사용해 Search에서 전체 텍스트 검색 수행](https://docs.panther.com/ko/pantherflow/operators/where) 은 [표현식](https://docs.panther.com/ko/pantherflow/expressions) 을 사용하여 데이터를 필터링합니다.
   * 이 쿼리는 다음 조건에 해당하는 데이터를 요청합니다 `p_event_time` 필드 값이 하루 전 시각보다 큽니다. 다시 말해, 지난 하루 동안 발생한 이벤트를 요청하고 있습니다. 다음 `time.ago()` 함수는 현재 시간에서 빼며, 인수(`1d`)는 하루를 나타내는 타임스탬프 상수입니다.
3. `| sort p_event_time`
   * The [`정렬` PantherFlow를 사용해 Search에서 전체 텍스트 검색 수행](https://docs.panther.com/ko/pantherflow/operators/sort) 를 사용하면 하나 이상의 필드 값으로 이벤트를 정렬할 수 있습니다.
   * 이 쿼리는 데이터를 다음 기준으로 정렬합니다 `p_event_time`. 왜냐하면 [기본 정렬 순서](https://docs.panther.com/ko/pantherflow/operators/sort) 가 내림차순이기 때문에 가장 최근 이벤트가 먼저 반환됩니다.
4. `| limit 10`
   * The [`제한` PantherFlow를 사용해 Search에서 전체 텍스트 검색 수행](https://docs.panther.com/ko/pantherflow/operators/limit) 는 반환할 이벤트의 최대 개수를 정의합니다.
   * 이 쿼리는 최대 10개의 이벤트만 요청합니다.

추가 쿼리 예제를 보세요:

* [PantherFlow 예제 쿼리](https://docs.panther.com/ko/pantherflow/example-queries)
* [예약 검색 예제](https://docs.panther.com/ko/search/scheduled-searches/examples)

## PantherFlow의 제한 사항

* 비록 [저장된 검색을 만들 수는 있지만](https://docs.panther.com/ko/search/search-tool#creating-a-saved-search) Panther Console에서 PantherFlow를 사용해 만드는 것은 다음이 불가능합니다:
  * 저장된 검색을 예약하기(즉, 다음을 생성하기) [Scheduled Search](https://docs.panther.com/ko/search/scheduled-searches))
  * 개발자 워크플로우에서 PantherFlow를 사용해 저장된 검색을 만들기(즉, 다음을 업로드하여) `saved_query` 를 통해 또는 다음을 사용하여 [Panther Analysis Tool](https://docs.panther.com/ko/panther/detections-repo/pat/pat-commands) 또는 다음을 사용하여 [REST](https://docs.panther.com/ko/panther/api/rest/queries) 또는 [GraphQL](https://docs.panther.com/ko/panther/api/graphql/data-lake-queries) API)
* 집계(즉, [`요약` PantherFlow를 사용해 Search에서 전체 텍스트 검색 수행](https://docs.panther.com/ko/pantherflow/operators/summarize)은 다음에 대한 정보를 표시하지 않습니다 [Search 결과 히스토그램](https://docs.panther.com/ko/search/search-tool#search-results-histogram).
* Search에서 [**사용 가능한 필드** 목록은](https://docs.panther.com/ko/search/search-tool#adding-removing-and-reordering-fields-in-the-results-table) 같은 연산자를 사용할 때 추가되거나 제거되는 필드를 반영하지 않습니다 [`프로젝트`](https://docs.panther.com/ko/pantherflow/operators/project), [`extend`](https://docs.panther.com/ko/pantherflow/operators/extend), 그리고 [`요약`](https://docs.panther.com/ko/pantherflow/operators/summarize).
* 경우에 따라 PantherFlow 쿼리는 동일한 SQL 쿼리보다 더 느리게 실행될 수 있습니다.
* The [`시각화` 연산자에는 고유한 제한 사항이 있습니다](https://docs.panther.com/ko/operators/visualize#limitations).
