Cloud Logging 내보내기 시나리오: Elasticsearch

이 시나리오에서는 Logging에서 선택한 로그를 Elasticsearch 클러스터로 내보내는 방법을 보여줍니다. Elasticsearch는 로그, 측정항목, 기타 원격 분석과 같은 구조화되지 않은 데이터를 수집하고 색인을 생성 및 분석하는 오픈소스 문서 데이터베이스입니다. Logging으로 수집한 로그를 Elasticsearch에 있는 로그와 통합하면 통합 로그 분석 솔루션이 제공됩니다.

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

소개

Elastic Stack에는 Elasticsearch 클러스터로 데이터를 수집하기 위한 여러 가지 솔루션이 있습니다. 그 중에서도 LogstashBeats는 데이터 모음, 변환, 수집에 사용되는 핵심 제품입니다. 데이터 볼륨, 수집 속도, 지연 시간 요구사항에 따라 Logstash와 Beats 둘 중에서 선택하면 됩니다. Logstash는 Logging에서 내보낸 로그로 작업할 때 가장 유연한 옵션이므로 이 솔루션은 Elastic Stack의 Logstash 구성요소에 중점을 둡니다.

Logstash를 사용하여 여러 소스 및 대상에서 로그를 수집하고 변환하고 내보낼 수 있습니다. Logstash는 로그 볼륨이 큰 곳에서 사용할 때 가장 효과적입니다. Pub/Sub 입력 플러그인Cloud Storage 입력 플러그인을 사용하여 Logstash와 Elasticsearch를 통합할 수 있습니다.

Beats는 Elasticsearch로 데이터를 보내는 가벼운 전송기를 위한 오픈소스 플랫폼입니다. pubsubbeat 전송기를 사용하여 Pub/Sub 메시지를 Elasticsearch로 수집할 수 있습니다. gcsbeat 전송기가 있지만 이는 버킷 루트 수준에서의 가벼운 파일 전송에 맞게 설계되었으므로 Logging에서 내보낸 로그를 가져오는 용도로는 그다지 적합하지 않습니다.

다음과 같은 상황에서 Beats를 사용합니다.

  • 로그 볼륨이 낮습니다(단일 머신에서 처리 가능).
  • Logstash를 실행에 따르는 오버헤드를 원하지 않습니다.
  • Elastic 수집 파이프라인으로 로그 보강 요구사항을 충족할 수 있습니다.

다음과 같은 상황에서 Logstash를 사용합니다.

  • 로그 볼륨이 높습니다.
  • 로그를 Elastic 수집 파이프라인 기능 이상으로 보강해야 합니다.
  • 로그를 Elasticsearch 이외의 시스템으로 내보낼 수 있어야 합니다.
높은 볼륨 또는 높은 터치 낮은 볼륨 및 낮은 터치
실시간 logstash-input-google_pubsub pubsubbeat
최종 logstash-input-google_cloud_storage gcsbeat

다음 다이어그램은 Logstash를 사용하여 Elasticsearch로의 일괄 및 실시간 내보내기를 위한 아키텍처를 보여줍니다.

Logstash를 사용한 Elasticsearch로의 일괄 및 실시간 내보내기를 위한 아키텍처

실시간 로깅 내보내기 설정

이 섹션에서는 Pub/Sub를 사용하여 Logging에서 Logstash로 실시간 로그 내보내기를 위한 파이프라인을 만듭니다.

Pub/Sub 주제 설정

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

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 예시 명령어는 조직에 gcp_logging_sink_pubsub라는 싱크를 만듭니다. 이 싱크에는 모든 하위 프로젝트가 포함되며 특정 감사 로그를 선택하는 필터링을 지정합니다.

ORG_ID=your-org-id
PROJECT_ID=$(gcloud config get-value project)
gcloud logging sinks create gcp_logging_sink_pubsub \
    pubsub.googleapis.com/projects/${PROJECT_ID}/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=${ORG_ID}

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

