운영 환경으로 이전하기
운영 환경에 ClickStack을 배포할 때는 보안, 안정성 및 올바른 구성을 보장하기 위해 추가로 고려해야 할 사항이 있습니다. 이러한 사항은 사용 중인 배포판이 오픈 소스인지 관리형인지에 따라 달라집니다.
- 관리형 ClickStack
- ClickStack 오픈 소스
프로덕션 배포에서는 Managed ClickStack을 사용하는 것이 권장됩니다. 기본적으로 업계 표준 보안 모범 사례를 적용하며, 강화된 암호화, 인증 및 연결, 관리형 액세스 제어를 포함하고, 다음과 같은 이점을 제공합니다:
- 스토리지와 독립적인 컴퓨트의 자동 확장
- 객체 스토리지를 기반으로 한 저비용의 사실상 무제한 보존
- Warehouse를 사용해 읽기 및 쓰기 워크로드를 독립적으로 격리하는 기능
- 통합된 인증
- 자동화된 백업
- 끊김 없는 업그레이드
Managed ClickStack를 사용할 때에는 ClickHouse Cloud에 대한 다음 모범 사례를 따르십시오.
수집 보안
기본적으로 ClickStack OpenTelemetry Collector는 오픈 소스 배포판 외부에 배포될 때 보안이 적용되지 않으며, OTLP 포트에서 인증을 요구하지 않습니다.
수집을 보호하려면 OTLP_AUTH_TOKEN 환경 변수를 사용하여 collector를 배포할 때 인증 토큰을 지정하십시오. 자세한 내용은 「Securing the collector」를 참조하십시오.
수집 전용 사용자 생성
Managed ClickHouse로의 수집을 위해 OTel collector 전용 사용자를 생성하고, 수집이 otel과 같은 특정 데이터베이스로 전송되도록 하는 것이 좋습니다. 자세한 내용은 「Creating an ingestion user」를 참조하십시오.
Time To Live (TTL) 구성
Managed ClickStack 배포에 대해 Time To Live (TTL)이 적절히 구성되어 있는지 확인하십시오. 이는 데이터가 얼마나 오래 보존되는지를 제어하며, 기본값인 3일은 종종 변경이 필요합니다.
리소스 추정
다음은 예상 수집 볼륨을 기준으로 ClickStack 배포에 필요한 컴퓨팅 및 스토리지 리소스를 추정하기 위한 모델입니다. 산출되는 값은 추정치일 뿐이며 초기 기준선으로 사용해야 합니다. 이는 규범적인 정답이 아닙니다. 실제 요구 사항은 쿼리 복잡도, 동시성, 보존 정책, 수집 처리량의 변동성에 따라 달라집니다. 항상 리소스 사용량을 모니터링하고 필요에 따라 스케일링하십시오.
이 페이지의 모든 수치(처리량(MB/s, TB/월), CPU 산정, 스토리지)는 압축되지 않은 원시 수집 볼륨, 즉 애플리케이션에서 생성되어 압축이 적용되기 전에 OpenTelemetry collector로 전송되는 데이터 크기를 기준으로 표시됩니다.
기존 로그, 트레이스, 메트릭 파이프라인을 바탕으로 추정해야 하는 값이 바로 이 수치입니다. 아래 표의 스토리지 수치에는 이 원시 볼륨에 대해 가정한 10배 압축률이 이미 적용되어 있습니다.
ClickStack을 배포할 때는 수집과 쿼리라는 두 개의 독립적인 워크로드를 처리할 수 있도록 컴퓨팅 리소스를 프로비저닝하십시오.
| Workload | Estimated resources |
|---|---|
| Ingest | 지속적인 수집 처리량 10 MB/s당 1 vCPU |
| Query | 1 QPS당 1 vCPU, 그리고 지속적인 수집 처리량 10 MB/s당 1 vCPU |
대부분의 자가 관리형 배포에서는 수집과 쿼리가 동일한 노드를 공유합니다. 이 경우 Total CPUs를 기준선으로 사용하십시오. 수집과 쿼리 컴퓨팅을 독립적으로 프로비저닝하는 격리형 스케일링은 ClickHouse Cloud에서 별도의 compute pool(즉, Warehouse)을 통해 지원됩니다.
가정
- 스토리지의 경우 10배 압축률을 가정하며, 이는 일반적으로 로그와 트레이스에서 보수적인 수치입니다.
- 쿼리 SLA는 P50 1.5초, P99 5초를 가정합니다.
- 대부분의 쿼리는 최근 데이터에 대해 발생하며, 약 1시간 부근에서 정점을 찍고 약 6시간까지 꼬리가 이어지는 로그 정규 분포를 따른다고 가정합니다. 오래된 데이터를 쿼리하기 위해 전용 컴퓨팅을 프로비저닝할 수도 있습니다. ClickHouse Cloud에서는 사용하지 않을 때 이를 idle 상태로 둘 수 있으므로(따라서 비용이 발생하지 않음) 효율적으로 운영할 수 있습니다.
- 쿼리 컴퓨팅은 수집 컴퓨팅과 독립적으로 스케일링할 수 있지만, 본질적으로는 여전히 수집 볼륨과 연결되어 있습니다. 수집이 증가하면 데이터 밀도도 높아져 쿼리 시 스캔 볼륨이 커지고, 그 결과 더 많은 쿼리 컴퓨팅이 필요하다고 가정합니다.
다음 표는 초당 메가바이트 단위의 수집 처리량이 증가할 때의 예시 산정값과, 이에 대응하는 월간 테라바이트 단위 데이터 볼륨을 보여줍니다. 이는 모든 쿼리 유형(검색, 대시보드, 알림) 전반에서 ClickStack의 1 QPS 지속 평균을 가정합니다.
| MB/s | TB/month | Ingest CPUs | Query CPUs | Total CPUs | Total Storage (per month) (GB) |
|---|---|---|---|---|---|
| 10 | 25.92 | 1 | 3 | 4 | 2,592 |
| 20 | 51.84 | 2 | 6 | 8 | 5,184 |
| 50 | 129.6 | 5 | 15 | 20 | 12,960 |
| 100 | 259.2 | 10 | 30 | 40 | 25,920 |
| 200 | 518.4 | 20 | 60 | 80 | 51,840 |
| 500 | 1,296 | 50 | 150 | 200 | 129,600 |
| 1000 | 2,592 | 100 | 300 | 400 | 259,200 |
환경에 맞는 사이징 가정을 더 정교하게 조정하는 방법에 대한 자세한 내용은 「Refining sizing assumptions for your environment」를 참조하십시오.
관측성 워크로드 격리
이미 실시간 애플리케이션 분석 등 다른 워크로드를 지원하는 기존 ClickHouse Cloud 서비스에 ClickStack을 추가하는 경우, 관측성 트래픽을 격리하는 것이 강력히 권장됩니다.
Managed Warehouses를 사용하여 ClickStack 전용 하위 서비스를 생성하십시오. 이를 통해 다음을 수행할 수 있습니다:
- 기존 애플리케이션으로부터 수집 및 쿼리 부하를 격리
- 관측성 워크로드를 독립적으로 확장
- 관측성 쿼리가 프로덕션 분석에 영향을 주지 않도록 방지
- 필요한 경우 여러 서비스에서 동일한 기반 데이터셋을 공유
이 접근 방식은 ClickStack이 관측성 데이터 증가에 따라 독립적으로 확장되도록 하면서, 기존 워크로드가 영향을 받지 않도록 보장합니다.
대규모 배포 또는 맞춤형 사이징 지침이 필요한 경우, 보다 정확한 추정을 위해 지원팀에 문의하십시오.
네트워크 및 포트 보안
기본적으로 Docker Compose는 호스트에서 포트를 노출하여 컨테이너 외부에서 접근 가능하도록 합니다. ufw(Uncomplicated Firewall)와 같은 도구가 활성화되어 있는 경우에도 마찬가지입니다. 이는 Docker 네트워킹 스택이 명시적으로 구성되지 않는 한 호스트 수준의 방화벽 규칙을 우회할 수 있기 때문입니다.
권장사항:
프로덕션 사용에 필요한 포트만 노출하세요. 일반적으로 OTLP 엔드포인트, API 서버, 프론트엔드가 해당됩니다.
예를 들어 docker-compose.yml 파일에서 불필요한 포트 매핑을 제거하거나 주석 처리하세요:
컨테이너 격리 및 액세스 강화에 대한 자세한 내용은 Docker 네트워킹 문서를 참조하십시오.
세션 시크릿 설정
프로덕션 환경에서는 세션 데이터를 보호하고 변조를 방지하기 위해 ClickStack UI(HyperDX)의 EXPRESS_SESSION_SECRET 환경 변수에 강력하고 무작위한 값을 설정해야 합니다.
앱 서비스의 docker-compose.yml 파일에 추가하는 방법은 다음과 같습니다:
openssl을 사용하여 강력한 시크릿을 생성하세요:
시크릿을 소스 제어에 커밋하지 마십시오. 프로덕션 환경에서는 환경 변수 관리 도구(예: Docker Secrets, HashiCorp Vault 또는 환경별 CI/CD 구성)를 사용하십시오.
수집 보안
모든 수집은 ClickStack 배포판의 OpenTelemetry(OTel) collector가 노출하는 OTLP 포트를 통해 이루어져야 합니다. 기본적으로 시작 시 생성되는 보안 수집 API key가 필요합니다. 이 키는 OTel 포트로 데이터를 전송할 때 필요하며, HyperDX UI의 Team Settings → API Keys에서 확인할 수 있습니다.

