다음을 통해 공유


[사용되지 않음] Logstash를 사용하여 HTTP 데이터 수집 API(레거시)로 로그 스트리밍

Important

이제 많은 어플라이언스 및 디바이스의 로그 수집이 Microsoft Sentinel의 AMA를 통한 CEF(Common Event Format), AMA를 통한 Syslog 또는 AMA 데이터 커넥터를 통한 사용자 지정 로그에서 지원됩니다. 자세한 내용은 Microsoft Sentinel 데이터 커넥터 찾기를 참조하세요.

Important

Logstash 출력 플러그 인을 사용한 데이터 수집은 현재 퍼블릭 미리 보기 상태입니다. 해당 기능은 별도의 Service Level Agreement(서비스 수준 규약) 없이 제공되며, 프로덕션 작업에는 사용하지 않는 것이 좋습니다. 자세한 내용은 Microsoft Azure Preview에 대한 추가 사용 약관을 참조하세요.

참고 항목

최신 버전의 Logstash 플러그 인은 DCR 기반 API를 사용하여 외부 데이터 원본의 로그를 사용자 지정 및 표준 테이블로 전달할 수 있습니다. 새 플러그 인을 사용하면 열 이름 및 형식의 구성을 포함하여 출력 스키마를 완전히 제어할 수 있습니다.

Logstash 데이터 수집 엔진에 Microsoft Sentinel의 출력 플러그 인을 사용하면 Logstash를 통해 원하는 모든 로그를 Microsoft Sentinel의 Log Analytics 작업 영역으로 직접 보낼 수 있습니다. 로그는 출력 플러그 인을 사용하여 정의하는 사용자 지정 테이블로 전송됩니다. 이 버전의 플러그 인은 HTTP 데이터 컬렉션 API를 사용합니다.

Logstash 데이터 수집 엔진 사용에 대해 자세히 알아보려면 Getting started with Logstash(Logstash 시작)를 참조하세요.

개요

아키텍처 및 배경

Logstash 아키텍처의 다이어그램

Logstash 엔진은 다음과 같은 세 가지 구성 요소로 구성됩니다.

  • 입력 플러그 인: 다양한 원본의 사용자 지정된 데이터 컬렉션입니다.
  • 필터 플러그 인: 지정된 조건에 따라 데이터를 조작하고 정규화합니다.
  • 출력 플러그 인: 수집되고 처리된 데이터를 다양한 대상으로 보내기를 사용자 지정합니다.

참고 항목

  • Microsoft는 여기에 설명된 Microsoft Sentinel 제공 Logstash 출력 플러그 인만 지원합니다. 플러그 인의 현재 버전은 v1.0.0이며 2020년 8월 25일에 릴리스되었습니다. 출력 플러그 인과 관련된 모든 문제에 대해 지원 티켓을 열 수 있습니다.

  • Microsoft는 Microsoft Sentinel용 타사 Logstash 출력 플러그 인 또는 기타 모든 Logstash 플러그 인 또는 모든 유형의 구성 요소를 지원하지 않습니다.

  • Microsoft Sentinel의 Logstash 출력 플러그 인은 Logstash 버전 7.0~7.17.10 및 버전 8.0~8.9 및 8.11만 지원합니다. Logstash 8을 사용하는 경우 파이프라인에서 ECS를 사용하지 않도록 설정하는 것이 좋습니다.

Logstash용 Microsoft Sentinel 출력 플러그 인은 Log Analytics HTTP 데이터 수집기 REST API를 사용하여 JSON 형식 데이터를 Log Analytics 작업 영역으로 보냅니다. 데이터는 사용자 지정 로그에 수집됩니다.

Logstash에 Microsoft Sentinel 출력 플러그 인 배포

1단계: 설치

Microsoft Sentinel 출력 플러그 인은 Logstash 컬렉션에서 사용할 수 있습니다.

  • Logstash Working with plugins(플러그 인 사용) 문서의 지침에 따라 microsoft-logstash-output-azure-loganalytics 플러그 인을 설치합니다.

  • Logstash 시스템에서 인터넷에 액세스할 수 없는 경우 Logstash Offline Plugin Management(오프라인 플러그 인 관리) 문서의 지침에 따라 오프라인 플러그 인 팩을 준비하고 사용합니다. 이렇게 하려면 인터넷에 액세스할 수 있는 다른 Logstash 시스템을 빌드해야 합니다.

