Cloud Logging 데이터 내보내기 시나리오: Splunk

이 시나리오에서는 Cloud Logging에서 선택한 로그를 Splunk Enterprise 또는 Splunk Cloud로 실시간으로 내보내는 방법을 보여줍니다. Splunk를 사용하면 IT 및 보안 모니터링을 위해 온프레미스 및 클라우드 배포로부터 수집한 로그, 이벤트, 측정항목을 검색, 분석, 시각화할 수 있습니다. Cloud Logging의 로그를 통합하여 Splunk와 같은 기존 파트너 서비스를 계속 통합 로그 분석 솔루션으로 사용할 수 있습니다. Splunk 온프레미스를 Google Cloud에 SaaS로로 또는 하이브리드 방식을 통해 배포할 수 있습니다.

이 문서에서는 Google Cloud에서 로그를 내보내거나 가져오는 두 가지 방법으로 Splunk에 로그 내보내기 지원에 대한 개요를 제공합니다. 다음 섹션에서 설명하는 것처럼 대부분의 경우 클라우드 기반의 내보내기 기반 접근 방식이 권장됩니다. 내보내기 기반 로그 내보내기 솔루션을 배포하는 방법에 대한 자세한 내용은 Dataflow를 사용하여 Splunk로 프로덕션에 즉시 사용 가능한 로그 내보내기 배포를 참조하세요.

이 시나리오는 Cloud Logging 내보내기를 위한 설계 패턴 시리즈의 일부입니다.

소개

Splunk에서 지원하는 Google Cloud 데이터를 수집하는 방법은 두 가지가 있습니다.

푸시 기반 방법을 사용하여 Splunk에서 Google Cloud 데이터를 수집하는 것이 좋습니다. 이 방법의 이점은 다음과 같습니다.

  • 관리형 서비스: Dataflow 관리형 서비스는 로그 내보내기와 같은 데이터 처리 태스크를 위해 Google Cloud에서 필요한 리소스를 관리합니다.
  • 분산 워크로드. 병렬 처리를 위해 여러 작업자에 워크로드가 분산됩니다. 따라서 Splunk 헤비 전달자로 데이터를 가져올 때와 달리 단일 장애점이 없습니다.
  • 보안. 데이터가 Splunk HEC에 푸시되므로 서비스 계정 키를 만들고 관리하는 것과 관련된 유지보수 및 보안 부담이 없습니다. 가져오기 기반 방법에서는 여전히 서비스 계정 키를 만들고 관리해야 합니다.
  • 자동 확장. Dataflow 서비스는 들어오는 로그 볼륨 및 백로그의 여러 변형에 따라 작업자 수를 자동으로 확장합니다.
  • 내결함성 일시적인 서버 또는 네트워크 문제가 발생하는 경우 Splunk HEC로 재시도하면 자동으로 처리됩니다. 이 방법은 또한 데이터 손실을 방지하기 위해 전달할 수 없는 로그 메시지에 대해 처리되지 않은 주제(데드 레터 주제라고도 함)를 지원합니다.
  • 단순성. 관리 오버헤드와 하나 이상의 Splunk 헤비 포워더를 실행하는 비용을 피할 수 있습니다.

일부 경우에는 가져오기 기반 방법을 사용하여 Google Cloud 데이터를 Splunk로 수집해야 할 수 있습니다. 이러한 상황은 다음과 같습니다.

  • Splunk 배포가 Splunk HEC 엔드포인트를 제공하지 않습니다.
  • 로그 볼륨이 낮습니다.
  • Cloud Monitoring 측정항목, Cloud Storage 객체, 볼륨이 낮은 로그를 가져올 수 있습니다.
  • 이미 하나 이상의 Splunk 헤비 포워더를 관리하거나 호스팅된 Splunk Cloud용 입력 데이터 관리자를 사용하고 있습니다.

로깅 내보내기 설정

