Cloudflare

개요

Cloudflare와 통합하여 웹 트래픽, DNS 쿼리, 위협에 대한 통찰을 포함한 영역 메트릭을 확보하세요. 본 통합은 Cloudflare 분석 API을 기반으로 합니다. 어떤 리소스가 어떤 메트릭에 해당하는지 설명서에서 자세히 알아보세요.

로그 수집: Cloudflare는 해당 메트릭 외에도 Cloudflare Logpush를 사용해 로그를 Datadog으로 직접 푸시할 수 있도록 도와줍니다. 상세 로그에는 Cloudflare 제품에서 생성된 메타데이터가 포함되어 있으며, 이는 특히 다른 소스의 로그 과 결합하여 디버깅하거나 분석 데이터를 생성하는데 유용합니다. 해당 메트릭과 결합하여 Cloudflare 환경에 대한 전체 가시성을 확보하려면 Cloudflare 로그 수집을 활성화합니다.

바로 사용할 수 있는 대시보드를 제공하여 애플리케이션의 보안과 성능을 향상시켜 드립니다. 단일 패널에서 다음에 대한 가시성을 확보할 수 있습니다.

  • 보안 위협
  • HTTP 요청량 및 오류율
  • 라운드트립 시간 및 트래픽 플로우 변경 사항이 포함된 로드 밸런싱
  • 작업자 스크립트의 성능 문제

풍부한 로그 정보와 자세한 메트릭으로 Cloudflare 인프라스트럭처에 대한 심층적인 통찰을 얻어 문제 해결에 필요한 컨텍스트를 구축할 수 있습니다.

본 통합은 Datadog 클라우드 보안 정보와 이벤트 관리(SIEM)와 함께 작동해 다음 사항에 대해 즉시 활용할 수 있는 위협 탐지 기능을 제공합니다.

  • 불가능한 이동
  • 위험한 설정 오류
  • DDoS 공격

IP 주소 차단 또는 Datadog에서 케이스 생성 등, 포함된 워크플로우 자동화 청사진을 활용하여 더욱 신속하게 보안 위협을 완화할 수 있습니다.

설정

설정 시작 전에 Datadog 계정API 토큰이 있어야 하며, Cloudflare Logpush를 사용할 수 있어야 합니다(엔터프라이즈 계정 요금제 필요).

Cloudflare API 토큰을 생성하려면 Cloudflare API 토큰 설명서의 안내에 따르고 각 계정에 필요한 권한이 있는지 확인하시기 바랍니다. 토큰에 인증 문제가 생길 경우 Cloudflare 고객지원팀에 문의하세요.

권한

범위권한상태
계정계정 분석읽기
계정계정 설정읽기
계정작업자 스크립트읽기
계정작업자 테일읽기
영역(Zone)분석읽기
영역(Zone)로드 밸런서읽기
영역(Zone)작업자 경로읽기
영역(Zone)영역(Zone)읽기

설치

위에서 생성한 API 토큰을 입력해 Datadog Cloudflare 통합 타일로 통합을 설치합니다.

설정

  1. Datadog Cloudflare 통합 타일Configure 탭으로 이동합니다.
  2. 모니터하고 싶은 계정에 이메일 주소와 앞서 생성한 API 토큰을 입력합니다. Cloudflare 계정의 My Profile > API Tokens에서 Cloudflare API 토큰을 찾을 수 있습니다. 이제 Cloudflare의 API 키는 레거시 인증 방법이 되었습니다. API 키를 사용하는 경우, API 토큰으로 대체하기를 권고합니다.
  3. 계정 이름을 제공합니다. 해당 이름은 임의의 이름이며 메트릭의 account 태그에서 사용됩니다.

로그 수집

Cloudflare는 Cloudflare Logpush를 사용해 로그를 Datadog으로 직접 푸시할 수 있도록 도와줍니다. Cloudflare API 또는 Cloudflare 대시보드에서 직접 Logpush 작업을 관리할 수 있습니다.

