Splunk Connect를 사용하여 Anthos에서 로그 수집

이 가이드에서는 Kubernetes용 Splunk Connect를 설치하고 사용하여 Google Cloud의 Anthos에서 실행 중인 Kubernetes 애플리케이션에서 로그를 수집하는 방법을 설명합니다. Anthos를 사용하면 기존 온프레미스 장비 또는 퍼블릭 클라우드에서 Kubernetes 및 클라우드 기술을 활용할 수 있습니다. Google에서 검증한 빠르고 간단한 관리형 설치 및 업그레이드로 Google Kubernetes Engine(GKE) 환경을 조성하세요. Splunk Connect는 다음 다이어그램과 같이 온프레미스에서 로그의 색인 생성, 저장, 분석할 수 있습니다.

Splunk를 사용하는 VMware에 배포된 Anthos 로깅을 위한 아키텍처

이 가이드는 Anthos의 로그 및 측정항목을 Splunk로 통합하도록 설정하는 관리자를 대상으로 합니다. 이 가이드에서는 Splunk Enterprise용 HTTP Event Collector를 구성하고, Anthos 클러스터에 Kubernetes용 Splunk Connect를 배포하고, 샘플 애플리케이션을 배포합니다.

이 가이드에서는 사용자가 Kubernetes에 익숙하고 다음과 같은 기술 요구사항을 갖춘 것으로 가정합니다.

  • Anthos 고객이거나 Anthos 무료 체험판 프로그램에 참여 중입니다.
  • 이전에 구성한 Anthos 설치에서 실행 중인 사용자 클러스터가 있습니다.
  • 현재 조직의 온프레미스에서 Splunk Enterprise(7.0 이상)를 실행 중입니다.

Google Cloud 또는 다른 퍼블릭 클라우드에서 Anthos를 실행 중이고 온프레미스에서 실행되는 Splunk 인스턴스에 연결하려는 경우, 다음 다이어그램과 같이 두 환경 간에 하이브리드 연결을 배치해야 합니다.

Google Cloud 또는 Splunk를 사용하는 다른 퍼블릭 클라우드의 Anthos 로깅을 위한 아키텍처

목표

  • Kubernetes용 Splunk Connect를 설치하고 사용하여 Google Cloud의 Anthos에서 실행 중인 Kubernetes 애플리케이션에서 로그를 수집합니다.
  • Splunk Enterprise용 HTTP Event Collector를 구성합니다.
  • Anthos 클러스터에 Kubernetes용 Splunk Connect를 배포합니다.
  • 샘플 애플리케이션을 배포합니다.

비용

이 가이드에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.

프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요. Google Cloud를 처음 사용하는 사용자는 무료 체험판을 사용할 수 있습니다.

시작하기 전에

  1. Google 계정으로 로그인합니다.

    아직 계정이 없으면 새 계정을 등록하세요.

  2. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기 페이지로 이동

  3. Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.

  4. Splunk를 배포하고 구성했는지 확인합니다. Splunk 시작하기를 참조하여 Splunk Enterprise를 배포하세요.
  5. Google Cloud Console에 Anthos 사용자 클러스터를 배포하고 등록했는지 확인합니다. 이 가이드에서는 클러스터에 노드가 3개 있다고 가정하지만, 필수 사항은 아닙니다. 이 Anthos 구성요소를 배포하려면 Anthos 설치 안내를 따르세요.
  6. Anthos 클러스터와 Splunk 간에 네트워크 연결이 있는지 확인합니다.

Splunk Enterprise 구성

색인 설정

Splunk Connect에서 데이터를 내보내려면 최소 2개의 색인이 필요합니다(하나는 이벤트용, 다른 하나는 측정항목용). 이 가이드에서는 객체용으로 별도의 이벤트 색인도 만들기 때문에 총 3개의 색인을 사용합니다.

  1. Splunk에 관리자로 로그인합니다.
  2. Settings(설정) > Indexes(색인)로 이동합니다.
  3. New Index(새 색인)을 클릭합니다.
    1. Index Name(색인 이름) 텍스트 상자에 events를 입력합니다.
    2. Index Data Type(색인 데이터 유형)Events(이벤트)로 설정합니다.
  4. Save(저장)를 클릭합니다.
  5. New Index(새 색인)을 클릭합니다.
    1. Index Name(색인 이름) 텍스트 상자에 objects를 입력합니다.
    2. Index Data Type(색인 데이터 유형)Events(이벤트)로 설정합니다.
  6. Save(저장)를 클릭합니다.
  7. New Index(새 색인)을 클릭합니다.
    1. Index Name(색인 이름) 텍스트 상자에 metrics를 입력합니다.
    2. Index Data Type(색인 데이터 유형)Metrics(측정항목)로 설정합니다.
  8. Save(저장)를 클릭합니다.