Created [https://logging.googleapis.com/v2/organizations/your-org-id/sinks/gcp_logging_export_pubsub_sink].
Please remember to grant `serviceAccount:gcp-logging-export-pubsub-si@logging-oyour-org-id.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-org-id.iam.gserviceaccount.com이라는 ID가 응답에 포함되어 있습니다. 이 ID는 내보내기를 위해 생성된 Google Cloud 서비스 계정을 나타냅니다. 이 ID에 대상 주제에 대한 게시 액세스 권한을 부여할 때까지 이 싱크로부터의 로그 항목 내보내기는 실패합니다. 자세한 내용은 다음 섹션 또는 리소스에 대한 액세스 권한 부여 문서를 참조하세요.

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

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

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

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

    주제 페이지로 이동

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

  3. 정보 패널 표시를 클릭한 다음 권한을 구성합니다. Pub/Sub 게시자 권한이 선택되어 있는지 확인합니다.

    권한을 설정합니다.

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

  • 리소스 유형: pubsub_topic
  • 측정항목: pubsub.googleapis.com/topic/send_message_operation_count
  • 필터: topic_id="logs-export-topic"

측정항목 탐색기 그래프의 활동

로깅 내보내기 설정

Logging에는 한정된 로그 보관 기간이 있으므로 Cloud Storage로 로깅 내보내기를 만드는 것이 좋습니다. 내보낸 로그를 Logstash를 사용하여 수집하면 기본 보관 기간을 벗어난 로그를 검색할 수 있으며 필요한 경우 Elasticsearch 데이터베이스를 다시 채우는 데도 유용합니다.

Logstash 구성

  1. 최신 logstash 출시 버전을 다운로드합니다.
  2. Cloud Storage AdminPub/Sub Subscriber 역할로 gcsbeat에 대한 IAM 서비스 계정JSON 계정 키를 만듭니다.
  3. Logstash 설치 디렉터리에서 다음 명령어를 실행하여 Logstash에 Cloud Storage 및 Pub/Sub 입력 플러그인을 설치합니다.

    ./bin/logstash-plugin install \
        logstash-input-google_cloud_storage \
        logstash-input-exec \
        logstash-input-google_pubsub
    

일괄 수집 파이프라인 만들기

  • 다음과 같이 Cloud Storage의 logstash 구성 파일을 만듭니다. 여기서 my-cloud-logs를 버킷의 ID로 바꿉니다.

    input {
      google_cloud_storage {
        type => "gcs"
        interval => 60
        bucket_id => "my-cloud-logs"
        json_key_file => "logstash-sa.json"
        file_matches => ".*\.json"
        codec => "json"
      }
    }
    
    output {
      elasticsearch {
        document_id => "%{[@metadata][gcs][line_id]}"
      }
    }
    

    전체 옵션 목록은 google_cloud_storage 플러그인 구성 문서를 참조하세요.

Logstash에서 처리한 Cloud Storage의 객체는 메타데이터 항목 x-goog-meta-ls-gcs-input:processed를 사용하여 표시됩니다. 입력 플러그인은 이 메타데이터 항목이 있는 모든 객체를 건너뜁니다. 데이터를 재처리하려면 메타데이터 라벨을 수동으로 삭제해야 합니다.

실시간 파이프라인 만들기

  • 다음 형식으로 Pub/Sub 소스에 대한 logstash 구성 파일을 만듭니다.

    input {
      google_pubsub {
          type => "pubsub"
          project_id => "my-project-id"
          topic => "logs-export-topic"
          subscription => "logstash"
          json_key_file => "logstash-sa.json"
      }
    }
    
    output {
      elasticsearch {
        document_id => "%{[@metadata][pubsub_message][messageId]}"
      }
    }
    

구성 항목의 전체 목록은 플러그인 문서를 참조하세요.

멱등성 삽입

Elasticsearch는 문서의 _id 필드를 고유 식별자로 사용합니다. Logstash에서는 [@metadata] 항목과 다른 메시지 필드를 사용하여 Logging의 로그 메시지 유형에 기반한 고유한 문서 ID를 만들 수 있습니다.

google_cloud_storage 플러그인 메타데이터 문서에는 사용 가능한 Logstash 메타데이터 필드의 목록이 있습니다. [@metadata][gcs][line_id] 필드는 멱등성이 있는 문서 ID를 생성하는 용도로 명시적으로 삽입됩니다.

google_pubsub plugin에는 메타데이터 필드 목록도 있으며 [@metadata][pubsub_message][messageId]는 일반적으로 중복 제거에 사용됩니다.

내보낸 로그 사용

내보낸 로그가 Elasticsearch에 수집되고 실시간 Beat가 서비스로 배포된 후 Elasticsearch 및 Elastic Stack의 제품을 사용하여 다음 작업을 수행할 수 있습니다.

  • 로그를 검색합니다.
  • 복잡한 여러 이벤트의 상관관계를 지정합니다.
  • 자동화된 알림을 만듭니다.
  • 데이터의 관계를 그래프로 탐색합니다.
  • Kibana 대시보드를 사용하여 결과를 시각화합니다.

다음 단계