중앙 로그 서버 설정

이 섹션의 안내에 따라 중앙 로그 서버를 설정하세요.

스토리지 버킷 설정

  1. 어플라이언스 로그를 저장할 새 스토리지 버킷을 만듭니다.

    gcloud storage buckets create gs://BUCKET_NAME
    
  2. 아직 사용 설정되지 않은 경우 IAM API를 사용 설정합니다.

    gcloud services enable iam.googleapis.com
    
  3. 버킷에 액세스할 서비스 계정을 만듭니다.

    gcloud iam service-accounts create GSA_NAME --description="DESCRIPTION" --display-name="DISPLAY_NAME"
    

GDC에서 스토리지 버킷으로 데이터 전송

데이터 전송을 사용하여 데이터를 스토리지 버킷으로 내보냅니다.

GDC 에어갭 어플라이언스에서 로컬 컴퓨터로 Grafana 및 Loki Helm 차트 복사

GDC 오프라인 어플라이언스 부트스트래퍼에서 Grafana 및 Loki용 Helm 차트는 RELEASE_DIR/appliance/observability에 있습니다. 이 설정을 실행하는 로컬 컴퓨터에 복사합니다.

    scp
    USERNAME@BOOTSTRAPPER:/RELEASE_DIR/appliance/observability/grafana.tgz WORKING_DIR/grafana.tgz

    scp
    USERNAME@BOOTSTRAPPER:/RELEASE_DIR/appliance/observability/loki.tgz WORKING_DIR/loki.tgz