HTTP Event Collector(HEC) 설정

Anthos에서 Splunk로 로그 및 측정항목을 내보내려면 Splunk HTTP Event Collector(HEC)를 설정해야 합니다.

  1. Settings(설정) > Data inputs(데이터 입력)로 이동합니다.
  2. Global Settings(전체 설정)을 클릭합니다.
    1. All Tokens(모든 토큰)Enabled(사용 설정됨)로 설정합니다.
    2. Enable SSL(SSL 사용 설정)을 선택합니다.
    3. Save(저장)를 클릭합니다.
  3. HTTP Event Collector 대화상자에서 +Add New(새로 추가)를 선택합니다.
  4. Name(이름) 텍스트 상자에 anthos-hec를 입력하고 Next(다음)를 선택합니다.
  5. Input Settings(입력 설정) 대화상자에서 다음을 수행합니다.
    1. App Context(앱 컨텍스트)Search & Reporting (search)(검색 및 보고(검색))으로 설정합니다.
    2. Select Allowed Indexes(허용된 색인 선택) 메뉴에서 events(이벤트), metrics(측정항목), objects(객체)를 선택합니다.
    3. 다음을 클릭합니다.
  6. Review(검토) 페이지가 나타납니다. 페이지가 다음과 같이 표시되는지 확인합니다.

    HEC Collector의 Review(검토) 페이지

  7. Submit(제출)을 클릭하여 HEC를 만듭니다. 나중에 사용할 수 있도록 결과 토큰 값을 복사합니다.

  8. 연결을 확인하려면 Anthos 클러스터의 노드에 로그인하고 Splunk에 테스트 이벤트를 보냅니다. 다음 코드와 같이 hec-token을 이전에 만든 토큰 값으로 바꾸고 splunk-ip를 Splunk Enterprise 서버의 IP로 바꿉니다.

    curl -k http://splunk-ip:8088/services/collector/event \
    -H "Authorization: Splunk hec-token" -d '{"event": "hello splunk"}'
    

    요청이 성공하면 서버는 다음과 같은 응답을 반환합니다.

    {"text":"Success","code":0}
    

Kubernetes용 Splunk Connect 배포

Kubernetes용 Splunk Connect를 배포하려면 Splunk 서비스 계정을 만들고 Helm을 설치하고 Splunk Connect를 배포해야 합니다.

Anthos 사용자 클러스터에 관리자로 로그인

  • Anthos 관리자 워크스테이션의 셸에서 kubectl 도구가 기본적으로 Anthos 클러스터를 가리키도록 구성되었는지 확인합니다.
  • kubectl config current-context
  • 위의 명령어는 Anthos 클러스터를 반환합니다. Anthos 클러스터가 반환되지 않으면 기본 kubeconfig 파일을 로컬 구성 파일에 연결하고 다시 시도합니다.
  • mkdir .kube
    ln -s /kubeconfig ~/.kube/config
    

Helm 설치

Helm 패키지 관리자를 사용하여 Splunk Connect를 설치합니다.

  1. Helm 클라이언트를 설치하고 Helm이 경로에 있는지 확인하세요.

    helm version
    

    출력은 다음과 비슷합니다. 단, 버전과 커밋 번호는 다를 수 있습니다.

    version.BuildInfo{Version:"v3.2.3", GitCommit:"8f832046e258e2cb800894579b1b3b50c2d83492", GitTreeState:"clean", GoVersion:"go1.13.12"}
    