2단계: 구성

Logstash Structure of a config file(구성 파일의 구조) 문서의 정보를 사용하고 다음 키와 값을 사용하여 Microsoft Sentinel 출력 플러그 인을 구성에 추가합니다. 테이블 다음에 적절한 구성 파일 구문이 표시됩니다.

필드 이름 데이터 형식 설명
workspace_id string 작업 영역 ID GUID를 입력합니다(팁 참조).
workspace_key string 작업 영역 기본 키 GUID를 입력합니다(팁 참조).
custom_log_table_name string 로그를 수집할 테이블의 이름을 설정합니다. 테이블 이름은 출력 플러그 인당 하나만 구성할 수 있습니다. 로그 테이블은 Microsoft Sentinel의 로그 아래, 사용자 지정 로그 범주의 테이블_CL 접미사와 함께 나타납니다.
endpoint string 선택적 필드입니다. 기본적으로 Log Analytics 엔드포인트입니다. 이 필드를 사용하여 대체 엔드포인트를 설정합니다.
time_generated_field string 선택적 필드입니다. 이 속성은 Log Analytics의 기본 TimeGenerated 필드를 재정의합니다. 데이터 원본에 타임스탬프 필드의 이름을 입력합니다. 필드의 데이터는 ISO 8601 형식(YYYY-MM-DDThh:mm:ssZ)을 준수해야 합니다.
key_names array Log Analytics 출력 스키마 필드 목록을 입력합니다. 각 목록 항목은 작은따옴표로 묶고 쉼표로 구분하며 전체 목록은 대괄호로 묶어야 합니다. 아래 예제를 참조하세요.
plugin_flush_interval number 선택적 필드입니다. Log Analytics로의 메시지 전송 간 최대 간격(초)을 정의하려면 설정합니다. 기본값은 5입니다.
amount_resizing 부울 값 true 또는 false. 수신되는 로그 데이터의 볼륨에 따라 메시지 버퍼 크기를 조정하는 자동 스케일링 메커니즘을 사용하거나 사용하지 않도록 설정합니다.
max_items number 선택적 필드입니다. amount_resizing이 "false"로 설정된 경우에만 적용됩니다. 메시지 버퍼 크기(레코드 내)의 상한을 설정하는 데 사용합니다. 기본값은 2000입니다.
azure_resource_id string 선택적 필드입니다. 데이터가 상주하는 Azure 리소스의 ID를 정의합니다.
리소스 ID 값은 리소스 컨텍스트 RBAC를 사용하여 특정 데이터에만 액세스를 제공하는 경우에 특히 유용합니다.

  • 작업 영역 ID 및 기본 키는 에이전트 관리의 작업 영역 리소스에서 찾을 수 있습니다.
  • 그러나 자격 증명 및 기타 중요한 정보가 일반 텍스트로 구성 파일에 저장되어 있으면 보안 모범 사례와 맞지 않으므로 작업 영역 ID작업 영역 기본 키를 구성에 안전하게 포함하려면 Logstash 키 저장소를 사용하는 것이 좋습니다. 지침은 Elastic의 설명서를 참조하세요.

샘플 구성

