> For the complete documentation index, see [llms.txt](https://docs.panther.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.panther.com/ko/data-onboarding/custom-log-types.md).

# 사용자 정의 로그

## 개요

Panther를 사용하면 자신만의 사용자 정의 로그 스키마를 정의할 수 있습니다. 사용자 정의 로그는 다음을 통해 Panther로 수집할 수 있습니다. [데이터 전송](/ko/data-onboarding/data-transports.md), 그러면 사용자 정의 스키마가 데이터를 정규화하고 분류합니다.

이 페이지에서는 필요한 사용자 정의 스키마 수를 결정하고, 사용자 정의 스키마를 추론·작성·관리하는 방법과, 다음을 사용하여 스키마를 업로드하는 방법을 설명합니다. [Panther Analysis Tool (PAT)](/ko/panther/detections-repo/pat.md). 다음을 사용하는 방법은 `pantherlog` 사용자 정의 스키마를 다루려면 다음을 참조하세요: [`pantherlog` CLI 도구](/ko/panther/pantherlog.md).

사용자 정의 스키마는 다음 접두사로 식별됩니다. `Custom.` 가 이름에 붙으며, 기본 지원 로그 유형을 사용할 수 있는 곳이라면 어디에서나 사용할 수 있습니다:

* 로그 수집
  * 사용자 정의 로그는 다음을 통해 온보딩할 수 있습니다. [데이터 전송](/ko/data-onboarding/data-transports.md) (예: HTTP 웹훅, S3, SQS, Google Cloud Storage, Azure Blob Storage)
* 디택션
  * 다음을 작성할 수 있습니다. [룰 및 예약된 룰](/ko/detections/rules.md) 사용자 정의 스키마용으로.
* 조사
  * 다음의 데이터를 쿼리할 수 있습니다. [검색](/ko/search/search-tool.md) 및 [Data Explorer](/ko/search/data-explorer.md). Panther는 이를 사용하는 소스를 온보딩하면 해당 사용자 정의 스키마에 대한 새 테이블을 생성합니다.

## 필요한 사용자 정의 스키마 수 결정

사용자 정의 소스에서 들어오는 데이터를 표현하기 위해 몇 개의 스키마가 필요한지 결정하는 명확한 룰은 없습니다. 이는 다양한 로그 이벤트의 목적과 그들 간 필드 중복 정도에 따라 달라집니다.

일반적으로는 각 로그 유형의 형태를 자체 스키마로 표현할 수 있을 만큼 필요한 최소 수의 스키마를 만드는 것이 권장됩니다(서로 다른 로그 유형 간 일부 필드 차이는 같은 스키마로 표현할 수 있도록 여지를 둠). 경험상 룰은 다음과 같습니다: 두 가지 서로 다른 로그 유형(예: 애플리케이션 감사 로그와 보안 경보)이 필수 필드에서 50% 미만으로 겹친다면 서로 다른 스키마를 사용해야 합니다.

아래 표에서 예시 시나리오와 그에 따른 스키마 권장 사항을 확인하세요:

<table data-full-width="false"><thead><tr><th width="343">시나리오</th><th>스키마 권장 사항</th></tr></thead><tbody><tr><td>다음 필드를 가진 한 종류의 로그가 있고 <code>A</code>, <code>B</code>, 그리고 <code>C</code>, 그리고 다음 필드를 가진 다른 종류의 로그가 있습니다. <code>X</code>, <code>Y</code>, 그리고 <code>Z</code>.</td><td><p>로그 유형별로 각각 하나씩, 서로 다른 두 개의 스키마를 만드세요.</p><p>기술적으로는 모든 필드를 포함한 하나의 스키마를 만들 수도 있습니다(<code>A</code>, <code>B</code>, <code>C</code>, <code>X</code>, <code>Y</code>, <code>Z</code>)를 선택사항으로 표시할 수 있지만(즉, <code>required: false</code>), 그렇게 하면 디택션 작성 및 검색 같은 후속 작업이 더 어려워지므로 권장하지 않습니다.</p></td></tr><tr><td>항상 다음 필드를 가지는 한 종류의 로그가 있고 <code>A</code>, <code>B</code>, 그리고 <code>C</code>, 그리고 항상 다음 필드를 가지는 다른 종류의 로그가 있으며 <code>A</code>, <code>B</code>, 그리고 <code>Z</code>.</td><td>하나의 스키마를 만들고, 다음 필드는 <code>A</code> 그리고 <code>B</code> 필수로 표시하고 다음 필드는 <code>C</code> 그리고 <code>Z</code> 선택사항으로 표시하세요.</td></tr></tbody></table>

필요한 스키마 수를 결정한 후에는 이를 정의할 수 있습니다.

{% hint style="info" %}
하나 이상의 스키마가 필요하다고 판단했고 Panther의 [스키마 추론 도구](#automatically-infer-the-schema-in-panther) 를 사용해 생성하려면 다음 중 하나를 수행하는 것이 권장됩니다:

* 다음을 사용하세요. [샘플 로그에서 사용자 정의 스키마 추론](#inferring-a-custom-schema-from-sample-logs) 방법을 서로 다른 로그 유형의 샘플로 여러 번 실행하기
* 서로 다른 구조의 데이터를 S3 버킷의 별도 폴더로 보내고, 그런 다음 [기존 S3 데이터에서 사용자 정의 스키마 추론](#inferring-custom-schemas-from-historical-s3-data) 추론 방법

다음 중 하나를 사용하면 [Panther에서 수신한 S3 데이터에서 사용자 정의 스키마 추론](#inferring-a-custom-schema-from-s3-data-received-in-panther) 또는 [Panther에서 수신한 HTTP 데이터에서 사용자 정의 스키마 추론](#inferring-a-custom-schema-from-http-data-received-in-panther) 방법을 사용하면 Panther가 해당 소스로 전송된 모든 로그 유형을 나타내는 단일 스키마를 생성할 위험이 있습니다.
{% endhint %}

## 사용자 정의 스키마 정의 방법

{% hint style="info" %}
사용자 정의 로그 유형의 경우 Panther는 JSON, XML 또는 CSV(헤더 포함 또는 미포함) 형식으로 전송된 데이터 수집을 지원합니다.  [스키마 추론](#automatically-infer-the-schema-in-panther), Panther는 헤더 없는 CSV를 지원하지 않습니다.
{% endhint %}

사용자 정의 스키마를 정의하는 방법은 여러 가지가 있습니다. 다음을 할 수 있습니다:

* 데이터에서 하나 이상의 스키마를 추론합니다: 다음을 참조하세요 [Panther에서 스키마를 자동으로 추론](#automatically-infer-the-schema-in-panther).
* 스키마를 수동으로 만듭니다: 다음을 참조하세요 [직접 스키마 만들기](#create-the-schema-yourself).

## Panther에서 스키마를 자동으로 추론

스키마를 수동으로 작성하는 대신 Panther Console이나 `pantherlog` CLI 도구가 데이터에서 스키마(또는 여러 스키마)를 추론하도록 할 수 있습니다.

Panther가 스키마를 추론할 때, 데이터 샘플에 다음이 있으면 유의하세요:

* 유형이 다음인 필드 `object` 에 필드가 200개를 초과하면 해당 필드는 다음 유형으로 분류됩니다 `JSON`.
* 혼합 데이터 유형을 가진 필드(즉, 여러 데이터 유형이 섞인 배열이거나 필드 자체가 다양한 데이터 유형을 가진 경우)는 해당 필드가 다음 유형으로 분류됩니다 `JSON`.

### 스키마를 추론하는 방법

Panther에서 스키마를 추론하는 방법은 여러 가지가 있습니다:

* Panther Console에서:
  * 업로드한 샘플 데이터에서 스키마를 추론하려면 아래의 [샘플 로그에서 사용자 정의 스키마 추론](#inferring-a-custom-schema-from-sample-logs) 탭을 참조하세요.
  * Panther에서 수신한 S3 데이터에서 스키마를 추론하려면 다음을 참조하세요 [Panther에서 수신한 S3 데이터에서 사용자 정의 스키마 추론](#inferring-a-custom-schema-from-s3-data-received-in-panther) 탭을 참조하세요.
  * 기존 S3 데이터에서 하나 이상의 스키마를 추론하려면 다음을 참조하세요 [기존 S3 데이터에서 사용자 정의 스키마 추론](#inferring-custom-schemas-from-historical-s3-data) 탭을 참조하세요.
  * Panther에서 수신한 HTTP 데이터에서 스키마를 추론하려면 다음을 참조하세요 [Panther에서 수신한 HTTP 데이터에서 사용자 정의 스키마 추론](#inferring-a-custom-schema-from-http-data-received-in-panther) 탭을 참조하세요.
* CLI 워크플로에서는:
  * 다음을 사용하세요. [`pantherlog infer`](/ko/panther/pantherlog.md#infer-generate-a-schema-from-json-log-samples) 명령을 사용합니다.

{% tabs %}
{% tab title="샘플 로그" %}
**샘플 로그에서 사용자 정의 스키마 추론**

샘플 로그를 Panther Console에 업로드하여 스키마를 생성할 수 있습니다. 대신 명령줄을 사용하고 싶다면 다음을 따르세요 [여기에서 pantherlog CLI 도구 사용 지침](/ko/panther/pantherlog.md#infer-generate-a-schema-from-json-log-samples).

시작하려면 다음 단계를 따르세요:

1. Panther Console에 로그인하세요.
2. 왼쪽 탐색 막대에서 다음을 클릭하세요 **Configure > Schemas.**
3. 페이지 오른쪽 상단의 검색창 옆에서 다음을 클릭하세요 **새로 만들기**.
4. 다음을 입력하세요 **스키마 ID**, **설명**, 그리고 **참조 URL**.
   * Description은 테이블에 대한 내용을 위한 것이며, Reference URL은 내부 리소스로 연결하는 데 사용할 수 있습니다.
5. 선택적으로 다음을 활성화하세요 **필드 탐색** 토글을 클릭하여 `켬`. 자세한 내용은 다음에서 확인하세요 [필드 탐색](/ko/data-onboarding/field-discovery.md).
6. 다음의 **스키마** 섹션의 **샘플 이벤트에서 스키마 추론** 타일에서 다음을 클릭합니다: **시작**.
7. 다음의 **샘플 로그에서 스키마 추론** 모달에서 다음 라디오 버튼 중 하나를 클릭하세요:
   * **샘플 파일 업로드**: 샘플 로그 집합 업로드: 시스템에서 파일을 팝업 모달로 끌어다 놓거나 다음을 클릭하세요 **파일 선택** 하고 로그 파일을 선택하세요.
     * Panther는 다음 경우가 아니면 스키마 추론을 위해 헤더 없는 CSV를 지원하지 않습니다 [Panther AI](/ko/ai.md) 가 활성화되어 있습니다.
   * **샘플 이벤트 붙여넣기**: 편집기에 샘플 이벤트를 직접 붙여넣거나 입력하세요.\
     ![In the Panther Console, there is a screen labeled "Infer Schema from Sample Logs." At the bottom of the screen shot, there is a section to Drag and drop a file or select a file to upload.](/files/f5ab509fbc3bb418a521c6c8fb160e0db568ad36)
8. 파일을 업로드하면 Panther가 UI에 원시 로그를 표시합니다. 로그 줄을 확장하여 전체 원시 로그를 볼 수 있습니다. 다른 샘플 집합을 추가하면 이전에 업로드한 샘플이 덮어써진다는 점에 유의하세요.
9. 적절한 다음을 선택하세요 **스트림 유형** ([각 유형의 예시는 여기에서 확인하세요](/ko/data-onboarding/custom-log-types/reference.md#stream-type)).
   * **자동:** Panther가 적절한 스트림 유형을 자동으로 디택션합니다.
   * **줄:** 이벤트는 줄바꿈 문자로 구분됩니다.
   * **JSON:** 이벤트는 JSON 형식입니다.
   * **JSON 배열:** 이벤트는 JSON 객체 배열 안에 있습니다.
   * **CloudWatch Logs:** 이벤트는 CloudWatch Logs에서 왔습니다.
   * **XML:** 이벤트는 다음 형식입니다 [XML 형식](/ko/data-onboarding/custom-log-types/reference.md#xml-stream-type).
10. JSON 로그를 업로드했다면 다음을 클릭하세요 **스키마 추론**. (JSON이 아닌 로그를 업로드했고 [Panther AI가 활성화되어 있다면](/ko/ai.md#enabling-panther-ai), 다음을 클릭하세요 **Panther AI로 스키마 추론**, 그런 다음 **확인**).
    * Panther가 원시 샘플 로그에서 스키마 추론을 시작합니다.
    * Panther는 여러 타임스탬프 형식을 추론하려고 시도합니다.
    * 스키마가 생성되면 스키마 편집기 상자에 표시됩니다.\
      ![](/files/b6c2a98baec889e49c49475125fe48683d9e5109)
11. 업로드한 샘플 로그와 스키마에 가한 변경 사항에 대해 스키마가 제대로 작동하는지 확인하려면 다음을 클릭하세요 **테스트 실행**.
    * 이 테스트는 스키마의 구문이 올바른지와 Panther에 업로드한 로그 샘플이 스키마와 성공적으로 일치하는지를 검증합니다.
    * 테스트 결과를 보려면 다음을 클릭하세요 **이벤트 보기**.\
      ![On the left is a "Test" button. To its right is the text "Schema test against 1 total raw events completed," then a "View Events" button.](/files/5ed1da3a962cd2b8cba92d97cceda113b4ca5d32)
      * 성공적으로 일치한 모든 로그는 다음 아래에 표시됩니다 **일치함**; 각 로그에는 열, 필드, JSON 보기가 표시됩니다.
      * 일치하지 않은 모든 로그는 다음 아래에 표시됩니다 **불일치**; 각 로그에는 오류 메시지와 원시 로그가 표시됩니다.
12. 다음을 클릭합니다: **저장** 를 눌러 스키마를 게시하세요.

{% hint style="info" %}
Panther는 업로드된 모든 로그를 바탕으로 추론하지만, 스키마 생성 시 빠른 응답 시간을 보장하기 위해 최대 100개의 로그만 표시합니다.
{% endhint %}
{% endtab %}

{% tab title="Panther에서 수신한 S3 데이터" %}
**Panther에서 수신한 S3 데이터에서 사용자 정의 스키마 추론**

S3 버킷에서 Panther로 스트리밍되는 라이브 데이터를 바탕으로 사용자 정의 로그 소스의 스키마를 생성하고 게시할 수 있습니다. 먼저 [S3 데이터를 확인하고](#view-raw-s3-data) Panther에서, 그런 다음 [스키마를 추론한 다음](#infer-a-schema-from-raw-data), 그런 다음 [스키마를 테스트합니다](#test-the-schema-with-raw-data).

**원시 S3 데이터 보기**

S3 버킷을 Panther에 온보딩한 후에는 Panther로 들어오는 원시 데이터를 확인하고 이를 바탕으로 스키마를 추론할 수 있습니다:

1. 다음 지침에 따라 [S3 버킷을 Panther에 온보딩하고](/ko/data-onboarding/data-transports/aws/s3.md) 스키마를 먼저 만들지 않은 상태로 진행하세요.
2. 로그 소스의 **개요** 탭을 보고 있을 때 아래로 스크롤하여 **데이터 분류를 시작하려면 스키마를 연결하세요** 섹션.\
   ![The source overview page reads, "Attach a schema to start classifying data". Below, there are two options, each with their own Start button: "I want to add an existing schema" and "I want to generate a schema from raw events"](/files/2292a7b703e9cd8b8fe4e82afaf8ccb19761e9e1)
3. 다음 옵션 중에서 선택하세요:
   * **기존 스키마를 추가하고 싶습니다:** 이미 스키마를 만들었고 Panther가 로그를 읽어올 S3 접두사를 알고 있다면 이 옵션을 선택하세요. 다음을 클릭하세요 **시작** 타일에서
     * 다음이 표시됩니다 **S3 접두사 및 스키마** 팝업 모달:\
       ![On the S3 Prefixes & Filters screen, there is an area where you can enter a S3 prefix. There are additional buttons to "Add Exclusion Filters" and "Add schemas"](/files/622fb3bb16c89cc47daf1a4e5ad89fbdfd50a438)
   * **원시 이벤트에서 스키마를 생성하고 싶습니다:** 이 버킷의 라이브 데이터에서 스키마를 생성하고 Panther가 로그를 읽어올 접두사를 정의하려면 이 옵션을 선택하세요. 다음을 클릭하세요 **시작** 타일에서
     * 데이터가 Panther로 스트리밍되기까지 최대 15분을 기다려야 할 수 있습니다.
     * 이동한 페이지에서 화면 하단에 Panther가 수신한 원시 데이터를 볼 수 있습니다:\
       ![The schema inference page is shown, with a Raw Events tile containing a number of raw JSON events in a table. In the leftmost column, each row has a "View JSON" button. The second column contains the raw events.](/files/6cfc8ce2fe383a2766681ddf4cc8bd027f1eef5c)
       * 이 데이터는 다음에서 표시됩니다 `data-archiver`, 모든 S3 로그 소스에 대해 원시 로그를 최대 15일 동안 보관하는 Panther 관리 S3 버킷입니다.
       * S3 버킷에 저장된 원시 로그 이벤트만 *이후* Panther에서 소스를 구성한 뒤의 것만 표시되며, 더 이전 시점을 보도록 시간 범위를 설정했더라도 마찬가지입니다.
       * 원시 이벤트가 JSON 형식이라면 다음을 클릭하여 JSON으로 볼 수 있습니다 **JSON 보기** 왼쪽 열에서

**원시 데이터에서 스키마 추론**

다음을 선택했다면 **원시 이벤트에서 스키마를 생성하고 싶습니다** 라는 이전 섹션에서 이제 스키마를 추론할 수 있습니다.

1. 다음에 데이터가 채워지면 **Raw Events,** 다음 상단의 문자열 검색, S3 Prefix, Excluded Prefix 및/또는 Time Period 필터를 사용하여 스키마를 추론할 이벤트를 필터링할 수 있습니다 **Raw Events** 섹션.
2. 다음을 클릭합니다: **스키마 추론** 스키마를 생성합니다.\
   ![The image shows a section in the Panther Console labeled "Raw Events." On the right, there is a blue button labeled "Infer Schema." At the top of Raw Events, there is a Search bar, fields for S3 Prefix and Excluded Prefix, and a dropdown menu labeled Time Period.](/files/c5eb47c8344e4232cc1e7fbb7b946b6fb9f9ebbc)
3. 다음에서 **새 스키마 추론** 팝업되는 모달에 다음을 입력하세요:
   * **새 스키마 이름:** 스키마가 게시되면 데이터 레이크의 테이블에 매핑될 스키마 이름입니다.
     * 이름은 항상 다음으로 시작합니다 `Custom.` 그리고 그 뒤에는 대문자가 와야 합니다.
   * **S3 접두사:** 스키마를 추론하기 전에 설정한 기존 접두사나 새 접두사를 사용하세요.
     * 선택한 접두사는 S3 버킷의 해당 접두사에 있는 데이터를 추론한 스키마에 맞게 필터링합니다.
     * 특정 접두사를 지정할 필요가 없다면 이 필드를 비워 두어 다음과 같이 불리는 전체 포함 접두사를 사용할 수 있습니다 `*`.\
       ![The image shows a section in the Panther Console labeled "Infer New Schema." At the top, there is a header labeled "Fill in new Schema name" and a field labeled "New Schema Name." Below that, there is a header labeled "Select S3 prefix" and fields labeled "S3 Prefix". At the bottom, there is a blue button labeled "Infer Schema."](/files/d69d82735385605e2a682a0522fbdb536cae9474)
4. 다음을 클릭합니다: **스키마 추론**.
   * 페이지 상단에서 다음을 볼 수 있습니다 **'<'schema name'>'이 성공적으로 추론되었습니다**.
     * 다음을 클릭합니다: **완료**.\
       ![The source page says the schema was successfully inferred. There is a Done button.](/files/8714692101a9f5f8e46d28facb876d518a18e310)
   * 그런 다음 스키마는 다음 상태로 놓입니다 **초안** 테스트 후 프로덕션에 게시할 준비가 될 때까지 모드로 유지됩니다.
5. 이름을 클릭하여 스키마와 해당 필드를 검토하세요.\
   ![In the Schemas section, the schema called Custom.CaraS3Countries is shown, with a "Draft" label. Below it is a section to Test Schemas, with a Run Test button.](/files/7d8e1881cc0a4f093f0d1d6af3b84fdc30acd978)
   * 스키마가 다음 상태이므로 **초안**필요에 따라 필드를 변경, 삭제 또는 추가할 수 있습니다.\
     ![The image shows an example schema from the Panther Console. There is a field labeled "SchemaID" and it contains the text "Custom.CaraS3Countries." The Reference URL field and Description field are not filled in. The schema is in a code block labeled "Event Schema." At the bottom, there is a blue button labeled "Validate Schema."](/files/fcbb7e1c35b569a8bfb925e35c1b947521806315)

**원시 데이터로 스키마 테스트**

스키마와 접두사가 정의되면 원시 데이터에 대해 스키마 구성을 테스트할 수 있습니다.

1. 다음의 **스키마 테스트** 화면 상단의 섹션에서 다음을 클릭하세요 **테스트 실행**.\
   ![The image shows a section in the Panther Console labeled "Test Schemas." On the right, there is a blue button labeled "Run Test."](/files/614cef5c7a8b4e4dda6eae07febf909be9e04244)
2. 다음에서 **스키마 테스트** 팝업되는 모달에서 다음을 선택하세요 **시간 기간** 스키마를 테스트하고 싶은 대상을 선택한 다음 다음을 클릭하세요 **테스트 시작**.\
   ![The image shows a section in the Panther Console labeled "Test Schemas." The center of the image contains the text "Test how your schemas perform during a selected time period." At the bottom, there is a drop-down menu labeled "Time Period" with the option "Last 14 days" selected. To the right of that, there is a blue button labeled "Start Test."](/files/183847d6d959e3bce43ce7d9df9295a0b040bd3d)
   * 시간 범위와 데이터 양에 따라 테스트가 완료되는 데 몇 분 걸릴 수 있습니다.\
     ![A section from the Panther Console labeled "Test finished - Elapsed Time 00min 00sec." The page shows Test Started Date, Events Date Start, Events Date End, Stream Type, Schemas Tested, Data Scanned, Matched Events, and Unmatched events.](/files/c2467fd28318dd1cb40b5127077351688be18e11)
   * 테스트가 시작되면 일치한 이벤트 수와 일치하지 않은 이벤트 수가 결과로 표시됩니다.
     * **일치한 이벤트** 는 스키마 구성에 대해 성공적으로 분류될 이벤트 수를 나타냅니다.
     * **불일치한 이벤트** 는 스키마에 대해 분류되지 않을 이벤트 수를 나타냅니다.
3. 만약 다음이 있다면 **불일치한 이벤트**, 오류와 JSON을 검토하여 실패 원인을 파악하세요.\
   ![The "Test Finished" screen in the Panther Console shows a list of specific errors and raw data.](/files/b4a2c3a26cbbcd7bc797329ab6c83227e739518a)
   * 다음을 클릭합니다: **스키마로 돌아가기**, 필요에 따라 변경한 뒤 스키마를 다시 테스트하세요.
4. 다음을 클릭합니다: **스키마로 돌아가기**.
5. 오른쪽 상단 모서리에서 다음을 클릭하세요 **저장**.\
   ![On the source page, the schema name is shown. In the upper right corner is a Save button, which is circled.](/files/0aa24466d31c486d3c673cdd7acbdb044b0fb30b)
   * 이제 추론된 스키마가 로그 소스에 연결되었습니다.
     {% endtab %}

{% tab title="기존 S3 데이터" %}
**기존 S3 데이터에서 사용자 정의 스키마 추론**

S3 버킷의 기존 데이터(즉, 버킷에 추가된 데이터 *이전에* Panther에서 로그 소스로 온보딩되기 전의 데이터)로부터 사용자 정의 S3 로그 소스에 대한 하나 또는 여러 개의 스키마를 추론하고 저장할 수 있습니다.

**사전 조건: S3 버킷을 Panther에 온보딩**

* 다음 지침에 따라 [S3 버킷을 Panther에 온보딩하고](/ko/data-onboarding/data-transports/aws/s3.md) 스키마를 먼저 만들지 않은 상태로 진행하세요.
  * S3 소스를 온보딩했다면 [사용자 정의 IAM 역할로](/ko/data-onboarding/data-transports/aws/s3.md#i-want-to-set-everything-up-on-my-own), 해당 역할에는 다음 권한이 있어야 합니다 `ListBucket` 권한.

**1단계: Panther에서 S3 버킷 구조 보기**

Panther에서 S3 버킷 소스를 만든 후 Panther Console에서 S3 버킷의 구조와 데이터를 볼 수 있습니다:

1. Panther 콘솔의 왼쪽 탐색 표시줄에서 다음을 클릭합니다: **구성 > 로그 소스**.
2. S3 로그 소스를 클릭하세요.
3. 로그 소스의 **개요** 탭을 보고 있을 때 아래로 스크롤하여 **데이터 분류를 시작하려면 스키마를 연결하세요** 섹션.
4. 오른쪽에 있는 **버킷 데이터에서 스키마를 생성하고 싶습니다** 타일에서 다음을 클릭합니다: **시작**.

   ![Panther의 로그 소스 Overview 탭에는 "버킷 데이터에서 스키마를 생성하고 싶습니다"라는 타일 옆에 "Start" 버튼이 있습니다.](/files/40a251eba21411dbc0f650a9e645a3b42530cb07)

   * S3 버킷의 폴더 검사 화면으로 이동합니다. 여기에서 S3 버킷의 모든 폴더와 객체를 보고 탐색할 수 있습니다.

     <figure><img src="/files/917e86c4c3eaf26a5ddf6d91975b2dd6142cb7e4" alt="The folder inspection view in the Panther Console" width="563"><figcaption></figcaption></figure>
   * 대신 다음 이후의 성공 페이지에서 S3 버킷의 폴더 검사 화면에 접근할 수 있습니다 [S3 소스를 온보딩한 후](/ko/data-onboarding/data-transports/aws/s3.md) Panther에서. 해당 페이지에서 다음을 클릭하세요 **스키마 연결 또는 추론**.\
     ![On the success screen after onboarding an S3 source in Panther, there is a button labeled "Attach or infer schemas."](/files/e90fecb77d6ffa39b1aadc5e8efabe7bc6fa7b5a)

**2단계: 데이터를 탐색**

* 폴더 검사 화면을 보는 중 객체를 클릭하세요.
  * 슬라이드아웃 패널이 나타나 해당 이벤트의 미리 보기를 표시합니다:

<figure><img src="/files/9300800d69342c94d974404c4f1a237858395693" alt="In Panther, an S3 object is highlighted. A pop-over window is displaying a preview of its events." width="563"><figcaption></figcaption></figure>

이벤트가 올바르게 렌더링되지 않으면(오류가 발생하거나 이벤트가 잘못 표시되는 경우), S3 버킷 소스에 잘못된 스트림 유형이 선택되었을 수 있습니다. 이 경우 다음을 클릭하세요 **선택된 로그 형식은 n입니다**:

<figure><img src="/files/85cfa06c41e0ac3b8f0bdee17f4a3736d066e443" alt="On the source&#x27;s folder selection view in the Panther Console, the option to select a stream type appears at the top." width="563"><figcaption></figcaption></figure>

**3단계: 각 폴더에 기존 스키마가 있는지, 아니면 새 스키마를 추론해야 하는지 지정**

버킷에 포함된 항목을 검토한 후 버킷의 모든 데이터를 표현하는 데 하나의 스키마가 필요한지, 여러 개의 스키마가 필요한지 결정할 수 있습니다. 그런 다음 서로 다른 구조의 데이터를 포함한 폴더를 선택하여 새 스키마를 추론하거나 기존 스키마를 할당할 수 있습니다.

1. S3 버킷의 데이터에서 하나 이상의 스키마를 추론해야 하는지 판단하세요.
   * S3 버킷의 모든 데이터가 동일한 구조라면(따라서 하나의 스키마로 표현할 수 있다면) 기본값을 그대로 둘 수 있습니다 **새 스키마 추론** 가 버킷 수준에서 선택된 상태로 유지하세요. 이렇게 하면 버킷의 모든 데이터에 대한 단일 스키마가 생성됩니다.

     <figure><img src="/files/1380a77c3aa53bd5ee68e7fb9d6b7b0fbf954d9c" alt="The &#x22;Infer 1 schema&#x22; button is in the upper right corner of the S3 folders page in the Panther Console." width="563"><figcaption></figcaption></figure>
   * S3 버킷에 여러 스키마로 분류해야 하는 데이터가 포함되어 있다면 버킷의 각 폴더에 대해 아래 단계를 따르세요:
     1. 폴더를 선택하고 다음을 클릭하세요 **포함**.
        * 반대로, 처리하지 않으려는 폴더나 하위 폴더가 있다면 *이 아니라* 선택한 뒤 다음을 클릭하세요 **제외**.\
          ![](/files/830c13bf92e44195ab516e7b84865f1478a80d7c)
     2. 데이터와 일치하는 기존 스키마가 있다면 다음 드롭다운을 클릭하세요 **스키마** 행 오른쪽의 드롭다운에서 스키마를 선택하세요:\
        ![The schema dropdown is expanded next to the data object.](/files/ab920021bc4d7832e4f9f74c7536be0e0c8d3eee)
        * 기본적으로 새로 포함된 각 폴더에는 다음이 **새 스키마 추론** 선택되어 있습니다.
2. 다음을 클릭합니다: **추론 `n` 스키마**.\
   ![](/files/4c4ae01adfb05e0a61949009e621eaee013bc10b)

**4단계: 스키마 추론 대기**

스키마 추론 과정은 최대 15분이 걸릴 수 있습니다. 과정이 완료되는 동안 이 페이지를 떠나도 됩니다. 또한 이 과정을 일찍 중지하고, 실행되는 동안 추론된 스키마를 유지할 수도 있습니다.

<figure><img src="/files/9a94770c4ef0a9af6e1732c720257be7c5525f68" alt="The source page in Panther shows the schema inference details, including an infer skipped and the number of events processed." width="563"><figcaption></figcaption></figure>

**5단계: 결과 검토**

추론 과정이 완료되면 생성된 스키마와 각 스키마 추론에 사용된 이벤트 수를 볼 수 있습니다. 또한 각 스키마가 원시 이벤트를 어떻게 파싱하는지 검증할 수 있습니다.

1. 각 행 오른쪽의 재생 아이콘을 클릭하세요.

   <figure><img src="/files/7c2c653390113d2462c9056dcdd39a9f35691af7" alt="" width="563"><figcaption></figcaption></figure>
2. 다음을 클릭합니다: **이벤트** 탭에서 원시 이벤트와 정규화된 이벤트를 확인하세요.

   <figure><img src="/files/4c07169f34153c729471bdfc88ce2189edf50f5c" alt="" width="563"><figcaption></figcaption></figure>
3. 다음을 클릭합니다: **스키마** 탭에서 생성된 스키마를 확인하세요.

   <figure><img src="/files/965d941114e72496c9a88fb731373ee962c2e459" alt="" width="563"><figcaption></figcaption></figure>

**6단계: 스키마 이름 지정 및 소스 저장**

소스를 저장하기 전에 다음을 클릭하여 새로 추론된 각 스키마에 고유한 이름을 지정하세요 **이름 추가**.

<div align="center"><figure><img src="/files/808d55437f5312635f1f2f36dac52ce2e55a9109" alt="" width="563"><figcaption></figcaption></figure></div>

모든 새 스키마에 이름을 지정한 후 다음을 클릭할 수 있습니다 **소스 저장** 오른쪽 상단 모서리에서.
{% endtab %}

{% tab title="Panther에서 수신한 HTTP 데이터" %}
**Panther에서 수신한 HTTP 데이터에서 사용자 정의 스키마 추론**

HTTP(웹훅) 소스에서 Panther로 스트리밍되는 라이브 데이터를 바탕으로 사용자 정의 로그 소스의 스키마를 생성하고 게시할 수 있습니다. 먼저 [HTTP 데이터를 확인하고](#view-raw-http-data) Panther에서, 그런 다음 [스키마를 추론한 다음](#infer-a-schema-from-raw-data-1), 그런 다음 [스키마를 테스트합니다](#test-the-schema-with-raw-data-1).

**원시 HTTP 데이터 보기**

다음을 만든 후 [HTTP 소스](/ko/data-onboarding/data-transports/http.md) Panther에서, Panther로 들어오는 원시 데이터를 확인하고 이를 바탕으로 스키마를 추론할 수 있습니다:

1. 다음을 따르세요 [HTTP 로그 소스 설정 지침](/ko/data-onboarding/data-transports/http.md#how-to-set-up-an-http-log-source-in-panther) Panther에서.
   * HTTP 소스 설정 중에는 스키마를 선택하지 마세요.
2. 로그 소스의 **개요** 탭을 보고 있을 때 아래로 스크롤하여 **데이터 분류를 시작하려면 스키마를 연결하세요** 섹션.\
   ![The Overview tab of the detail page of an HTTP source called "HTTP Holding Tank" is shown. There is a Basic Info section with fields like Source ID, HTTP Ingest URL, etc. Below, there is a section titled "Attach a schema to start classifying data." Within it are two options: I want to add an existing schema, and I want to generate a schema.](/files/3c7c8c5fb5fd493fc8fa4272f6744e981f793a94)
3. 다음 옵션 중에서 선택하세요:
   * **기존 스키마를 추가하고 싶습니다:** 이미 스키마를 만들었다면 이 옵션을 선택하세요. 다음을 클릭하세요 **시작** 타일에서
     * HTTP 소스 편집 페이지로 이동하게 되며, 그곳에서 다음 항목에서 선택할 수 있습니다 **스키마 - 선택 사항** 필드:

       <figure><img src="/files/443d4006b0fb40e2925ff4be4f8228ed14bccb02" alt="The edit page for an HTTP source is shown. In the Basic Information section, the &#x22;Schemas - Optional&#x22; dropdown field is open, but no selections have been made." width="375"><figcaption><p>HTTP 소스 편집 페이지</p></figcaption></figure>
   * **스키마를 생성하고 싶습니다:** 라이브 데이터로부터 스키마를 생성하려면 이 옵션을 선택하세요. 클릭 **시작** 타일에서
     * 다음 이후 몇 분 정도 기다려야 할 수 있습니다 `POST`이벤트를 HTTP 엔드포인트로 POST하여 Panther에서 표시되기까지.
     * 안내되는 페이지에서, 다음 아래에 **Raw Events**, Panther가 지난 1주일 동안 수신한 원시 데이터를 볼 수 있습니다:

       <figure><img src="/files/2db34d286f8948ac032e25ab96789f95a187e7f2" alt="An HTTP source schema attachment page is shown. There is an arrow pointing to the section at the bottom, called &#x22;Raw Events.&#x22; Various JSON events are included in this section. There is a blue &#x22;Infer Schema&#x22; button."><figcaption><p>HTTP 원시 이벤트</p></figcaption></figure>
     * 이 데이터는 다음에서 표시됩니다 `data-archiver`, 원시 HTTP 소스 로그를 15일간 보관하는 Panther 관리형 S3 버킷입니다.

**원시 데이터에서 스키마 추론**

다음을 선택하면 **스키마를 생성하고 싶습니다** 라는 이전 섹션에서 이제 스키마를 추론할 수 있습니다.

1. 다음 내에 데이터가 채워지는 것이 보이면 **Raw Events**, 다음을 클릭하세요 **스키마 추론**.\
   ![An HTTP source schema attachment page is shown. There is a section at the bottom called "Raw Events." Various JSON events are included in this section. There is an arrow pointing to a blue "Infer Schema" button.](/files/bc668a1d6a11bd6c9b54f719cb4658a34c26d11f)
2. 다음에서 **새 스키마 추론** 팝업 모달에서 다음을 입력하세요:
   * **새 스키마 이름:** 설명적인 이름을 입력하세요. 항상 다음으로 시작합니다 `Custom.` 그리고 그 뒤에는 대문자가 와야 합니다.
3. 다음을 클릭합니다: **스키마 추론**.
   * 페이지 상단에서 다음을 볼 수 있습니다 **'<'schema name'>'이 성공적으로 추론되었습니다**.
4. 다음을 클릭합니다: **완료**.\
   ![Text reads "'Custom.HttpHoldingTank' was successfully inferred." Below, there is a Done button, which is circled.](/files/65c1513282d99e459953055ffe4f7a8988dbbe74)
   * 스키마는 다음에 배치됩니다 **초안** 테스트 후 게시할 준비가 될 때까지 모드로 유지됩니다.
5. 추론된 필드를 검토하려면 초안 스키마의 이름을 클릭하세요.\
   ![Under a "Schema(s)" header is "Custom.HttpHoldingTank" with a "Draft" label. It is circled.](/files/44574667a0469e4bc04a8bc16da94da1a406c0a2)
   * 스키마가 다음 상태이므로 **초안**, 필요에 따라 필드를 추가, 제거 또는 기타 방식으로 변경할 수 있습니다.\
     ![The edit schema view is shown. There are fields for Schema ID, Reference URL, and Description. Below, is the schema itself, in a code editor.](/files/e67540f18dd70e93094f15c1b2fec9d0ba0041fe)

**원시 데이터로 스키마 테스트**

스키마를 정의한 후에는 원시 데이터를 대상으로 스키마 구성을 테스트할 수 있습니다.

1. 다음의 **스키마 테스트** 화면 상단의 섹션에서 다음을 클릭하세요 **테스트 실행**.\
   ![Under a "Schema(s)" header is "Custom.HttpHoldingTank" with a "Draft" label. In the bottom right corner, under a "Test Schemas" header, is a "Run Test" button, which is circled.](/files/e9e8c95912cc420bd4f0d648b69b7d985b19a2e1)
2. 다음의 **스키마 테스트** 팝업 모달에서 다음을 선택하세요: **시간 기간** 스키마를 테스트하고 싶은 대상을 선택한 다음 다음을 클릭하세요 **테스트 시작**.\
   ![The "Test Schemas" modal has a "Time Period" dropdown selection and a "Start Test" button.](/files/36a5926750ab3ae75aa615ecc3c7ac2778f7f215)
   * 시간 범위와 데이터 양에 따라 테스트가 완료되는 데 몇 분 걸릴 수 있습니다.\
     ![The HTTP Source schema test page is shown. It shows "18 Matched Events" and "0 Unmatched Events." There is a blue "Back to Schemas" button.](/files/da7e59749f03d516386d18d832f296274a8a7ed4)
   * 테스트가 시작되면 일치한 이벤트 수와 일치하지 않은 이벤트 수가 결과로 표시됩니다.
     * **일치한 이벤트** 는 스키마 구성에 대해 성공적으로 분류될 이벤트 수를 나타냅니다.
     * **불일치한 이벤트** 는 스키마에 대해 분류되지 않을 이벤트 수를 나타냅니다.
3. 만약 다음이 있다면 **불일치한 이벤트**, 오류와 JSON을 검토하여 실패 원인을 파악하세요.\
   ![A list of JSON logs is shown under an "Unmatched Events" header. There are two columns, "Raw Events" and "Error"](/files/49a6fd5b30a8e39eda3d7873cbe20f1dfceaaffb)
   * 다음을 클릭합니다: **스키마로 돌아가기**, 필요에 따라 변경한 뒤 스키마를 다시 테스트하세요.
4. 다음을 클릭합니다: **스키마로 돌아가기**.
5. 오른쪽 상단 모서리에서 다음을 클릭하세요 **저장**.\
   ![The HTTP Source schema edit page is shown, and its "Save" button in the upper-right corner is circled.](/files/237285fa123c26141bcf2fda42b0cde2db42ce0d)
   * 이제 추론된 스키마가 로그 소스에 연결되었습니다.
   * 스키마가 연결되기 전에 HTTP 소스로 전송되어 스키마를 추론하는 데 사용된 로그 이벤트는 이후 Panther로 수집됩니다.
     {% endtab %}
     {% endtabs %}

## 직접 스키마 만들기

### 사용자 지정 스키마를 수동으로 만드는 방법

사용자 지정 스키마를 수동으로 만들려면:

1. Panther 콘솔의 왼쪽 탐색 표시줄에서 다음을 클릭합니다: **구성** > **스키마**.
2. 오른쪽 상단 모서리에서 다음을 클릭하세요 **새로 만들기**.
3. 다음을 입력하세요 **스키마 ID**, **설명**, 그리고 **참조 URL**.
   * Description은 테이블에 대한 내용을 위한 것이며, Reference URL은 내부 리소스로 연결하는 데 사용할 수 있습니다.
4. 선택적으로 다음을 활성화하세요 **자동 필드 검색** 토글을 클릭하여 `켬`. 자세한 내용은 다음에서 확인하세요 [필드 탐색](/ko/data-onboarding/field-discovery.md).
5. 다음의 **스키마** 섹션의 **스키마를 처음부터 만드세요** 타일에서 다음을 클릭합니다: **시작**.
   * 해당 **스키마** 섹션은 기본적으로 다음을 사용합니다 **분리된 섹션**. 전체 스키마를 하나의 편집기 창에 작성하려면 다음을 클릭하세요 **단일 편집기**.\
     ![To the right of a "Schema" header is a toggle with two values: Separate Sections and Single Editor.](/files/86332e94f5a1b60d87e9bb529033291c5be0acc5)
6. 다음의 **파서** 섹션에서, 스키마에 다음이 아닌 다른 파서가 필요하면 **기본값 (JSON/XML)** 파서를 선택하세요. 다음 페이지에서 다른 파서 옵션에 대해 자세히 알아보세요:
   * [스크립트 로그 파서](/ko/data-onboarding/custom-log-types/script-parser.md)
   * [패스트매치 로그 파서](/ko/data-onboarding/custom-log-types/fastmatch-parser.md)
   * [정규식 로그 파서](/ko/data-onboarding/custom-log-types/regex-parser.md)
   * [CSV 로그 파서](/ko/data-onboarding/custom-log-types/csv-parser.md)
7. 다음의 **필드 및 지표** 섹션에 YAML 로그 스키마 필드를 작성하거나 붙여넣으세요.
   * 참조 [스키마 작성](#writing-schemas) 스키마 구성에 대해 자세히 알아보세요.
   * Panther가 생성한 다음을 사용할 수 있습니다 [스키마 필드 제안](#schema-field-suggestions).
8. (선택 사항) 다음에서 **범용 데이터 모델** 섹션에서 스키마의 핵심 필드 매핑을 정의하세요.
   * 다음에서 자세히 알아보세요 [사용자 지정 로그 스키마에서 핵심 필드 매핑하기](/ko/search/panther-fields.md#mapping-core-fields-in-custom-log-schemas).
9. 창 하단에서 다음을 클릭하세요 **테스트 실행** 스키마에 오류가 없는지 확인합니다.
   * 구문 검증은 Log Schema의 구문만 확인한다는 점에 유의하세요. 이름 충돌로 인해 저장에 실패할 수 있습니다.
10. 다음을 클릭합니다: **저장**.

이제 다음으로 이동할 수 있습니다 **구성 > 로그 소스** 그리고 새 소스를 추가하거나 기존 소스를 수정하여 새 `Custom.SampleAPI` \_Log Type. Panther가 이 소스에서 이벤트를 수신하면 로그를 처리하여 다음에 저장합니다 `custom_sampleapi` 테이블.

이제 다음도 작성할 수 있습니다 [탐지 규칙](/ko/detections.md) 이 로그와 일치하도록 하고 다음을 사용하여 쿼리할 수 있습니다 [검색](/ko/search/search-tool.md) 또는 [Data Explorer](/ko/search/data-explorer.md).

### 스키마 작성

JSON, XML 및 텍스트 로그용 스키마 작성 방법에 대해 자세히 알아보려면 아래 탭을 참조하세요.

{% tabs %}
{% tab title="JSON 로그" %}
**JSON 로그용 스키마 작성**

각 줄이 JSON인 로그 파일을 파싱하려면, 각 로그 항목의 구조를 설명하는 로그 스키마를 정의해야 합니다.

Panther Console에서 YAML 사양을 직접 편집할 수 있으며, 또는 다음에서 [선택한 편집기/IDE에서 오프라인으로 준비할 수 있습니다](/ko/data-onboarding/custom-log-types/reference.md#using-json-schema-in-an-ide). 다음의 구조와 필드에 대한 자세한 내용은 *로그 스키마*, 다음을 참조하세요 [로그 스키마 참고 자료](/ko/data-onboarding/custom-log-types/reference.md).

다음을 사용하는 것도 가능합니다 [`starlark` 파서](/ko/data-onboarding/custom-log-types/script-parser.md) 를 JSON 로그와 함께 사용하여 다음 범위를 벗어난 변환을 수행할 수 있습니다 [Panther에서 기본적으로 지원하는 것들](/ko/data-onboarding/custom-log-types/transformations.md).

아래 예제 스키마에서 첫 번째 탭은 JSON 로그 구조를 표시하고 두 번째 탭은 로그 스키마를 표시합니다.

{% tabs %}
{% tab title="JSON 로그 예시" %}

```json
{
  "method": "GET",
  "path": "/-/metrics",
  "format": "html",
  "controller": "MetricsController",
  "action": "index",
  "status": 200,
  "params": [],
  "remote_ip": "1.1.1.1",
  "user_id": null,
  "username": null,
  "ua": null,
  "queue_duration_s": null,
  "correlation_id": "c01ce2c1-d9e3-4e69-bfa3-b27e50af0268",
  "cpu_s": 0.05,
  "db_duration_s": 0,
  "view_duration_s": 0.00039,
  "duration_s": 0.0459,
  "tag": "test",
  "time": "2019-11-14T13:12:46.156Z"
}
```

**축약된 JSON 로그 예시**:

{% hint style="info" %}
이를 활용하세요 **축약된 JSON 로그 예시** 다음을 사용할 때 `pantherlog` 도구를 사용하거나 Panther Console 내에서 스키마를 생성할 때.
{% endhint %}

`{"method":"GET","path":"/-/metrics","format":"html","controller":"MetricsController","action":"index","status":200,"params":[],"remote_ip":"1.1.1.1","user_id":null,"username":null,"ua":null,"queue_duration_s":null,"correlation_id":"c01ce2c1-d9e3-4e69-bfa3-b27e50af0268","cpu_s":0.05,"db_duration_s":0,"view_duration_s":0.00039,"duration_s":0.0459,"tag":"test","time":"2019-11-14T13:12:46.156Z"}`
{% endtab %}

{% tab title="로그 스키마 예시" %}

```yaml
fields:
- 이름: time
  설명: 이벤트 타임스탬프
  required: true
  type: timestamp
  timeFormats: 
   - rfc3339
  isEventTime: true
- 이름: method
  description: 요청에 사용된 HTTP 메서드
  type: string
- 이름: path
  description: 요청에 사용된 경로
  type: string
- 이름: remote_ip
  description: 요청이 발생한 원격 IP 주소
  type: string
  indicators: [ ip ] # 값이 유효한 IP 주소이면 `p_any_ip_addresses`에 추가됩니다
- 이름: duration_s
  description: 요청이 완료되는 데 걸린 초 수
  type: float
- 이름: format
  description: 응답 형식
  type: string
- 이름: user_id
  description: 요청을 보낸 사용자의 ID
  type: string
- 이름: params
  type: array
  element:
    type: object
    fields:
    - 이름: key
      description: 쿼리 매개변수의 이름
      type: string
    - 이름: value
      description: 쿼리 매개변수의 값
      type: string
- 이름: tag
  description: 요청 태그
  type: string
- 이름: ua
  description: UserAgent 헤더
  type: strinll
```

{% endtab %}
{% endtabs %}
{% endtab %}

{% tab title="XML 로그" %}
**XML 로그용 스키마 작성**

Panther는 XML 로그를 중간 단계에서 JSON으로 파싱하므로, JSON 로그 탭에 설명된 JSON 로그용 모든 도구를 사용할 수 있습니다. Panther가 XML을 JSON으로 파싱하는 방법은 다음에서 알아보세요 [XML 스트림 유형](/ko/data-onboarding/custom-log-types/reference.md#xml-stream-type), 그런 다음 그에 맞게 스키마를 만드세요.

XML은 문자열 이외의 데이터 유형을 지원하지 않으므로, 해당 JSON 표현의 모든 값은 문자열로 표시된다는 점에 유의하세요(예: `"ip": "192.168.1.100"`). 스키마를 정의할 때는 아래 로그 스키마 예시에서 보듯 각 필드에 적절한 유형을 사용할 수 있습니다.

{% tabs %}
{% tab title="XML 로그 예시" %}
원시 XML 로그:

```xml
<log>
    <id>12345</id>
    <timestamp>2023-11-14T13:12:46.156Z</timestamp>
    <event type="security" priority="high">
        <message>Unauthorized access attempt detected</message>
        <source>
            <ip>192.168.1.100</ip>
            <user>admin</user>
        </source>
        <details>
            <action>login_failed</action>
            <reason>invalid_credentials</reason>
        </details>
    </event>
</log>
```

{% endtab %}

{% tab title="JSON 대응 예시" %}
원시 XML 로그가 [JSON으로 변환되는 방식](/ko/data-onboarding/custom-log-types/reference.md#xml-stream-type):

```json
{
  "id": "12345",
  "timestamp": "2023-11-14T13:12:46.156Z",
  "event": {
    "type": "security",
    "priority": "high",
    "message": "Unauthorized access attempt detected",
    "source": {
      "ip": "192.168.1.100",
      "user": "admin"
    },
    "details": {
      "action": "login_failed",
      "reason": "invalid_credentials"
    }
  }
}
```

{% endtab %}

{% tab title="로그 스키마 예시" %}
이 로그를 파싱하는 로그 스키마는 다음과 같습니다:

```yaml
fields:
- 이름: id
  description: 고유 로그 식별자
  type: string
  required: true
- 이름: timestamp
  설명: 이벤트 타임스탬프
  type: timestamp
  timeFormats: 
   - rfc3339
  isEventTime: true
- 이름: event
  description: 이벤트 세부 정보
  type: object
  fields:
  - 이름: type
    설명: 이벤트 유형
    type: string
  - name: priority
    description: 이벤트 우선순위 수준
    type: string
  - name: message
    description: 이벤트 메시지
    type: string
  - 이름: source
    description: 소스 정보
    type: object
    fields:
    - 이름: ip
      설명: 소스 IP 주소
      type: string
      indicators: [ ip ]
    - 이름: user
      description: 사용자 이름
      type: string
  - 이름: details
    description: 추가 이벤트 세부 정보
    type: object
    fields:
    - 이름: action
      description: 수행된 작업
      type: string
    - 이름: reason
      description: 작업 사유(해당하는 경우)
      type: string
```

{% endtab %}
{% endtabs %}
{% endtab %}

{% tab title="텍스트 로그" %}
**텍스트 로그용 스키마 작성**

Panther는 JSON/XML로 구조화되지 않은 로그를 각 로그 줄을 키/값 쌍으로 변환하여 나머지 파이프라인에 JSON으로 전달하는 '파서'를 사용해 처리합니다. 텍스트 파서는 다음의 `파서` 다음의 필드 *로그 스키마*. Panther는 JSON/XML 형식이 아닌 로그에 대해 다음 파서를 제공합니다:

<table data-header-hidden><thead><tr><th width="182.74652099609375">이름</th><th>설명</th></tr></thead><tbody><tr><td>이름</td><td>설명</td></tr><tr><td><a href="/pages/cae8bdeef6e28bb00cb38ad360eab6e1233fca46">fastmatch</a></td><td>텍스트의 각 줄을 하나 이상의 간단한 패턴과 비교합니다</td></tr><tr><td><a href="/pages/8a97e8978c97e4697ef149dd876c74d65607784e">regex</a></td><td>조건부 필드, 대소문자 구분 없는 매칭 등 더 복잡한 매칭을 처리하려면 정규식 패턴을 사용합니다.</td></tr><tr><td><a href="/pages/01f08f7fb916d6e6271b1defdcce2ec984911171">csv</a></td><td>로그 파일을 CSV로 처리하여 열 이름을 필드 이름에 매핑합니다</td></tr><tr><td><a href="/pages/a405ff2f3264c0dee39dc2a4d908e57abfa9993b">starlark</a></td><td>텍스트 로그를 파싱하거나 JSON 로그에 변환을 수행합니다</td></tr></tbody></table>
{% endtab %}
{% endtabs %}

### 스키마 필드 제안

사용자 지정 스키마를 만들거나 편집할 때 Panther가 생성한 필드 제안을 사용할 수 있습니다. 이 기능을 사용하려면:

1. Panther Console에서 YAML 스키마 편집기를 클릭하세요.
   * 기존 스키마를 편집하려면 다음을 클릭하세요 **구성** > **스키마** > \[편집하려는 스키마 이름] > **편집**.
   * 새 스키마를 만들려면 다음을 클릭하세요 **구성** > **스키마** > **새로 만들기**.
2. 다음을 누르세요 `Command+I` macOS에서(또는 `Control+I` PC에서).
   * 스키마 편집기는 텍스트 커서의 위치를 기준으로 사용 가능한 속성과 작업을 표시합니다.

     ![YAML 스키마 편집기가 표시됩니다. 커서 아래에는 concat, copy, description, indicators, mask 등을 포함한 다양한 필드 제안이 있는 상자가 있습니다.](/files/02a4b6f63ba1af99a73499a698f1c29c66188bb3)

## 사용자 지정 스키마 관리

### 사용자 지정 스키마 편집

Panther에서는 사용자 지정 스키마를 편집할 수 있습니다. 구체적으로 다음 작업을 수행할 수 있습니다:

* 새 필드를 추가합니다.
* 기존 필드의 이름을 바꾸거나 삭제합니다.
* 기존 필드의 모든 속성을 편집, 추가 또는 제거합니다.
* 다음을 수정합니다 `파서` 구성을 수정하여 버그를 해결하거나 새 패턴을 추가합니다.
* [스키마를 보관하거나 보관 해제합니다](#archiving-and-unarchiving-a-custom-schema).
* [필드 검색을 활성화하거나 비활성화합니다](/ko/data-onboarding/field-discovery.md#enabling-field-discovery-1).

{% hint style="info" %}
필드의 `유형`, 새로 수집되는 데이터는 새 유형과 일치하며, 이전에 수집된 데이터는 이전 유형을 유지합니다.
{% endhint %}

사용자 지정 스키마를 편집하려면:

1. Panther Console에서 사용자 지정 스키마의 세부 정보 페이지로 이동하세요.
2. 세부 정보 페이지의 오른쪽 상단 모서리에서 다음을 클릭하세요 **편집**.

   <figure><img src="/files/9c36be919d130aaeface0633e0eb223cf8f30483" alt=""><figcaption></figcaption></figure>
3. 원하는 대로 스키마를 수정합니다.
   * Panther가 생성한 다음을 사용할 수 있습니다 [스키마 필드 제안](#schema-field-suggestions).
   * 변경 사항을 더 쉽게 확인하려면(또는 삭제된 줄을 복사하거나 되돌리려면) 다음을 클릭하세요 **단일 편집기,** 그다음 **차이 보기**.

     <figure><img src="/files/538e3a1ea44a9e452105f81efcf7bc8aa262a147" alt="The Schema editor is shown, and the &#x22;Single Editor&#x22; and &#x22;Diff View&#x22; buttons are shown. One field has been changed, from event_time to new_name."><figcaption></figcaption></figure>
4. 오른쪽 상단에서 다음을 클릭합니다: **업데이트**.

다음을 클릭합니다: **테스트 실행** 를 눌러 YAML의 구조적 준수 여부를 확인하세요. 규칙은 다음을 클릭한 후에만 확인된다는 점에 유의하세요 **업데이트**. 규칙을 따르지 않으면 업데이트가 거부됩니다.

#### 관련 탐지 규칙 및 저장된 쿼리 업데이트

스키마 필드를 편집하면 관련 탐지 규칙과 저장된 쿼리를 업데이트해야 할 수 있습니다. 다음을 클릭하세요 **관련 탐지 규칙** 스키마 편집기 위에 표시되는 알러트 배너에서 영향을 받는 탐지 규칙 및 저장된 쿼리 목록을 보고, 업데이트하고, 테스트할 수 있습니다.

<figure><img src="/files/a9cb09c7aea8765d62b0061f1f844d8dd51663d5" alt="A schema&#x27;s name is shown, &#x22;Custom.A&#x22;—to its right are three buttons: Upload Sample Logs, Cancel, and Update."><figcaption></figcaption></figure>

#### **쿼리 영향**

쿼리는 다음의 변경 전반에서 작동합니다 **유형** 단, 쿼리가 다음 간에 캐스팅할 수 없는 필드 유형을 필요로 하는 함수나 연산자를 사용하지 않아야 합니다 **유형**.

* **좋은 예**: 다음이 **유형** 에서 다음으로 편집됩니다 `string` 에서 `int` 기존 값이 모두 숫자인 경우(즉, `"1"`). 다음 함수를 사용하는 쿼리는 `sum` 기존 값과 새 값을 함께 집계합니다.
* **나쁜 예**: 다음이 **유형** 에서 다음으로 편집됩니다 `string` 에서 `int` 기존 값 중 일부가 숫자가 아닌 경우(즉, `"apples"`). 다음 함수를 사용하는 쿼리는 `sum` 숫자가 아닌 값은 제외합니다.

#### 쿼리 캐스팅 가능성 표

이 표는 어떤 **유형** 각각으로 캐스팅할 수 있는지 **유형** 쿼리를 실행할 때. 스키마 편집을 통해 모든 **유형** 유형이 다른 **유형**.

<table><thead><tr><th width="135">유형 From -> To</th><th width="96">boolean</th><th width="86">string</th><th width="100">int</th><th width="102">bigint</th><th width="102">float</th><th>timestamp</th></tr></thead><tbody><tr><td>boolean</td><td>동일</td><td>예</td><td>예</td><td>예</td><td>아니요</td><td>아니요</td></tr><tr><td>string</td><td>예</td><td>동일</td><td>숫자만</td><td>숫자만</td><td>숫자만</td><td>숫자만</td></tr><tr><td>int</td><td>예</td><td>예</td><td>동일</td><td>예</td><td>예</td><td>숫자만</td></tr><tr><td>bigint</td><td>예</td><td>예</td><td>예</td><td>동일</td><td>예</td><td>숫자만</td></tr><tr><td>float</td><td>예</td><td>예</td><td>예</td><td>예</td><td>동일</td><td>숫자만</td></tr><tr><td>timestamp</td><td>아니요</td><td>예</td><td>아니요</td><td>아니요</td><td>아니요</td><td>동일</td></tr></tbody></table>

### 사용자 지정 스키마 보관 및 보관 해제

Panther에서 사용자 지정 스키마를 보관하거나 보관 해제할 수 있습니다. 데이터 수집에 더 이상 사용되지 않고 Panther 전반의 다양한 드롭다운 선택기에서 옵션으로 표시되는 것을 원하지 않는 경우 스키마를 보관할 수 있습니다. 스키마를 보관하려면 어떤 로그 소스에서도 사용 중이어서는 안 됩니다. 보관된 스키마는 계속 무기한 존재하며, 스키마를 영구적으로 삭제하는 것은 불가능합니다.

스키마를 보관해도 해당 스키마를 사용해 이미 수집되어 데이터 레이크에 저장된 데이터에는 영향을 주지 않으며, 여전히 다음을 사용하여 쿼리할 수 있습니다 [Data Explorer](/ko/search/data-explorer.md) 그리고 [검색](/ko/search/search-tool.md). 기본적으로 보관된 스키마는 스키마 목록 보기에서 표시되지 않으며(다음에서 볼 수 있음 **구성** > **스키마**), 하지만 다음을 수정하면 표시할 수 있습니다 **상태**, 다음의 **필터**, 오른쪽 상단 모서리에서. 다음에서는 [Data Explorer](/ko/search/data-explorer.md), 보관된 스키마의 테이블은 다음 아래에 표시되지 않습니다 **테이블**.

보관된 스키마와 같은 이름으로 새 스키마를 만들려고 하면 이름 충돌이 발생하며, 대신 기존 스키마를 보관 해제하여 편집하라는 메시지가 표시됩니다.

사용자 지정 스키마를 보관하거나 보관 해제하려면:

1. Panther Console에서 다음으로 이동하세요 **구성** > **스키마**.
   * 보관하거나 보관 해제하려는 스키마를 찾습니다.
2. 스키마 행의 오른쪽에서 다음을 클릭하세요 **보관** 또는 **보관 해제** 아이콘.

   <figure><img src="/files/6b2ee6b98fd34e7f04b35cdb62f011159912cdd0" alt="Two schema rows are shown, one that is currently archived and one that is currently unarchived. The archive/unarchive icons in each of their rows is circled."><figcaption></figcaption></figure>

   * 스키마를 보관하려는데 현재 하나 이상의 로그 소스에 연결되어 있다면, 확인 모달에서 먼저 스키마 연결을 해제하라는 메시지가 표시됩니다. 그렇게 한 후 다음을 클릭하세요 **새로 고침**.\
     ![An Archive Schema modal says, "Prior to archiving Custom.HarryPotterFake2, it must be detached from all associated Log Sources." A list of associated log sources is shown, with only one value: Carrie Tines Test](/files/9cb0d958a8b5e19fbe2ff31c9ce1f6d2c47c05cd)
3. 확인 모달에서 다음을 클릭하세요 **계속**.

### 사용자 지정 스키마 테스트

{% hint style="info" %}
Panther Console의 스키마 편집 페이지에 있는 "샘플 로그로 스키마 테스트" 기능은 Lines, CSV(헤더 포함 또는 미포함), JSON, JSON Array, XML, CloudWatch Logs 및 Auto를 지원합니다. 다음을 참조하세요 [스트림 유형](/ko/data-onboarding/custom-log-types/reference.md#stream-type) 예시를 보려면.

또한 위의 로그 형식은 다음 형식으로 압축할 수 있습니다:

* gzip
* zstd(사전 없음)

JSON 및 JSONArray 형식에서는 여러 줄 로그가 지원됩니다.
{% endhint %}

사용자 지정 스키마가 로그에서 작동하는지 검증하려면 샘플 로그로 테스트할 수 있습니다:

1. Panther Console의 왼쪽 탐색 모음에서 다음을 클릭하세요 **구성 > 스키마**.
2. 사용자 지정 스키마 이름을 클릭하세&#xC694;**.**
3. 스키마 세부 정보 페이지의 오른쪽 상단 모서리에서 다음을 클릭하세요 **스키마 테스트**.

   <figure><img src="/files/a8c61bfb3fe8f2e06722ea2d0f921ee7eb034adf" alt="A schema&#x27;s name is shown. To its right are two buttons: Test Schema and Clone."><figcaption></figcaption></figure>

## Panther Analysis Tool로 로그 스키마 업로드

로그 스키마를 Panther Console 외부에서 관리하고, 버전 관리를 하거나 업데이트 전에 변경 사항을 검토하려는 경우, 다음을 사용하여 YAML 파일을 프로그래밍 방식으로 업로드할 수 있습니다 [Panther Analysis Tool](/ko/panther/detections-repo/pat.md) (PAT).

업로더 명령은 인수로 기본 경로를 받은 다음, 확장자가 `.yml` 그리고 `.yaml`.

{% hint style="info" %}
스키마 파일은 관련 없는 파일과 분리하여 저장하는 것이 좋습니다. 그렇지 않으면 잘못된 스키마 파일을 업로드하려고 할 때 업로드 중 오류가 발생할 수 있습니다.
{% endhint %}

```
panther_analysis_tool update-custom-schemas --path ./schemas
```

업로더는 기존 스키마가 있는지 확인하고, 일치하는 스키마 이름이 없으면 업데이트를 진행하거나 새 스키마를 생성합니다.

{% hint style="warning" %}
해당 `스키마` 필드는 업데이트가 성공하려면 YAML 파일에 항상 정의되어 있어야 하며 기존 스키마 이름과 일치해야 합니다. 사용 가능한 모든 CI/CD 필드 목록은 다음을 참조하세요 [로그 스키마 참고 자료](https://docs.panther.com/data-onboarding/custom-log-types/reference#ci-cd-schema-fields).
{% endhint %}

PAT를 통해 업로드된 스키마는 Panther Console에서 수행한 업데이트와 동일한 기준으로 검증됩니다.

## 사용자 지정 로그 문제 해결

Panther Knowledge Base를 방문하여 [사용자 지정 로그 소스에 관한 문서 보기](https://help.panther.com/Data_Sources/Custom_Logs) 자주 묻는 질문에 답하고 일반적인 오류와 문제를 해결하는 데 도움이 됩니다.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.panther.com/ko/data-onboarding/custom-log-types.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