Cloudflare 통합 파이프라인을 설치하면 특정 속성을 자동으로 리매핑합니다. 리매핑되는 속성을 확인하려면 다음 단계를 따르세요.

  1. 로그 파이프라인으로 이동합니다.
  2. 오른쪽 상단의 파이프라인 라이브러리 찾기를 클릭합니다.
  3. 검색 바에 Cloudflare을 입력합니다.
  4. 리매퍼(remapper) 및 기타 설치된 프로세서의 목록을 보려면 Cloudflare를 클릭하세요.

Cloudflare API

  1. Logpush 작업 엔드포인트에 POST 요청을 보내 Logpush 작업을 생성합니다. 다음 필드를 포함하세요.

    • name (옵션): 도메인 이름을 작업 이름으로 사용합니다.
    • destination_conf: 다음 파라미터를 구성하는 로그 대상입니다.
      • <DATADOG_ENDPOINT_URL>: Datadog HTTP 로그 수집 엔드포인트는 다음 중 하나일 수 있습니다. 차이점은 Datadog API 참조에서 확인할 수 있습니다.
        • v1: http-intake.logs./v1/input
        • v2 (최신): http-intake.logs./api/v2/logs
      • <DATADOG_API_KEY>: Datadog API 키입니다.
      • ddsource: cloudflare로 설정합니다.
      • service(옵션): 서비스 이름을 지정합니다.
      • host(옵션): 호스트 이름을 지정합니다.
      • ddtags(옵션): 태그를 지정합니다.
    • dataset: 수신하려는 로그의 카테고리입니다. 지원 데이터 집합 목록을 보려면 Cloudflare 로그 필드를 참조하세요.
    • logpull_options (옵션): 필드, 샘플 속도 및 타임스탬프 형식을 설정하려면 Logpush API 옵션을 참조하세요. Datadog은 Cloudflare이 사용하는 기본 옵션인 RFC 3339 형식의 타임스탬프 사용을 의무화합니다.

    요청 예시:

    curl -s -X POST 'https://api.cloudflare.com/client/v4/zones/<ZONE_ID>/logpush/jobs' \
    --header 'X-Auth-Key: <CLOUDFLARE_AUTH_KEY>' \
    --header 'X-Auth-Email: <CLOUDFLARE_AUTH_EMAIL>' \
    --header 'Content-Type: application/json' \
    --data-raw '{
       "name": "<NAME>",
       "destination_conf": "datadog://<DATADOG_ENDPOINT_URL>?header_DD-API-KEY=<DATADOG_API_KEY>&ddsource=cloudflare&service=cloudflare&ddtags=env:dev",
       "logpull_options": "fields=RayID,EdgeStartTimestamp&timestamps=rfc3339",
       "dataset": "http_requests"
    }'
    

    응답 예시:

    {
     "errors": [],
     "messages": [],
     "result": {
       "id": 100,
       "dataset": "http_requests",
       "enabled": false,
       "name": "<DOMAIN_NAME>",
       "logpull_options": "fields=RayID,EdgeStartTimestamp&timestamps=rfc3339",
       "destination_conf": "datadog://http-intake.logs./v1/input?header_DD-API-KEY=<DD-API-KEY>&ddsource=cloudflare&service=cloudflare&ddtags=env:dev",
       "last_complete": null,
       "last_error": null,
       "error_message": null
     },
     "success": true
    }
    

    id의 값을 기록해 두세요. 위의 예시에서는 100입니다.

  2. 작업을 활성화합니다. 응답 반환된 작업 ID를 사용하여 요청 본문의 {"enabled": true}를 전송하세요.

    요청 예시:

    curl -s -X PUT \
    https://api.cloudflare.com/client/v4/zones/<ZONE_ID>/logpush/jobs/<JOB_ID> -d'{"enabled":true}' | jq .
    

    응답 예시:

    {
      "errors": [],
      "messages": [],
      "result": {
        "id": 100,
        "dataset": "http_requests",
        "enabled": true,
        "name": "<DOMAIN_NAME>",
        "logpull_options": "fields=RayID,EdgeStartTimestamp&timestamps=rfc3339",
        "destination_conf": "datadog://?header_DD-API-KEY=<DATADOG-API-KEY>",
        "last_complete": null,
        "last_error": null,
        "error_message": null
      },
      "success": true
    }
    