또한 OTLP 엔드포인트에 대해 TLS를 활성화하는 것을 권장합니다.
수집 사용자 생성하기
ClickHouse로 데이터를 수집하기 위해 OTel collector 전용 사용자를 생성하고, 수집된 데이터가 특정 데이터베이스(예: otel)로 전송되도록 설정하는 것을 권장합니다. 자세한 내용은 "수집 사용자 생성"을 참조하세요.
ClickHouse
자체 ClickHouse 인스턴스를 관리하는 경우 다음 모범 사례를 준수하십시오.
보안 모범 사례
자체 ClickHouse 인스턴스를 관리하는 경우, TLS를 활성화하고 인증을 강제하며 접근 강화를 위한 모범 사례를 따르는 것이 필수입니다. 실제 잘못된 구성 사례와 이를 방지하는 방법에 대한 내용은 이 블로그 게시물을 참조하세요.
ClickHouse OSS는 기본적으로 강력한 보안 기능을 제공합니다. 하지만 이를 사용하려면 구성이 필요합니다:
- TLS를 사용하십시오.
tcp_port_secure및config.xml의<openSSL>을 통해 설정합니다. 자세한 내용은 guides/sre/configuring-tls를 참조하십시오. - 강력한 비밀번호를 설정하거나
default사용자를 비활성화하십시오. - 명시적으로 그렇게 설정하려는 경우가 아니라면 ClickHouse를 외부에서 접근 가능하도록 노출하지 마십시오. 기본적으로 ClickHouse는
listen_host를 수정하지 않는 한localhost에만 바인딩합니다. - 비밀번호, 인증서, SSH 키 또는 외부 인증자(external authenticators)와 같은 인증 방법을 사용하십시오.
- IP 필터링과
HOST절을 사용하여 접근을 제한합니다. sql-reference/statements/create/user#user-host를 참고하십시오. - 역할 기반 접근 제어(Role-Based Access Control, RBAC)를 활성화하여 세분화된 권한을 설정합니다. operations/access-rights를 참고하십시오.
- 쿼터와 제한을 강제 적용하기 위해 쿼터, 설정 프로필, 그리고 읽기 전용 모드를 사용합니다.
- 저장 데이터 암호화를 적용하고 안전한 외부 스토리지를 사용하십시오. 자세한 내용은 operations/storing-data 및 cloud/security/CMEK를 참조하십시오.
- 자격 증명을 하드코딩하지 마십시오. named collections 또는 ClickHouse Cloud의 IAM 역할을 사용하십시오.
- 액세스 및 쿼리를 감사할 때 system logs 및 session logs를 사용하십시오.
사용자 관리 및 쿼리/리소스 제한 설정에 대한 자세한 내용은 외부 인증자 및 쿼리 복잡도 설정을 참조하세요.
ClickStack UI에 대한 사용자 권한
ClickStack UI용 ClickHouse 사용자는 다음 설정을 변경할 수 있는 권한을 가진 readonly 사용자면 충분합니다:
max_rows_to_read(최소 100만 행 이상으로)read_overflow_modecancel_http_readonly_queries_on_client_closewait_end_of_query
기본적으로 OSS와 ClickHouse Cloud 모두에서 default 사용자가 이러한 권한을 보유하고 있으나, 해당 권한을 가진 새로운 사용자를 생성하시기를 권장합니다.
TTL(Time To Live) 구성
ClickStack 배포에 대해 TTL(Time To Live)이 적절하게 구성되어 있는지 확인하십시오. TTL은 데이터 보관 기간을 제어하며, 기본값 3일은 대부분의 경우 수정이 필요합니다.
MongoDB 가이드라인
공식 MongoDB 보안 체크리스트를 참고하십시오.