Splunk Connect 배포

  1. Splunk 네임스페이스를 만듭니다. 이 네임스페이스는 Splunk Connect를 나머지 클러스터와 격리하는 데 사용됩니다.

    kubectl create namespace splunk
    
  1. 로그, 객체, 측정항목을 읽기 위한 Splunk Connect 구성을 포함하는 YAML 파일을 만듭니다. hec-token을 앞에서 만든 토큰 값으로 바꾸고 splunk-ip를 Splunk Enterprise 서버의 IP로 바꿉니다.

    cat <<EOF >values.yaml
    global:
      splunk:
        hec:
          protocol: https
          insecureSSL: true
          token: hec-token
          host: splunk-ip
          port: 8088
          indexName: events
    
    splunk-kubernetes-logging:
      journalLogPath: /run/log/journal
      splunk:
        hec:
          indexName: events
    
    splunk-kubernetes-objects:
      objects:
        core:
          v1:
            - name: pods
            - name: namespaces
            - name: nodes
            - name: services
            - name: config_maps
            - name: persistent_volumes
            - name: service_accounts
            - name: persistent_volume_claims
            - name: resource_quotas
            - name: component_statuses
            - name: events
              mode: watch
        apps:
          v1:
            - name: deployments
            - name: daemon_sets
            - name: replica_sets
            - name: stateful_sets
      splunk:
        hec:
          indexName: objects
    
    splunk-kubernetes-metrics:
      kubernetes:
        insecureSSL: true
      splunk:
        hec:
          indexName: metrics
    EOF
    
  2. splunk 네임스페이스에 Kubernetes용 Splunk Connect를 설치합니다.

    helm install anthos-splunk -f values.yaml --namespace splunk \
    https://github.com/splunk/splunk-connect-for-kubernetes/releases/downlo
    ad/1.4.1/splunk-connect-for-kubernetes-1.4.1.tgz
    
  3. Splunk Connect가 성공적으로 시작되었는지 확인합니다.

    kubectl -n splunk get pods
    

    다음과 같이 로깅 pod 3개, 측정항목 pod 3개, 측정항목 애그리게이터 pod 1개, 객체 pod 1개가 실행됩니다.

    NAME                                                          READY   STATUS    RESTARTS   AGE
    anthos-splunk-splunk-kubernetes-logging-46srr                  1/1     Running   0          2m
    anthos-splunk-splunk-kubernetes-logging-gkgkm                  1/1     Running   0          2m
    anthos-splunk-splunk-kubernetes-logging-r52nz                  1/1     Running   0          2m
    anthos-splunk-splunk-kubernetes-metrics-agg-595946f874-vjzmb   1/1     Running   0          2m
    anthos-splunk-splunk-kubernetes-metrics-gbkb8                  1/1     Running   0          2m
    anthos-splunk-splunk-kubernetes-metrics-k6ksn                  1/1     Running   0          2m
    anthos-splunk-splunk-kubernetes-metrics-vg5wn                  1/1     Running   0          2m
    anthos-splunk-splunk-kubernetes-objects-7c5cd8cf7d-csvw6       1/1     Running   0          2m
    
  4. Splunk UI에서 Settings(설정) > Indexes(색인)로 이동합니다. 연결에 성공하면 Latest Event(최신 이벤트) 열에 events, metrics, objects 인덱스의 최근 시간이 표시됩니다.

문제 해결 및 변경

  • pod가 시작되지 않거나 데이터가 전송되지 않으면 pod 로그에서 오류를 검사합니다.

    kubectl -n splunk logs pod-name
    
  • config.yaml 파일을 업데이트하고 다시 시도해야 하는 경우 다음 명령어를 실행하여 Splunk Connect를 다시 배포하고 pod를 다시 만듭니다.

    helm upgrade --namespace splunk -f values.yaml anthos-splunk \
    https://github.com/splunk/splunk-connect-for-kubernetes/releases/downlo
    ad/1.4.1/splunk-connect-for-kubernetes-1.4.1.tgz
    kubectl delete pods -n splunk --all
    

샘플 앱 배포 및 테스트

다음으로 샘플 앱을 배포하고 Splunk에서 로그, 메타데이터, 측정항목을 확인합니다.