Cloudflare 대시보드

  1. 서비스를 Cloudflare 대시보드의 Logpush 섹션에 연결한 다음 데이터셋과 데이터 필드를 선택하고 대상 선택에서 Datadog을 선택합니다.

  2. Enter destination information에서 다음 Datadog URL 엔드포인트를 입력합니다.

    http-intake.logs./api/v2/logs?ddsource=cloudflare
    

    참고: ddsource=cloudflare는 필수 항목입니다. 로그를 구분하기 위해 service, host, ddtags의 옵션 파라미터를 추가할 수도 있습니다.

    :

    http-intake.logs./api/v2/logs?service=<SERVICE>&host=<HOST>&ddsource=cloudflare
    
  3. Datadog Cloudflare 통합 타일 설정에 사용한 Datadog API 키를 입력합니다.

  4. 접근 권한이 확인되면 소유권 증명에 “푸시 준비 완료!“가 표시됩니다. Push을 클릭하여 완료합니다.

수집한 데이터

메트릭

cloudflare.requests.all
(count)
Total request count
Shown as request
cloudflare.requests.cached
(count)
Cached requests count
Shown as request
cloudflare.requests.uncached
(count)
Uncached requests count
Shown as request
cloudflare.requests.ssl.encrypted
(count)
SSL encrypted requests count
Shown as request
cloudflare.requests.ssl.unencrypted
(count)
Unencrypted requests count
Shown as request
cloudflare.requests.country
(count)
Request count, tagged by IATA country code
Shown as request
cloudflare.requests.status
(count)
Request count, tagged by HTTP response code
Shown as request
cloudflare.requests.content_type
(count)
Request count, tagged by Content-Type
Shown as request
cloudflare.requests.ip_class
(count)
Request count, tagged by IP class
Shown as request
cloudflare.requests.cross_zone_sub_requests.avg
(gauge)
The proportion of requests that were inititiated by a Cloudflare Worker on another zone
Shown as request
cloudflare.requests.edge_dns_response_time.avg
(gauge)
Average edge dns response time in milliseconds
Shown as millisecond
cloudflare.requests.edge_time_to_first_byte.avg
(gauge)
Average time to first byte in milliseconds
Shown as millisecond
cloudflare.requests.origin_response_duration.avg
(gauge)
The average originResponseDuration in milliseconds excluding 0 values (i.e. cached ones)
Shown as millisecond
cloudflare.bandwidth.all
(count)
Total bandwidth
Shown as byte
cloudflare.bandwidth.cached
(count)
Cached bandwidth
Shown as byte
cloudflare.bandwidth.uncached
(count)
Uncached bandwidth
Shown as byte
cloudflare.bandwidth.ssl.encrypted
(count)
SSL encrypted bandwidth
Shown as byte
cloudflare.bandwidth.ssl.unencrypted
(count)
Unencrypted bandwidth
Shown as byte
cloudflare.bandwidth.country
(count)
Bandwidth tagged by IATA country code
Shown as byte
cloudflare.bandwidth.content_type
(count)
Bandwidth tagged by Content-Type
Shown as byte
cloudflare.threats.all
(count)
Total threats
Shown as operation
cloudflare.threats.type
(count)
Threats tagged by type
Shown as operation
cloudflare.threats.country
(count)
Threats tagged by IATA country code
Shown as operation
cloudflare.pageviews.all
(count)
Total page views
Shown as page
cloudflare.pageviews.search_engine
(count)
Page views tagged by search engine
Shown as page
cloudflare.uniques.all
(count)
Unique visitors count
Shown as connection
cloudflare.dns.query.all
(count)
DNS query count
Shown as request
cloudflare.dns.query.uncached
(count)
Uncached DNS query count
Shown as request
cloudflare.dns.query.stale
(count)
Stale DNS query count
Shown as request
cloudflare.dns.response_time.avg
(gauge)
DNS query average response time
Shown as millisecond
cloudflare.dns.response_time.median
(gauge)
DNS query median response time
Shown as millisecond
cloudflare.dns.response_time.90p
(gauge)
DNS query response time to the 90th percentile
Shown as millisecond
cloudflare.dns.response_time.99p
(gauge)
DNS query response time to the 99th percentile
Shown as millisecond
cloudflare.workers.requests.all
(count)
The request count to the worker script (metrics may not show without enabled API Key permissions)
Shown as request
cloudflare.workers.requests.errors
(count)
The error count to the worker script (metrics may not show without enabled API Key permissions)
Shown as request
cloudflare.workers.requests.subrequests
(count)
The subrequest count to the worker script (metrics may not show without enabled API Key permissions)
Shown as request
cloudflare.workers.response_time.75p
(gauge)
The worker response time to the 75th percentile (metrics may not show without enabled API Key permissions)
Shown as microsecond
cloudflare.workers.response_time.99p
(gauge)
The worker response time to the 99th percentile (metrics may not show without enabled API Key permissions)
Shown as microsecond
cloudflare.load_balancer.pool.round_trip_time.average
(gauge)
The average round trip time to reach the load balancer pool
Shown as millisecond
cloudflare.load_balancer.pool.health.status
(count)
The load balancer pool health status
Shown as request