다음 다이어그램은 Pub/Sub를 통해 Splunk로 로깅 내보내기를 사용 설정하는 단계를 보여줍니다.

Pub/Sub로 로깅 내보내기 사용 설정

Pub/Sub 주제 및 구독 설정

내보낸 로그를 수신하고 주제에 구독을 추가하는 Pub/Sub 주제 설정 안내를 따릅니다.

이 문서에서는 다음과 같은 Pub/Sub 주제 및 구독 이름을 사용합니다.

projects/compliance-logging-export/topics/logs-export-topic

projects/compliance-logging-export/topics/logs-export-subscription

모든 서비스에 감사 로깅 사용 설정

관리자 활동 감사 로그는 항상 작성되며 사용 중지될 수 없습니다. 그러나 BigQuery를 제외한 데이터 액세스 감사 로그는 기본적으로 사용 중지되어 있습니다. 모든 감사 로그를 사용 설정하려면 감사 정책 문서에 나와 있는 구성으로 IAM 정책을 업데이트하는 방법 안내를 따르세요. 그 단계는 다음과 같습니다.

  • 현재 IAM 정책을 파일로 다운로드
  • 감사 로그 정책 JSON 또는 YAML 객체를 현재 정책 파일에 추가
  • 변경된 정책 파일로 Google Cloud 프로젝트(또는 조직) 업데이트

다음은 모든 서비스의 모든 감사 로그를 사용 설정하는 JSON 객체의 예시입니다.

"auditConfigs": [
    {
        "service": "allServices",
        "auditLogConfigs": [
            { "logType": "ADMIN_READ" },
            { "logType": "DATA_READ"  },
            { "logType": "DATA_WRITE" },
        ]
    },
]

로깅 내보내기 구성

집계 내보내기 또는 로그 내보내기를 설정한 후에는 로깅 필터를 감사 로그, 가상 머신 관련 로그, 스토리지 로그, 데이터베이스 로그를 내보내도록 세부적으로 조정해야 합니다. 아래의 로깅 필터는 관리자 활동 및 데이터 액세스 감사 로그와 특정 리소스 유형의 로그를 포함합니다.

logName:"/logs/cloudaudit.googleapis.com" OR
resource.type:gce OR
resource.type=gcs_bucket OR
resource.type=bigquery_resource

gcloud 명령줄 도구에서 gcloud logging sinks create 명령어 또는 organizations.sinks.create API 호출을 사용하여 적절한 필터와 싱크를 만듭니다. 다음 예시 gcloud 명령어는 이전에 만든 Pub/Sub 주제 logs-export-topic이 대상으로 gcp_logging_sink_pubsub이라는 싱크를 만듭니다. 이 싱크는 모든 하위 프로젝트를 포함하며 특정 감사 로그를 선택하기 위한 필터링을 지정합니다.

gcloud logging sinks create gcp_logging_sink_pubsub \
    pubsub.googleapis.com/projects/compliance-logging-export/topics/logs-export-topic \
    --log-filter='logName:"/logs/cloudaudit.googleapis.com" OR \
    resource.type:\"gce\" OR \
    resource.type=\"gcs_bucket\" OR   \
    resource.type=\"bigquery_resource\"' \
    --include-children   \
    --organization=your-organization

명령어 결과는 다음과 비슷합니다.

