본문 바로가기

컴퓨터/클라우드

[GCP Associate Cloud Engineer] Google Cloud의 운영 및 모니터링

애플리케이션을 개발하는 것뿐만 아니라, 운영 및 유지보수도 매우 중요하다.

운영을 할 때 고려할 요소는 다음과 같다.

 - 애플리케이션 상태 체크: 서비스가 정상적으로 동작하는가?

 - 사용자 경험 모니터링: 사용자들이 문제를 겪고 있는가?

 - 리소스 상태 확인: VM, 데이터베이스, 네트워크가 적절한 상태인가?

 - 자동 경고: 이상 징후가 발생하면 즉시 대응할 수 있는가?

 

 

Cloud Monitoring (모니터링 서비스)

 

Google Cloud의 Cloud Monitoring은 인프라 및 애플리케이션 상태를 실시간으로 모니터링할 수 있도록 돕는다.

리소스 상태 모니터링을 통해 CPU, 메모리, 디스크 사용량, 네트워크 트래픽, 데이터베이스 성능을 확인할 수 있다.

시각적 데이터 대시보드 제공을 하기 때문에 실시간 데이터 그래프 및 대시보드 생성 가능하다.

알림 시스템을 통해 특정 임계값을 초과할 경우 경고를 전송하여 이메일, Slack, PagerDuty, SMS 등 다양한 방식으로 알림 가능하다.

다양한 클라우드 환경 지원을 하여 Google Cloud 프로젝트뿐만 아니라 AWS 계정도 모니터링 가능하다.

 

Cloud Monitoring을 제대로 활용하려면 워크스페이스 개념을 이해해야 한다.

워크스페이스는 여러 개의 GCP 프로젝트 또는 AWS 계정을 하나의 모니터링 환경으로 관리하는 개념이다.

하나의 호스트 프로젝트가 존재하며, 여러 개의 프로젝트를 워크스페이스에 추가하여 통합 관리할 수 있다.

 

Google Cloud는 Cloud Monitoring 외에도 운영을 위한 다양한 서비스를 제공한다.

서비스  기능
Cloud Monitoring 리소스 성능 및 상태 모니터링, 알림 설정
Cloud Logging 실시간 로그(Logging) 수집 및 분석
Cloud Trace 애플리케이션 요청 추적 (Tracing)
Cloud Debugger 애플리케이션 실시간 디버깅

Cloud Logging

Cloud Logging은 Google Cloud에서 제공하는 실시간 로그 관리 및 분석 도구이다.
클라우드에서 실행되는 애플리케이션, 시스템, 서비스 등의 로그를 중앙 집중화하여 관리할 수 있다.

Cloud Logging은 Exabyte 규모까지 확장 가능하며, 실시간 로그 분석이 가능하다.

 

Cloud Logging에서 수집 가능한 로그 유형은 다음과 같다.

로그 유형 설명
애플리케이션 로그 VM, 컨테이너, 서버리스 애플리케이션에서 생성된 로그
GCP 서비스 로그 Compute Engine, Cloud Storage, Cloud SQL 등에서 자동 생성된 로그
감사(Audit) 로그 GCP에서 발생한 관리 이벤트(Admin Activity), 데이터 접근 로그(Data Access)
네트워크 보안 로그 VPC 방화벽 로그, 네트워크 트래픽 로그
사용자 정의 로그 커스텀 애플리케이션에서 전송하는 로그 (Cloud Logging API 활용)

 

Cloud Logging은 단순히 로그를 저장하는 것이 아니라, 로그를 분석하고 활용할 수 있는 다양한 기능을 제공한다.

Log Explorer (로그 탐색기)

실시간으로 로그를 검색하고 분석하는 도구로 필터, 정렬, 쿼리를 사용하여 특정 로그 조회 가능하다.

JSON 형식의 로그를 읽고 분석도 가능하다.

 

Logs Dashboard (로그 대시보드)

로그 데이터를 시각화하여 대시보드 형태로 표현 가능하고, 특정 로그 패턴을 감지하고 트렌드 분석도 가능하다.

 

Log-based Metrics (로그 기반 메트릭)

특정 로그 패턴을 감지하여 메트릭을 생성하고, 메트릭을 기반으로 Cloud Monitoring과 연동하여 경고 설정 가능하다.

 

Logs Router (로그 라우팅)

Cloud Logging은 수집된 로그를 다양한 위치로 전송 가능하다.

 

Cloud Logging에서 로그 수집 방법

 