샘플 앱 배포

  1. Anthos에 간단한 'Hello World' 앱을 배포합니다.

    kubectl create deployment hello-kubernetes --image=paulbouwer/hello-kubernetes:1.5
    
  2. 앱을 로컬에서 액세스할 수 있도록 포트 8080에 노출시키고 포트 전달합니다.

    kubectl expose deployment hello-kubernetes --port=8080 --type=ClusterIP
    kubectl port-forward deployment/hello-kubernetes 8080:8080
    
  3. curl 명령줄 도구를 사용하여 앱을 테스트합니다.

    curl http://localhost:8080/
    

    요청이 성공하면 서버는 다음과 같은 응답을 반환합니다.

      <!DOCTYPE html>
      <html>
      <head>
          <title>Hello Kubernetes!</title>
      [...]
    

앱 로그 보기

  • Splunk 웹 UI에서 Search(검색)로 이동하고 events 색인에서 샘플 앱의 로그를 검색합니다.

    index=events sourcetype="kube:container:hello-kubernetes"
    

    이 검색은 앱의 로그 이벤트를 시간 역순(최신 데이터순)으로 반환합니다. 즉, 다음 스크린샷과 같이 앱이 리슨 중이고 서비스를 사용할 준비가 되었음을 나타내는 항목 및 테스트 요청부터 반환됩니다.

    로그 이벤트 항목

앱 메타데이터 보기

  • Search(검색) 창에서 샘플 앱의 메타데이터 객체를 검색합니다.

    index="objects" "hello-kubernetes"
    

    이 검색은 다양한 Kubernetes 객체의 메타데이터 스냅샷 목록을 반환합니다. 예를 들어 sourcetype="kube:objects:deployments"를 선택하고 metadatastatus를 확장하면 다음 스크린샷과 같이 특정 시점에 사용 가능한 복제본 수를 포함한 hello-kubernetes 배포의 상태를 확인할 수 있습니다.

    Kubernetes 객체의 메타데이터 스냅샷

    기본적으로 메타데이터는 15분마다 폴링됩니다. 이 간격은 values.yaml 파일의 간격 설정에서 조정할 수 있습니다.

    메타데이터에는 Kubernetes API의 이벤트 스트림도 포함됩니다. 다음 검색은 샘플 앱의 이벤트를 모두 반환합니다.

    index="objects" sourcetype="kube:objects:events*" "hello-kubernetes"
    

시스템 및 앱 측정항목 보기

  1. Splunk UI에서 Metrics(측정항목)으로 이동하여 검색창에 cpu를 입력합니다.

  2. 드롭다운 메뉴에서 Metrics(측정항목) > kube > namespace(네임스페이스) > cpu > usage(사용량)을 선택합니다.

  3. 오른쪽의 Analysis(분석) 창에서 Split by(분할 기준)을 선택하고 name(이름)을 선택합니다. 다음 스크린샷과 같이 네임스페이스를 기준으로 분류된 CPU 사용량 그래프가 표시됩니다.

    CPU 사용량 그래프

Splunk App for Infrastructure 배포

Splunk App for Infrastructure(SAI)는 Linux 서버, Microsoft Windows 서버, Kubernetes 클러스터, OpenShift 컨테이너, Docker 컨테이너, Amazon EC2/ELB/EBS 인스턴스의 성능 통계를 제공합니다. SAI는 성능 모니터링을 위한 측정항목을 사용하고, 서버 인프라를 자세히 이해하고 문제를 해결하기 위해 로그 데이터를 활용합니다.

Splunk App for Infrastructure에서 제공하는 기능과 완벽하게 호환되도록 설치를 간소화하려면 Splunk 환경에 Splunk Add-on for Infrastructure와 Splunk App for Infrastructure를 모두 설치하세요. 그런 다음 설치 스크립트 생성 단계를 따라 Splunk에 대한 데이터 전송을 구성하는 설치 스크립트를 생성합니다.

삭제

이 가이드에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.

Cloud 프로젝트 삭제

비용이 청구되지 않도록 하는 가장 쉬운 방법은 가이드에서 만든 Cloud 프로젝트를 삭제하는 것입니다.

  1. Cloud Console에서 리소스 관리 페이지로 이동합니다.

    리소스 관리로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.

리소스 삭제

이 가이드를 완료한 후에는 만든 리소스를 삭제하기 위해 다음 명령어를 실행하세요.

   helm delete --namespace splunk anthos-splunk
   kubectl delete deployment hello-kubernetes

다음 단계