다음은 몇 가지 옵션을 사용하는 일부 샘플 구성입니다.

  • filebeat 입력 파이프를 사용하는 기본 구성:

      input {
          beats {
              port => "5044"
          }
      }
      filter {
      }
      output {
          microsoft-logstash-output-azure-loganalytics {
            workspace_id => "<your workspace id>"
            workspace_key => "<your workspace key>"
            custom_log_table_name => "tableName"
          }
      }
    
  • tcp 입력 파이프를 사용하는 기본 구성:

      input {
          tcp {
              port => "514"
              type => syslog #optional, will effect log type in table
          }
      }
      filter {
      }
      output {
          microsoft-logstash-output-azure-loganalytics {
            workspace_id => "<your workspace id>"
            workspace_key =>  "<your workspace key>"
            custom_log_table_name => "tableName"
          }
      }
    
  • 고급 구성:

      input {
          tcp {
              port => 514
              type => syslog
          }
      }
      filter {
          grok {
              match => { "message" => "<%{NUMBER:PRI}>1 (?<TIME_TAG>[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2})[^ ]* (?<HOSTNAME>[^ ]*) %{GREEDYDATA:MSG}" }
          }
      }
      output {
          microsoft-logstash-output-azure-loganalytics {
              workspace_id => "<WS_ID>"
              workspace_key => "${WS_KEY}"
              custom_log_table_name => "logstashCustomTable"
              key_names => ['PRI','TIME_TAG','HOSTNAME','MSG']
              plugin_flush_interval => 5
          }
      } 
    
  • 구조화되지 않은 텍스트 데이터에서 사용자 지정 타임스탬프 및 JSON 문자열을 구문 분석하고 추출된 타임스탬프를 사용하여 선택한 필드 집합을 Log Analytics에 로그하는 고급 구성:

      # Example log line below:
      # Mon Nov 07 20:45:08 2022: { "name":"_custom_time_generated", "origin":"test_microsoft", "sender":"test@microsoft.com", "messages":1337}
      # take an input
      input {
          file {
              path => "/var/log/test.log"
          }
      }
      filter {
      # extract the header timestamp and the Json section
          grok {
              match => {
                  "message" => ["^(?<timestamp>.{24}):\s(?<json_data>.*)$"]
              }
          }
      # parse the extracted header as a timestamp
      date {
          id => 'parse_metric_timestamp'
              match => [ 'timestamp', 'EEE MMM dd HH:mm:ss yyyy' ]
              timezone => 'Europe/Rome'
              target => 'custom_time_generated'
          }
      json {
          source => "json_data"
          }
      }
      # output to a file for debugging (optional)
      output {
          file {
              path => "/tmp/test.txt"
              codec => line { format => "custom format: %{message} %{custom_time_generated} %{json_data}"}
          }
      }
      # output to the console output for debugging (optional)
      output {
          stdout { codec => rubydebug }
      }
      # log into Log Analytics
      output {
          microsoft-logstash-output-azure-loganalytics {
              workspace_id => '[REDACTED]'
              workspace_key => '[REDACTED]'
              custom_log_table_name => 'RSyslogMetrics'
              time_generated_field => 'custom_time_generated'
              key_names => ['custom_time_generated','name','origin','sender','messages']
          }
      }
    

    참고 항목

    내부 작업, 구성, 성능 설정에 관해 자세히 알아보려면 출력 플러그 인 GitHub 리포지토리를 참조하세요.

3단계: Logstash 다시 시작

4단계: Microsoft Sentinel에서 수신 로그 보기

  1. 메시지가 출력 플러그 인으로 전송되고 있는지 확인합니다.

  2. Microsoft Sentinel 탐색 메뉴에서 로그를 클릭합니다. Tables 제목 아래에서 사용자 지정 로그 범주를 확장합니다. 구성에서 _CL 접미사를 사용하여 지정한 테이블의 이름을 찾아 클릭합니다.

    Logstash 사용자 지정 로그 스크린샷.

  3. 테이블의 레코드를 보려면 테이블 이름을 스키마로 사용하여 테이블을 쿼리합니다.

    Logstash 사용자 지정 로그 쿼리 스크린샷.

출력 플러그 인 감사 로그 모니터링

Microsoft Sentinel 출력 플러그 인의 연결 및 작업을 모니터링하려면 적절한 Logstash 로그 파일을 사용하도록 설정합니다. 로그 파일 위치는 Logstash Directory Layout(Logstash 디렉터리 레이아웃) 문서를 참조하세요.

이 로그 파일에 데이터가 표시되지 않는 경우 입력 및 필터 플러그 인을 통해 일부 이벤트를 생성하고 로컬로 전송하여 출력 플러그 인에서 데이터를 수신하는지 확인합니다. Microsoft Sentinel은 출력 플러그 인과 관련된 문제만 지원합니다.

다음 단계

이 문서에서는 Logstash를 사용하여 외부 데이터 원본을 Microsoft Sentinel에 연결하는 방법을 배웠습니다. Microsoft Sentinel에 대해 자세히 알아보려면 다음 문서를 참조하세요.