Google Cloud에서 실행되는 서비스는 기본적으로 Cloud Logging에 로그를 자동 전송한다.
그러나, VM 인스턴스, 온프레미스 서버 등에서는 추가 설정이 필요할 수 있다.

 

Compute Engine 인스턴스에서 로그를 수집하려면 Logging Agent를 설치해야 한다.

# Ubuntu
curl -sSO https://dl.google.com/cloudagents/add-logging-agent-repo.sh
sudo bash add-logging-agent-repo.sh
sudo apt-get update && sudo apt-get install -y google-fluentd

# 설치 후 서비스 시작
sudo service google-fluentd start

 

 

온프레미스 서버에서 Google Cloud로 로그를 보내려면 BindPlane 또는 Cloud Logging API 를 사용할 수 있다.

 

Google Cloud의 감사 및 보안 로그

 

Google Cloud 환경에서 보안과 감사은 필수적인 요소이다.
누가, 언제, 어떤 작업을 수행했는지를 추적하는 것은 보안 사고 대응 및 규정 준수를 위한 핵심 기능이다.

감사 및 보안 로그를 통해 VM 생성 및 삭제와 같은 클라우드 리소스에 대한 변경 사항, Cloud Storage 파일 읽기, 수정 과 같은 데이터 액세스 이력, VM 재시작, 유지보수 이벤트와 같은시스템 이벤트, IAM 권한 거부, 정책 위반과 같은 보안 정책 위반을 확인할 수 있다.

 

Google Cloud는 Access Transparency Logs 와 Cloud Audit Logs 두 가지 주요 감사 로그를 제공한다.

 

Access Transparency Logs

Google Cloud 내부에서 GCP 팀이 고객 리소스에 대해 수행한 작업을 기록하는 로그로 특정 조직에서 Gold 이상 지원 플랜이 필요하고, 지원되는 서비스에서만 사용 가능하다.

 

Cloud Audit Logs (클라우드 감사 로그)

Cloud Audit Logs는 Google Cloud에서 발생한 모든 관리 및 데이터 액세스 이벤트를 기록하는 로그이다.
Google Cloud 리소스에서 누가, 언제, 어떤 작업을 했는지 확인할 수 있는 가장 중요한 감사 로그이다.

 

Cloud Audit Logs의 4가지 유형

로그 유형 설명 기본 활성화 여부
Admin Activity Logs 리소스 변경 (VM 생성, IAM 정책 변경 등) 기본 활성화
Data Access Logs 데이터 읽기 및 수정 (Cloud Storage, BigQuery 등) 기본 비활성화 (설정 필요)
System Event Logs GCP 내부 시스템 이벤트 (VM 유지보수, 인스턴스 종료 등) 기본 활성화
Policy Denied Logs 권한 부족으로 작업이 거부된 이벤트 기본 활성화

 

Admin Activity Logs (관리 활동 로그)

API 호출이나 리소스 설정 변경과 관련된 로그를 저장한다.

Compute Engine 인스턴스가 생성된 이벤트를 기록하고, 관리자 또는 특정 IAM 사용자에 의해 실행된 작업 확인 가능하다.

 

Data Access Logs (데이터 액세스 로그)

데이터를 읽거나 수정하는 이벤트를 기록한다.
이 로그는 기본적으로 비활성화되어 있으며, 사용자가 직접 활성화해야 한다.

Cloud Storage에서 특정 파일이 조회된 이벤트를 기록하고, 누가, 언제 해당 데이터를 읽었는지 확인 가능하다.

 

System Event Logs (시스템 이벤트 로그)

GCP 내부에서 발생하는 유지보수, VM 자동 종료 등의 시스템 이벤트를 기록한다.

VM 유지보수로 인해 자동 재부팅이 발생한 이벤트 확인 가능하고, 자동 종료 또는 재시작된 VM의 원인 분석 가능하다.

 

Policy Denied Logs (정책 거부 로그)

사용자가 권한이 없거나 정책 제한으로 인해 작업이 차단된 경우 기록된다.

IAM 정책에 의해 특정 작업이 거부된 경우 확인 가능하고, 보안 정책 위반 감지 가능하다.

Google Cloud Log Routing & Exporting

Google Cloud에서 로그는 다양한 출처에서 수집된다.
이 로그를 효율적으로 관리하고 저장 비용을 절감하기 위해 적절한 목적지로 라우팅하는 것이 중요하다.

로그 라우팅은 어떤 로그를 저장할지 또는 삭제할지 결정하고, 로그를 어떤 저장소로 보낼지 결정하고, 로그의 보관 기간을 설정 가능하다.

 

Cloud Logging의 기본 로그 버킷

 