GKE 클러스터에서 Grafana 및 Loki 설정

  1. 새 GKE 클러스터를 만듭니다(https://cloud.google.com/sdk/gcloud/reference/container/clusters/create). 이 설정에 기존 클러스터를 사용하는 경우 다음 단계로 진행합니다.

  2. 클러스터와 상호작용하도록 kubectl을 설치하고 구성합니다. https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl

  3. 클러스터에서 워크로드 아이덴티티를 사용 설정합니다. https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity#enable-existing-cluster

  4. https://cloud.google.com/kubernetes-engine/docs/how-to/persistent-volumes/cloud-storage-fuse-csi-driver#enable에 따라 GKE 클러스터에서 Cloud Storage FUSE CSI 드라이버를 사용 설정합니다.

  5. https://cloud.google.com/kubernetes-engine/docs/how-to/persistent-volumes/cloud-storage-fuse-csi-driver#authentication에 따라 GKE용 GKE 워크로드 아이덴티티 제휴를 사용하여 Cloud Storage 버킷에 대한 액세스를 구성합니다. 5단계에서 IAM 정책 바인딩을 설정할 때 roles/storage.objectAdmin를 선택합니다.

  6. https://cloud.google.com/artifact-registry/docs/repositories/remote-repo에 따라 Grafana 및 Loki Helm 차트에서 사용하는 컨테이너 이미지가 포함된 외부 레지스트리인 Dockerhub의 프록시 역할을 하는 Artifact Registry 원격 저장소를 만듭니다.

  7. Grafana 및 Loki Helm 차트를 다운로드하고 압축을 풉니다.

     tar -xzf WORKING_DIR/grafana.tgz
     tar -xzf WORKING_DIR/loki.tgz
    
  8. WORKING_DIR/loki/values.yaml.in에서 Loki Helm 차트 값을 설정하고 클러스터에 Helm 차트를 설치합니다.

    helm install LOKI_RELEASE_NAME WORKING_DIR/loki --namespace NAMESPACE
    
  9. WORKING_DIR/grafana/values.yaml.in에서 Grafana Helm 차트 값을 설정하고 클러스터에 Helm 차트를 설치합니다.

    helm install GRAFANA_RELEASE_NAME WORKING_DIR/grafana --namespace NAMESPACE
    

    예를 들면 다음과 같습니다.

      app:
        # name is the name that will used for creating kubernetes resources
        # like deployment, service, etc. associated with this grafana app.
        name: grafana
        # artifactRegistryRepository is the full name of the artifact registry remote
        # repository that proxies dockerhub.
        artifactRegistryRepository: us-east1-docker.pkg.dev/my-gcp-project/dockerhub
        loki:
        # serviceName is the name of the kubernetes service that exposes
        # the loki server.
        serviceName: loki
        # serviceNamespace is the namespace in which the loki service is present
        serviceNamespace: my-loki-namespace
        # tenantID is the tenant ID of the logs.
        tenantID: infra-obs 
    

Grafana UI 액세스

컴퓨터와 Kubernetes 클러스터의 Grafana 서비스 간에 포트 전달을 설정하여 Grafana UI에 액세스합니다.

kubectl port-forward service/GRAFANA_APP_NAME
-n NAMESPACE 3000:3000

위 명령어를 실행한 후 Grafana UI에 액세스할 수 있습니다. 조직의 여러 사용자에게 Grafana UI를 노출해야 하는 경우 GKE 인그레스를 설정하는 것이 좋습니다(https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer).

외부 저장소로 로그 내보내기

기본적으로 클러스터에서 실행되는 Loki 인스턴스는 모든 로그를 집계하고 저장합니다. 하지만 루트 관리자 클러스터의 Loki 인스턴스 외에 다른 대상으로 로그를 내보내도록 추가 Fluent Bit 출력을 구성할 수 있습니다.

이 섹션에는 로그를 외부 스토리지로 라우팅하고 내보내기 위해 싱크를 추가로 구성하는 단계가 포함되어 있습니다. 사용 사례에 따라 다음 로그 유형에 관한 안내를 제공합니다.

지원되는 Fluent Bit 대상의 전체 목록은 https://docs.fluentbit.io/manual/pipeline/outputs를 참고하세요.

운영 로그 내보내기

다음 단계에 따라 운영 로그를 외부 저장소로 내보내세요.

  1. logmon: system_logs 라벨을 사용하여 obs-system 네임스페이스에 ConfigMap 객체를 만듭니다. data 섹션의 output.conf 파일에 추가 출력 구성을 추가합니다. Fluent Bit 출력 플러그인과 동일한 구문을 사용해야 합니다.

    ConfigMap 객체를 만들 때는 다음 요구사항을 충족해야 합니다.

    • ConfigMap 객체에 할당한 이름을 유지하세요. 나중에 지정할 값과 일치해야 합니다.
    • 객체의 출력 블록 섹션에 맞춤설정된 Fluent Bit 출력 플러그인 구성을 추가합니다.

    다음 YAML 파일은 이전 요구사항을 설명하기 위해 ConfigMap 객체의 템플릿을 보여줍니다.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      # The name should match the configmap name specified in step 3.
      name: <descriptive configmap name>
      namespace: obs-system
      labels:
        # This label is required and must be system_logs for system logs
        logmon: system_logs
    data:
      # The file name must be output.conf
    output.conf: 
      # ===== Output block =====
        ### Add customized fluent-bit output plugin configurations here
    
  2. 명령줄 편집기에서 ObservabilityPipeline 커스텀 리소스를 엽니다.

    kubectl --kubeconfig=ROOT_ADMIN_CLUSTER_KUBECONFIG -n obs-system edit observabilitypipelines.observability.gdc.goog default
    

    ORG_ADMIN_CLUSTER_KUBECONFIG를 관리 클러스터에 대한 kubeconfig 파일의 경로로 바꿉니다.

  3. ObservabilityPipeline 커스텀 리소스에서 additionalSinks 필드에 fluentbitConfigMaps 배열을 사양 섹션의 로깅 필드에 추가합니다. fluentbitConfigMaps 배열의 항목은 1단계에서 ConfigMap 객체에 이전에 할당한 이름과 일치해야 합니다.

    apiVersion: observability.gdc.goog/v1alpha1
    kind: ObservabilityPipeline
    metadata:
      # Don't change anything in this section
      ...
    spec:
      logging:
        # This section is for system logs and only needs to be edited if system logs have a custom output. 
        additionalSink:
          fluentbitConfigMaps:
          # The name should match the configmap name created in step 1.
          - "<system logs output configmap name>"
          # Scheme: []v1.VolumeMount. Add volumeMounts if necessary
          volumeMounts:
          - ...
          - ...
          # Scheme: []v1.Volume. Add volumes if necessary
          volumes:
          - ...
          - ...
    
  4. 변경사항을 ObservabilityPipeline 커스텀 리소스에 적용하려면 명령줄 편집기를 저장하고 종료합니다.

이 단계를 완료하면 변경사항의 출시가 시작되고 anthos-log-forwarder DaemonSet가 다시 시작됩니다.

감사 로그 내보내기

다음 단계를 따라 감사 로그를 외부 저장소로 내보내세요.

  1. logmon: audit_logs 라벨을 사용하여 obs-system 네임스페이스에 ConfigMap 객체를 만듭니다. data 섹션의 output.conf 파일에 추가 출력 구성을 추가합니다. Fluent Bit 출력 플러그인과 동일한 구문을 사용해야 합니다.

    ConfigMap 객체를 만들 때는 다음 요구사항을 충족해야 합니다.

    • ConfigMap 객체에 할당한 이름을 유지하세요. 나중에 지정할 값과 일치해야 합니다.
    • 객체의 출력 블록 섹션에 맞춤설정된 Fluent Bit 출력 플러그인 구성을 추가합니다.

    다음 YAML 파일은 이전 요구사항을 설명하기 위해 ConfigMap 객체의 템플릿을 보여줍니다.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      # The name should match the configmap name specified in step 3.
      name: <descriptive configmap name>
      namespace: obs-system
      labels:
        # This label is required and must be audit_logs for audit logs
        logmon: audit_logs
    data:
      # The file name must be output.conf
      output.conf: |
        # ===== Output block =====
        ### Add a customized fluent-bit output plugin configuration here
    
    
  2. 명령줄 편집기에서 ObservabilityPipeline 커스텀 리소스를 엽니다.

    kubectl --kubeconfig=ORG_ADMIN_CLUSTER_KUBECONFIG -n obs-system edit observabilitypipelines.observability.gdc.goog default
    

    ORG_ADMIN_CLUSTER_KUBECONFIG를 관리 클러스터에 대한 kubeconfig 파일의 경로로 바꿉니다.

  3. ObservabilityPipeline 커스텀 리소스에서 additionalSinks 필드에 fluentbitConfigMaps 배열을 사양 섹션의 로깅 필드에 추가합니다. fluentbitConfigMaps 배열의 항목은 1단계에서 ConfigMap 객체에 이전에 할당한 이름과 일치해야 합니다.

    apiVersion: observability.gdc.goog/v1alpha1
    kind: ObservabilityPipeline
    metadata:
      # Don't change anything in this section
      ...
    spec:
      auditLogging:
        # This section is for audit logs and only needs to be edited if audit logs have a custom output.
        additionalSink:
          fluentbitConfigMaps:
          # The name should match the configmap name created in step 1.
          - "<audit logs output configmap name>"
          # Scheme: []v1.VolumeMount. Add volumeMounts if necessary
          volumeMounts:
          - ...
          - ...
          # Scheme: []v1.Volume. Add volumes if necessary
          volumes:
    
  4. 변경사항을 ObservabilityPipeline 커스텀 리소스에 적용하려면 명령줄 편집기를 저장하고 종료합니다.

이 단계를 완료하면 변경사항의 출시가 시작되고 anthos-log-forwarder DaemonSet가 다시 시작됩니다.