Created [https://logging.googleapis.com/v2/organizations/your-organization/sinks/gcp_logging_export_pubsub_sink].
Please remember to grant `serviceAccount:gcp-logging-export-pubsub-si@logging-oyour-organization.iam.gserviceaccount.com` Pub/Sub Publisher role to the topic.
More information about sinks can be found at /logging/docs/export/configure_export

API 호출에서 반환된 serviceAccount 항목에서 gcp-logging-export-pubsub-si@logging-oyour-organization.iam.gserviceaccount.com이라는 ID가 응답에 포함되어 있습니다. 이 ID는 내보내기를 위해 생성된 Google Cloud 서비스 계정을 나타냅니다. 이 ID에 대상 주제에 대한 게시 액세스 권한을 부여할 때까지 이 싱크로부터의 로그 항목 내보내기는 실패합니다. 자세한 내용은 다음 섹션 또는 리소스에 대한 액세스 권한 부여 문서를 참조하세요.

Pub/Sub 주제에 대한 IAM 정책 권한 설정

서비스 계정 gcp-logging-export-pubsub-si@logging-oyour-organization.iam.gserviceaccount.com을 Pub/Sub 게시자 권한으로 pubsub.googleapis.com/projects/compliance-logging-export/topics/logs-export-topic 주제에 추가하여 해당 주제에 게시할 수 있는 서비스 계정 권한을 부여합니다. 이 권한을 추가할 때까지는 이 싱크 내보내기가 실패합니다.

서비스 계정에 이 권한을 추가하려면 다음 단계를 따르세요.

  1. Cloud Console에서 Cloud Pub/Sub 주제 페이지를 엽니다.

    주제 페이지로 이동

  2. 주제명을 선택합니다.

  3. 정보 패널 표시를 클릭한 다음 Pub/Sub 게시자 권한을 선택합니다.

    IAM 정책 권한 - Pub/Sub 게시자

이 필터를 사용하여 로깅 내보내기를 만들고 나면 구성된 프로젝트의 Pub/Sub 주제에 로그 파일이 채워지기 시작합니다. 이 주제가 Cloud Monitoring의 측정항목 탐색기를 사용하여 메시지를 수신하도록 확정할 수 있습니다. 다음 리소스 유형과 측정항목을 사용하여 짧은 시간 동안에 수행되는 메시지-전송 작업의 수를 관찰하세요. 내보내기를 적절하게 구성했다면 이 스크린샷과 같이 활동이 그래프의 0 위로 표시될 것입니다.

  • 리소스 유형: pubsub_topic
  • 측정항목: pubsub/topic/send_message_operation_count

활동 그래프

Splunk 데이터 수집 설정

옵션 A: Pub/Sub to Splunk Dataflow를 사용하여 로그 스트림

Pub/Sub to Splunk 템플릿을 사용하여 이전에 만든 Pub/Sub 구독에서 메시지를 가져오고, 페이로드를 Splunk HEC 이벤트 형식으로 변환한 후 Splunk HEC로 전달하는 Dataflow 작업을 만듭니다. 따라서 Dataflow 작업의 네트워크에서 액세스할 수 있는 URL과 함께 Splunk HEC 엔드포인트 URL 및 HEC 토큰이 필요합니다. 아직 설정하지 않았다면 Splunk HEC 구성 안내를 따르세요.

Dataflow 서비스는 여러 작업자 간에 워크로드를 동시에 로드하고 배포하는 것 외에도 Pub/Sub의 기존 메시지 백로그 및 현재 작업자의 리소스 사용률을 기반으로 이러한 리소스를 관리하고 작업자 수를 자동 확장합니다.

내결함성 측면에서 다운스트림 엔드포인트가 다운되었거나 네트워크 연결 문제가 있는 경우, Pub/Sub to Splunk Dataflow 템플릿은 Splunk HEC에 대한 지수 백오프를 통해 재시도를 처리합니다. 메시지 처리 오류 발생을 방지하고 데이터가 손실되지 않도록 하기 위해 이러한 메시지는 이 Dataflow 템플릿을 실행하기 전에 생성해야 하는 다른 Pub/Sub 데드 레터 주제로 전달됩니다.

Splunk HEC 엔드포인트가 데이터를 수신하도록 구성된 후 Cloud Console, gcloud 명령줄 도구 또는 Dataflow API를 통해 Pub/Sub to Splunk Dataflow 파이프라인을 실행할 수 있습니다. 원하는 경우 Splunk로 전달하기 전에 자바스크립트 사용자 정의 함수를 적용하여 메시지 페이로드를 변환할 수 있습니다.

다음 예시 gcloud 명령어는 입력 Pub/Sub 구독 logs-export-subscription에서 Splunk Dataflow 템플릿에 대해 Pub/Sub의 최신 버전을 실행합니다. https://splunk-hec-host:8088과 같이 your-splunk-hec-tokenyour-splunk-hec-url을 Splunk HEC 토큰 및 엔드포인트로 바꿉니다.

JOB_NAME=pubsub-to-splunk-$USER-`date +"%Y%m%d-%H%M%S%z"`
gcloud dataflow jobs run $JOB_NAME \
    --gcs-location gs://dataflow-templates/latest/Cloud_PubSub_to_Splunk \
    --max-workers 2 \
    --parameters \
  inputSubscription=projects/compliance-logging-export/subscriptions/logs-export-subscription,\
  token=your-splunk-hec-token,\
  url=your-splunk-hec-url,\
  outputDeadletterTopic=projects/compliance-logging-export/topics/splunk-pubsub-deadletter,\
  batchCount=10,\
  parallelism=8

Cloud Monitoring에서 측정항목 탐색기를 사용하여 Dataflow 파이프라인이 Splunk에 메시지를 성공적으로 전송하고 있는지 확인할 수 있습니다. 다음 리소스 유형과 측정항목을 사용하여 성공적인 발신 이벤트 수와 짧은 시간 동안 실패되었을 수 있는 이벤트 수를 관찰합니다.

  • 리소스 유형: dataflow_job
  • 측정항목 1: custom.googleapis.com/dataflow/outbound-successful-events
  • 측정항목 1: custom.googleapis.com/dataflow/outbound-failed-events

템플릿을 올바르게 구성한 경우 이 스크린샷과 같이 활동이 그래프의 0 위로 표시될 것입니다.

발신 이벤트의 그래프 활동

옵션 B: Google Cloud Platform용 Splunk 부가기능을 사용하여 로그를 가져옵니다.

Google Cloud Platform용 Splunk 부가기능은 Pub/Sub 주제 및 Google Cloud의 서비스 계정을 사용합니다. 서비스 계정은 부가기능이 Pub/Sub 구독을 설정하고 로깅 내보내기 주제에서 메시지를 수집하는 데 사용하는 비공개 키를 생성하는 데 사용됩니다. 서비스 계정이 구독을 만들고 Pub/Sub 프로젝트에서 구독을 포함하는 구성요소를 나열하도록 허용하려면 적절한 IAM 권한이 필요합니다.

Google Cloud Platform용 Splunk 부가기능 설정 방법 안내를 따르세요. 부가기능 안내에 따라 생성된 서비스 계정에 대해 roles/pubsub.viewerroles/pubsub.subscriber Pub/Sub IAM 권한을 부여합니다.

부가기능을 구성하면 로깅 내보내기의 Pub/Sub 메시지가 Splunk에 표시됩니다.

Cloud Monitoring의 측정항목 탐색기를 사용하여, 부가기능이 사용하는 구독이 메시지를 가져오고 있는지 확인할 수 있습니다. 다음 리소스 유형과 측정항목을 사용하여 짧은 시간 동안에 수행되는 메시지-가져오기 작업의 수를 관찰하세요.

  • 리소스 유형: pubsub_subscription
  • 측정항목: pubsub/subscription/pull_message_operation_count

내보내기를 적절하게 구성했다면 이 스크린샷과 같이 활동이 그래프의 0 위로 표시될 것입니다.

가져오기 작업의 그래프 활동

내보낸 로그 사용

내보내진 로그가 Splunk에 내부 데이터화되고 나면, Splunk를 다른 데이터 소스처럼 사용하여 다음과 같은 작업을 수행할 수 있습니다.

  • 로그를 검색합니다.
  • 복잡한 여러 이벤트의 상관관계를 지정합니다.
  • 대시보드를 사용하여 결과를 시각화합니다.

다음 단계