Cloud Logging은 기본적으로 두 개의 로그 버킷을 제공한다.

버킷 이름 설명 보관 기간 비용
_Required 관리 로그 (Admin Activity, System Events, Access Transparency Logs) 저장 400일 (변경 불가) 무료
_Default 그 외 모든 로그 저장 기본 30일 (1일~10년 설정 가능) 유료

_Required 버킷

무료로 제공되는 버킷으로 GCP의 관리 활동 로그, 시스템 이벤트, Access Transparency Logs를 저장하고, 삭제 및 보관 기간 변경 불가능하다.

 

_Default 버킷

기본적으로 모든 로그가 저장되고, 30일 동안 보관되며, 1일 ~ 10년까지 변경 가능하다.

로그 양에 따라 비용 발생한다.

로그 저장을 비활성화하려면 Log Router에서 _Default 버킷에 대한 로그 라우팅을 차단해야 한다.

 

로그 내보내기

 

Cloud Logging에 저장된 로그는 다양한 저장소로 내보내기할 수 있다. 

저장소  주요 목적 사용 예시
Cloud Storage 장기 보관 (Compliance, Auditing) 감사를 위해 로그를 10년간 보관
BigQuery SQL 기반 로그 분석 VM 로그 분석 및 데이터 시각화
Pub/Sub 실시간 로그 스트리밍 Splunk, SIEM 시스템 연동

 

Google Cloud Cloud Trace: 분산 추적 시스템

Cloud Trace는 Google Cloud의 분산 추적 시스템이다.
마이크로서비스 환경에서 하나의 요청이 여러 서비스에 걸쳐 처리될 때, 해당 요청의 흐름을 추적하고 성능을 분석할 수 있다.

Cloud Trace는 요청 및 응답의 지연 시간을 분석하고, 서비스 간 요청 흐름 추적한다.

Google Cloud 및 애플리케이션에서 자동 지원되며 지원되는 트레이싱 라이브러리를 사용하여 직접 통합 가능하다.

 

Trace: 하나의 요청이 여러 서비스에 걸쳐 실행될 때 전체 요청 흐름을 의미
Span: 하나의 서비스 또는 특정 코드 블록이 처리하는 개별적인 실행 단계
Latency: 각 Span이 요청을 처리하는데 걸리는 시간
Trace ID: 각 요청에 부여되는 고유한 식별자
Span ID: 각 실행 구간에 부여되는 고유한 식별자

 

Cloud Trace 데이터 예제

{
  "traceId": "1234567890abcdef",
  "spans": [
    {
      "spanId": "span-1",
      "name": "Frontend Service",
      "startTime": "2025-02-05T12:00:00Z",
      "endTime": "2025-02-05T12:00:02Z",
      "latency": "2s"
    },
    {
      "spanId": "span-2",
      "name": "Backend Service",
      "startTime": "2025-02-05T12:00:02Z",
      "endTime": "2025-02-05T12:00:05Z",
      "latency": "3s"
    }
  ]
}

 

traceId: 요청 전체의 ID

spans: 서비스 실행 단계

Frontend Service가 요청을 2초 동안 처리하고, Backend Service가 요청을 3초 동안 처리한다.

 

Cloud Trace는 Cloud Console에서 제공하는 Trace Explorer를 사용하여 분석 가능하다.

Google Cloud Debugger: 실시간 애플리케이션 디버깅

Cloud Debugger는 Google Cloud에서 실행 중인 애플리케이션을 실시간으로 디버깅할 수 있는 도구이다.
로컬 환경에서는 재현되지 않는 테스트 또는 프로덕션 환경에서 발생하는 문제를 분석하는 데 유용하다.

애플리케이션 실행 중 디버깅이 가능하고, 코드 변경 없이 변수 값과 호출 스택을 확인할 수 있다.

스냅샷을 찍어 특정 실행 지점에서 상태 확인할 수 있고, 추가적인 로깅 없이 애플리케이션 상태를 분석할 수 있다.

 

Snapshot: 실행 중인 애플리케이션의 특정 코드 라인에서 변수 값 및 호출 스택을 캡처
Breakpoint: 코드의 특정 위치에서 실행 상태를 캡처하여 디버깅 가능
Call Stack: 특정 시점에서 함수 호출이 어떻게 이루어졌는지 추적
Logpoint: 기존 코드를 수정하지 않고 디버깅을 위한 임시 로깅 추가 가능

 

Cloud Debugger는 Google Cloud Console에서 직접 설정하거나, 애플리케이션에 디버깅 에이전트를 추가하여 사용할 수 있다.