관찰 가능성 및 포렌식 기능을 Cloudflare 대시보드에 직접 가져오도록 설계된 강력한 신제품인 Cloudflare Log Explorer를 누구나 이용할 수 있게 되었음을 발표하게 되어 기쁩니다. Cloudflare의 방대한 전역 네트워크를 기반으로 구축된 Log Explorer는 Cloudflare 플랫폼의 고유한 위치를 활용하여 환경에 대한 포괄적이고 상황에 맞는 보기를 제공합니다.
보안팀과 개발자는 Cloudflare를 이용하여 실시간으로 위협을 감지하고 완화하며 애플리케이션 성능을 최적화할 수 있습니다. 지난 몇 년 동안 사용자들은 데이터를 타사 로그 분석과 보안 정보 및 이벤트 관리(SIEM) 도구에 전달할 필요 없이 보안 사고를 조사하거나 애플리케이션 성능 문제를 해결하기 위해 전체 컨텍스트가 포함된 추가 원격 측정 기능을 제공해줄 것을 요청했습니다. 데이터를 외부로 전송하면, 피할 수 있는 비용 외에도 복잡한 설정, 중요한 데이터에 대한 액세스 지연, 신속한 대응을 어렵게 하는 컨텍스트 부족 등의 단점이 생깁니다.
지난 한 해 동안 Log Explorer를 미리 체험한 수백 명의 고객은 다음과 같은 이점이 있다고 밝혔습니다.
“기다리지 않아도 되고 외부 도구를 사용할 필요도 없이 모든 컨텍스트를 갖춘 Log Explorer에서 WAF 로그(방화벽 이벤트)를 즉시 사용할 수 있게 되면서 방화벽 규칙을 관리하는 방식이 완전히 바뀌었습니다. 문제가 발견되면 클릭 한 번으로 규칙을 조정하고 그 효과를 즉시 확인할 수 있습니다. 긍정 오류를 더 빠르게, 더 저렴하게, 더 효과적으로 튜닝할 수 있게 되었습니다.”
“저희는 Cloudflare 로그를 SIEM으로 수집하기 위해 Logpush를 사용하고 있지만, 개발팀에서 로그를 분석해야 할 때는 Log Explorer를 활용하는 것이 더 효과적일 수 있습니다 . SIEM을 사용하면 개발팀에서 자체 쿼리를 작성하고 콘솔을 조작하여 필요한 로그를 확인하기가 어렵습니다. 반면에 Cloudflare의 Log Explorer를 사용하면 개발팀에서 훨씬 쉽게 로그를 보고 필요한 정보를 직접 검색할 수 있습니다.”
Log Explorer를 사용하면 고객은 Cloudflare 플랫폼 내에서 사용 가능한 모든 컨텍스트와 함께 Cloudflare 로그에 액세스할 수 있습니다. 고객은 외부 도구에 비해 다음과 같은 이점을 누릴 수 있습니다.
비용 및 복잡성 감소: 외부 도구에서 몇 테라바이트에 달하는 로그 데이터를 전달, 저장, 분석하는 것과 관련된 비용과 운영 오버헤드가 크게 줄어듭니다.
더 빠른 감지 및 분류: Cloudflare 네이티브 로그에 직접 액세스하므로 중요한 보안 인사이트를 지연시키는 번거로운 데이터 파이프라인과 수집 지연이 제거됩니다.
전체 컨텍스트를 통한 신속한 조사: Cloudflare의 독보적인 컨텍스트 데이터로 사고를 조사하여 "정확히 무슨 일이 일어났는가?" 그리고 "어떻게 그 일이 일어났는가?"에 대한 분석과 이해가 빨라집니다.
최소화된 복구 시간: Cloudflare 플랫폼을 통한 직접 완화 기능으로 조사에서 조치로 원활하게 전환됩니다.
Log Explorer는 셀프 서비스 또는 Enterprise 플랜 고객을 위한 추가 기능 제품으로 제공됩니다. 계속 읽으면서 Log Explorer의 각 기능이 문제를 더 빠르게 감지하고 진단하는 데 어떻게 도움이 되는지 알아보세요.
사용자 지정 대시보드로 보안 및 성능 문제 모니터링
사용자 지정 대시보드를 이용하면 환경에서 비정상적이거나 예기치 않은 활동을 모니터링하는 데 필요한 특정 메트릭을 정의할 수 있습니다.
자연어를 사용하여 차트를 만들 수 있으므로 쉽게 시작할 수 있습니다. 자연어 인터페이스가 차트 생성/편집 환경에 통합되어 있으므로 생성하려는 차트를 자신만의 언어로 표현할 수 있습니다. Security Week 2024 동안에 발표된 AI 비서와 유사하게, 프롬프트로 언어를 적절한 차트 구성으로 번역한 다음 신규 또는 기존 사용자 지정 대시보드에 추가할 수 있습니다.
예를 들어, 대시보드를 만들어 사용자 환경에서 발생하는 원격 코드 실행(RCE) 공격의 존재를 모니터링할 수 있습니다. RCE 공격은 공격자가 사용자 환경의 컴퓨터를 손상시키고 명령을 실행할 수 있는 공격입니다. 좋은 소식은 RCE를 Cloudflare WAF에서 감지할 수 있다는 점입니다. 아래 대시보드 예시에서는 RCE 공격을 감시할 수 있을 뿐만 아니라 악의적 콘텐츠 업로드, 소스 IP 주소, JA3/JA4 핑거프린트 등의 다른 보안 이벤트와 RCE 공격의 상관 관계도 확인할 수 있습니다. 이러한 시나리오는 사용자 환경에서 하나 이상의 시스템이 손상되어 맬웨어를 확산하는 데 사용되고 있음을 의미할 수 있으며, 이는 확실히 아주 위험한 사고입니다!
안정성 엔지니어는 오류 모니터링을 위한 대시보드를 만들고자 할 수 있습니다. 해당 엔지니어는 자연어 프롬프트를 사용하여 '시간에 따른 HTTP 상태 코드 범위 비교'와 같은 쿼리를 입력할 수 있습니다. 그런 다음 AI 모델이 가장 적절한 시각화를 결정하고 차트 구조를 구성합니다.
사용자 지정 대시보드를 처음부터 만들 수도 있지만, 전문가가 큐레이션한 대시보드 템플릿을 사용하여 보안 및 성능 모니터링을 바로 시작할 수도 있습니다.
사용 가능한 템플릿은 다음과 같습니다.
봇 모니터링: 웹 사이트에 액세스하는 자동화된 트래픽 식별
API 보안: 애플리케이션 내 API 엔드포인트의 데이터 전송 및 예외를 모니터링
API 성능: 오류율과 함께 애플리케이션의 API 엔드포인트에 대한 타이밍 데이터 확인
계정 탈취: 로그인 시도, 유출된 자격 증명 사용을 보고, 계정 탈취 공격을 식별
성능 모니터링: 원본 서버에서 느린 호스트와 경로를 식별하고 시간 경과에 따른 첫 번째 바이트 시간(TTFB) 메트릭 확인
보안 모니터링: 상위 호스트 및 경로 전반의 공격 분포를 모니터링하고, DDoS 트래픽과 원본 응답 시간의 상관 관계를 분석하여 DDoS 공격의 영향을 파악합니다.
로그 검색 문제 조사 및 해결
이전 섹션의 예시를 계속 사용하여, RCE 문제를 통해 일부 컴퓨터가 손상되었음을 진단하는 데 성공한 후 분석가는 로그 검색으로 전환하여 공격자가 다른 내부 시스템에 액세스하여 손상시킬 수 있었는지 여부를 조사할 수 있습니다. 이를 위해 분석가는 아래 스크린샷과 같이 사용자 지정 대시보드의 손상된 IP 주소와 같은 컨텍스트를 사용하여 Zero Trust 서비스의 로그를 검색할 수 있습니다.
로그 검색은 간소화된 경험이며, 데이터 유형 인식 검색 필터 또는 보다 강력한 쿼리를 위해 사용자 지정 SQL 인터페이스로 전환하는 기능이 포함됩니다. 로그 검색은 공개 API를 통해서도 사용할 수 있습니다.
저장된 쿼리로 시간 절약 및 협업
이제 로그 검색에 내장된 쿼리를 저장하여 반복 사용할 수 있으며 해당 쿼리에 계정의 다른 Log Explorer 사용자가 액세스할 수 있습니다. 따라서 문제를 함께 조사하는 것이 그 어느 때보다 쉬워집니다.
사용자 지정 알림으로 선제적 모니터링(출시 예정)
사용자 지정 알림을 통해 비즈니스에 중요한 지표를 선제적으로 모니터링할 수 있도록 사용자 지정 알림 정책을 구성할 수 있습니다.
로그 검색에서 시작하여 쿼리를 정의하고 테스트합니다. 여기에서 일정 간격과 알림 정책을 저장하고 구성할 수 있습니다. 쿼리는 사용자가 정의한 일정에 따라 자동으로 실행됩니다.
사용자 지정 호스트 이름의 추적 오류율
특정 호스트의 오류율을 모니터링하려면 이 로그 검색 쿼리를 사용하여 시간 간격당 오류율을 계산할 수 있습니다.
SELECT SUBSTRING(EdgeStartTimeStamp, 1, 14) || '00:00' AS time_interval,
COUNT() AS total_requests,
COUNT(CASE WHEN EdgeResponseStatus >= 500 THEN 1 ELSE NULL END) AS error_requests,
COUNT(CASE WHEN EdgeResponseStatus >= 500 THEN 1 ELSE NULL END) * 100.0 / COUNT() AS error_rate_percentage
FROM http_requests
WHERE EdgeStartTimestamp >= '2025-06-09T20:56:58Z'
AND EdgeStartTimestamp <= '2025-06-10T21:26:58Z'
AND ClientRequestHost = 'customhostname.com'
GROUP BY time_interval
ORDER BY time_interval ASC;
위 쿼리를 실행하면 다음과 같은 결과가 반환됩니다. 쿼리 결과의 맨 오른쪽 열에서 전체 오류율 백분율을 확인할 수 있습니다.
맬웨어 사전 감지
Cloudflare 안전한 웹 게이트웨이의 로그를 모니터링하여 환경에 존재하는 맬웨어를 식별할 수 있습니다. 예를 들어, Katz Stealer는 자격 증명을 훔치기 위해 설계된 서비스형 맬웨어입니다. Katz Stealer 맬웨어에 감염되었을 수 있는 컴퓨터를 식별하기 위해 사내 사용자의 DNS 쿼리와 HTTP 요청을 모니터링할 수 있습니다.
또한 사용자 지정 알림을 사용하여 웹후크 또는 PagerDuty를 통해 알림을 받도록 알림 정책을 구성할 수도 있습니다.
유연한 보존 기능으로 감사 및 규제 준수 유지(출시 예정)
유연한 보존 기능으로 로그를 저장할 정확한 기간을 설정할 수 있으므로 특정 규제 준수 및 감사 요구 사항을 쉽게 충족할 수 있습니다. 다른 공급자는 아카이빙 또는 핫 및 콜드 스토리지를 필요로 하므로 이전 로그를 쿼리하기가 어렵습니다. Log Explorer는 R2 스토리지 계층 위에 구축되었으므로 과거 로그도 현재 로그처럼 쉽게 쿼리할 수 있습니다.
Cloudflare 규모에서 실행되도록 Log Explorer를 구축한 방법
저희는 Log Explorer를 통해 Cloudflare R2 위에 확장 가능한 로그 스토리지 플랫폼을 구축했으며, 이를 통해 익숙한 SQL 쿼리를 사용하여 Cloudflare 로그를 효율적으로 검색할 수 있습니다. 이 섹션에서는 이 작업을 수행한 방법과 그 과정에서 일부 기술적 문제를 해결한 방법을 살펴보겠습니다. Log Explorer는 수집기, 압축기, 쿼리어의 세 가지 요소로 구성됩니다. 수집기는 Cloudflare의 데이터 파이프라인에서 R2로 로그를 작성하는 역할을 합니다. 압축기는 저장소 파일을 최적화하여 보다 효율적으로 쿼리할 수 있도록 합니다. 쿼리어는 R2에서 일치하는 로그를 가져오고, 변환하며, 집계하여 사용자의 SQL 쿼리를 실행합니다.
수집하는 동안 Log Explorer는 각 로그 레코드 배치를 R2의 Parquet 파일에 씁니다. Apache Parquet은 오픈 소스 열 저장 파일 형식으로, 저희에게는 당연한 선택이었습니다. 파일 전체에 걸쳐 각 열의 최솟값과 최댓값과 같은 메타데이터를 내장하여 쿼리어가 쿼리를 처리하는 데 필요한 데이터를 빠르게 찾을 수 있도록 하는 등 효율적인 데이터 저장 및 검색에 최적화되어 있습니다.
Log Explorer는 Cloudflare D1과 마찬가지로 고객별로 로그를 저장하므로 귀사의 데이터가 다른 고객의 데이터와 섞이지 않습니다. 2025년 3분기에는 고객별 로그를 통해 자체 보존 정책을 생성하고 데이터를 저장할 지역을 유연하게 결정할 수 있게 됩니다. 그렇다면 로그를 쿼리할 때 Log Explorer는 Parquet 파일을 어떻게 찾을까요? Log Explorer는 Delta Lake 오픈 테이블 형식을 활용하여 R2 개체 스토리지의 최상위에 데이터베이스 테이블 추상화를 제공합니다. Delta Lake의 테이블은 Parquet 형식의 데이터 파일을 트랜잭션 로그와 페어링합니다. 트랜잭션 로그는 테이블에 대한 데이터 파일의 모든 추가, 제거, 수정을 기록하며 R2의 데이터 파일 바로 옆에 저장됩니다.
HTTP 요청, Gateway DNS 등의 특정 로그 데이터 세트에 대한 SQL 쿼리가 주어지면 Log Explorer는 먼저 R2에서 해당하는 Delta 테이블의 트랜잭션 로그를 로드해야 합니다. 사용자가 로그를 쿼리할 때마다 전체 테이블 기록을 읽을 필요가 없도록 트랜잭션 로그를 주기적으로 검사합니다.
트랜잭션 로그에는 테이블에 대한 Parquet 파일이 나열되는 것 외에도 각 Parquet 파일에 대한 열별 최소/최대 통계가 포함됩니다. 이렇게 하면 Log Explorer가 사용자 쿼리를 충족할 수 있는 파일만 R2에서 가져오면 된다는 이점이 있습니다. 마지막으로 쿼리어는 각 Parquet 파일에 포함된 최소/최대 통계를 사용하여 파일에서 가져올 행 그룹을 결정합니다.
Log Explorer는 Rust로 작성된 빠르고 확장 가능한 쿼리 엔진인 Apache DataFusion과 Delta Lake 프로토콜의 커뮤니티 중심 Rust 구현인 delta-rs를 사용하여 SQL 쿼리를 처리합니다. 다른 이들의 성과를 활용하면서, 저희 팀에서는 Cloudflare 규모에서 로그 검색을 제공하기 위해 몇 가지 고유한 문제를 해결해야 했습니다.
Log Explorer는 125개 국가의 330여 개 도시에 걸쳐 있는 Cloudflare의 방대한 전역 네트워크에서 로그를 수집합니다. Log Explorer가 서버의 로그를 바로 R2에 기록한다면, 그 스토리지는 수많은 작은 파일로 빠르게 분할되어 로그 쿼리 비용이 엄청나게 비쌀 것입니다.
이러한 분할을 피하기 위한 Log Explorer의 전략은 세 가지입니다. 첫째, 에지에서 로그를 수집하고 일괄 처리하여 궁극적으로 Buftee라는 내부 시스템에서 각 로그 스트림을 버퍼링하는 Cloudflare의 데이터 파이프라인을 활용합니다. 둘째, Buftee에서 수집된 로그 일괄 처리가 트랜잭션 로그에 즉시 커밋되지 않습니다. 대신 Log Explorer는 중간 영역에서 여러 배치에 대한 커밋을 스테이징하고 이러한 커밋이 트랜잭션 로그에 작성되기 전에 '스쿼시'합니다. 셋째, 로그 배치가 커밋되면 압축이라는 프로세스가 백그라운드에서 로그 일괄 처리를 더 큰 파일로 병합합니다.
Delta Lake의 오픈 소스 구현으로 즉시 압축이 제공되지만, 워크로드에 사용할 때 곧 문제가 발생했습니다. 스톡 압축은 파일 크기를 역순으로 정렬하고 크기 S의 빈을 탐욕스럽게 채워서 데이터 파일을 원하는 대상 크기 S로 병합합니다. 이 프로세스는 타임스탬프와 관계없이 로그를 병합함으로써 수집된 배치를 병합된 파일에 무작위로 분산시켜 데이터 지역성이 파괴되었습니다. 압축에도 불구하고 사용자가 특정 시간 프레임을 쿼리하면 여전히 R2에서 수백 또는 수천 개의 파일을 가져오게 됩니다.
이러한 이유로 저희는 앞서 언급한 최소/최대 통계를 활용하여 최소 로그 타임스탬프 순서로 수집된 배치를 병합하는 사용자 지정 압축 알고리즘을 작성했습니다. 이 알고리즘 덕분에 병합된 파일 간의 중복 수가 두 자릿수까지 줄었습니다. 그 결과, 이전에는 1분 이상 걸리던 일부 대규모 쿼리를 단 몇 초 만에 완료하는 등 쿼리 성능이 크게 향상되는 것을 확인했습니다.
팔로우하여 더 많은 업데이트를 받아보세요
이제 시작일 뿐입니다! 저희는 Log Explorer 사용 경험을 더욱 개선하기 위해 더 강력한 기능을 적극적으로 개발하고 있습니다. 블로그를 구독하고 변경 로그에서 관찰 가능성 및 포렌식 제품에 대한 더 많은 업데이트를 조만간 확인하세요.
Log Explorer에 액세스
Log Explorer에 액세스하려면 상담을 신청하거나 계정 관리자에게 문의하세요. 또한 개발자 문서에서 자세한 내용을 읽어볼 수 있습니다.