메트릭 카테고리

하단 표는 수집되는 메트릭 유형과 관련 메트릭 접두어에 대해 설명합니다.

유형설명수집된 메트릭 접두어
웹 분석웹 트래픽 및 성능과 관련된 메트릭입니다.cloudflare.requests.all
cloudflare.requests.cached
cloudflare.requests.uncached
cloudflare.requests.ssl.encrypted
cloudflare.requests.ssl.unencrypted
cloudflare.requests.country
cloudflare.requests.status
cloudflare.requests.content_type
cloudflare.requests.ip_class
cloudflare.bandwidth.all
cloudflare.bandwidth.cached
cloudflare.bandwidth.uncached
cloudflare.bandwidth.ssl.encrypted
cloudflare.bandwidth.ssl.unencrypted
cloudflare.bandwidth.country
cloudflare.bandwidth.content_type
cloudflare.threats.all
cloudflare.threats.type
cloudflare.threats.country
cloudflare.pageviews.all
cloudflare.pageviews.search_engine
cloudflare.uniques.all
cloudflare.requests.cross_zone_sub_requests.avg
cloudflare.requests.edge_dns_response_time.avg
cloudflare.requests.edge_time_to_first_byte.avg
cloudflare.requests.origin_response_duration.avg
DNSDNS 쿼리 및 응답 시간과 연관된 메트릭입니다.cloudflare.dns.query.all
cloudflare.dns.query.uncached
cloudflare.dns.query.stale
cloudflare.dns.response_time.avg
cloudflare.dns.response_time.median
cloudflare.dns.response_time.90p
cloudflare.dns.response_time.99p
로드 밸런서로드밸런싱 풀과 연관된 메트릭입니다.cloudflare.load_balancer.pool.round_trip_time.average
cloudflare.load_balancer.pool.health.status
작업자 스크립트Cloudflare 작업자 스크립트와 연관된 메트릭입니다.cloudflare.workers.requests.all
cloudflare.workers.requests.errors
cloudflare.workers.requests.subrequests
cloudflare.workers.response_time.75p
cloudflare.workers.response_time.99p

이벤트

Cloudflare 통합은 이벤트를 포함하지 않습니다.

서비스 점검

Cloudflare 통합은 서비스 점검을 포함하지 않습니다.

트러블슈팅

도움이 필요하신가요? Datadog 지원 팀에 문의하세요.