이 섹션의 안내에 따라 중앙 로그 서버를 설정하세요.
스토리지 버킷 설정
어플라이언스 로그를 저장할 새 스토리지 버킷을 만듭니다.
gcloud storage buckets create gs://BUCKET_NAME아직 사용 설정되지 않은 경우 IAM API를 사용 설정합니다.
gcloud services enable iam.googleapis.com버킷에 액세스할 서비스 계정을 만듭니다.
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 설정
새 GKE 클러스터를 만듭니다(https://cloud.google.com/sdk/gcloud/reference/container/clusters/create). 이 설정에 기존 클러스터를 사용하는 경우 다음 단계로 진행합니다.
클러스터와 상호작용하도록 kubectl을 설치하고 구성합니다. https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl
클러스터에서 워크로드 아이덴티티를 사용 설정합니다. https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity#enable-existing-cluster
https://cloud.google.com/kubernetes-engine/docs/how-to/persistent-volumes/cloud-storage-fuse-csi-driver#enable에 따라 GKE 클러스터에서 Cloud Storage FUSE CSI 드라이버를 사용 설정합니다.
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를 선택합니다.https://cloud.google.com/artifact-registry/docs/repositories/remote-repo에 따라 Grafana 및 Loki Helm 차트에서 사용하는 컨테이너 이미지가 포함된 외부 레지스트리인 Dockerhub의 프록시 역할을 하는 Artifact Registry 원격 저장소를 만듭니다.
Grafana 및 Loki Helm 차트를 다운로드하고 압축을 풉니다.
tar -xzf WORKING_DIR/grafana.tgz tar -xzf WORKING_DIR/loki.tgzWORKING_DIR/loki/values.yaml.in에서 Loki Helm 차트 값을 설정하고 클러스터에 Helm 차트를 설치합니다.
helm install LOKI_RELEASE_NAME WORKING_DIR/loki --namespace NAMESPACEWORKING_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를 참고하세요.
운영 로그 내보내기
다음 단계에 따라 운영 로그를 외부 저장소로 내보내세요.
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명령줄 편집기에서
ObservabilityPipeline커스텀 리소스를 엽니다.kubectl --kubeconfig=ROOT_ADMIN_CLUSTER_KUBECONFIG -n obs-system edit observabilitypipelines.observability.gdc.goog defaultORG_ADMIN_CLUSTER_KUBECONFIG를 관리 클러스터에 대한 kubeconfig 파일의 경로로 바꿉니다.
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: - ... - ...변경사항을
ObservabilityPipeline커스텀 리소스에 적용하려면 명령줄 편집기를 저장하고 종료합니다.
이 단계를 완료하면 변경사항의 출시가 시작되고 anthos-log-forwarder DaemonSet가 다시 시작됩니다.
감사 로그 내보내기
다음 단계를 따라 감사 로그를 외부 저장소로 내보내세요.
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명령줄 편집기에서
ObservabilityPipeline커스텀 리소스를 엽니다.kubectl --kubeconfig=ORG_ADMIN_CLUSTER_KUBECONFIG -n obs-system edit observabilitypipelines.observability.gdc.goog defaultORG_ADMIN_CLUSTER_KUBECONFIG를 관리 클러스터에 대한 kubeconfig 파일의 경로로 바꿉니다.
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:변경사항을
ObservabilityPipeline커스텀 리소스에 적용하려면 명령줄 편집기를 저장하고 종료합니다.
이 단계를 완료하면 변경사항의 출시가 시작되고 anthos-log-forwarder DaemonSet가 다시 시작됩니다.