ClickStack & HyperDX HOLs
GitHub

OTel profiles

Composable OpenTelemetry collector configuration, one fragment per class of machine. ClickStack ingests everything through OTel, so what a GPU node, a bare-metal server with a BMC, a KVM hypervisor and a vSphere cluster each need is a different set of receivers — not a different stack. These are those sets, written so they merge rather than replace each other.

Read CONVENTIONS.md before adding or editing one. The first three rules there are not style: breaking one disables ClickStack's own ingestion with no error at startup.

Profiles

Profile Tier Collects deploy.platform
linux-host A OS metrics and syslog from any Linux machine host
gpu-nvidia A NVIDIA GPU telemetry via dcgm-exporter gpu
baremetal-node A in-band hwmon plus out-of-band BMC sensors baremetal
virt-kvm A KVM/libvirt per-domain counters and hypervisor OS vm
virt-vsphere B vSphere clusters, hosts, VMs, datastores vm
mysql A+B self-managed MySQL: engine metrics, error and slow query logs host
aws-rds-mysql B MySQL on RDS: engine metrics plus CloudWatch instance metrics, Enhanced Monitoring and logs managed

None carry a Verified on … line yet: each needs its own class of hardware (or, for aws-rds-mysql, a real RDS instance) to run against, and per AGENTS.md the claim waits for an end-to-end run confirmed by SQL.

Tier A and Tier B

ClickStack does not ship otelcol-contrib. It is an OCB build (otelcol-hyperdx) whose receivers are only nop, otlp, datadog, dockerstats, filelog, fluentforward, hostmetrics, k8scluster, kubeletstats, prometheus and statsd.

Tier Ships Runs where
A custom.config.yaml inside ClickStack, merged into its config
B sidecar.config.yaml a separate contrib collector, OTLP to ClickStack

The prometheus receiver is why most hardware profiles stay in Tier A: scraping an exporter that already exists needs no new receiver, and dcgm-exporter, node_exporter, ipmi_exporter and the libvirt exporters all speak Prometheus.

Use

Merge the profiles you want into one file — ClickStack takes exactly one custom config:

./bin/build-config.sh linux-host gpu-nvidia > custom.config.yaml

Mount it and point ClickStack at it:

docker run --name clickstack \
  -p 8080:8080 -p 4317:4317 -p 4318:4318 \
  -e CUSTOM_OTELCOL_CONFIG_FILE=/etc/otelcol-contrib/custom.config.yaml \
  -v "$(pwd)/custom.config.yaml:/etc/otelcol-contrib/custom.config.yaml:ro" \
  -v /:/hostfs:ro \
  clickhouse/clickstack-all-in-one:latest

Tier B instead builds a sidecar config and runs it next to ClickStack:

./bin/build-config.sh --tier b virt-vsphere > sidecar/sidecar.config.yaml
cd sidecar && docker compose --env-file .env up -d

Profiles compose because each names its components and pipelines after itself, so a deep merge has nothing to reconcile. build-config.sh refuses the merge if two profiles ever do collide on a pipeline name.

Checks

./bin/lint.sh                                  # conventions, all profiles
./bin/build-config.sh linux-host > /dev/null   # merge cleanly
CH_URL=http://localhost:8123 ./bin/verify.sh linux-host

verify.sh runs the profile's verify.sql against ClickHouse and prints each result. An empty result means nothing was ingested — a failed verification, not a pass.

Layout

Path What it is
CONVENTIONS.md the rules every profile follows, and why
bin/build-config.sh merge selected profiles into one config
bin/lint.sh enforce the conventions
bin/verify.sh run a profile's verify.sql
common/resource.yaml shared resourcedetection, merged into every Tier A build
sidecar/ Tier B base config and compose file
profiles/<name>/ README.md, config fragment, .env.example, metrics.md, verify.sql

Reference versions

Written against HyperDX 2.39.1, collector components 0.155.0, core 1.61.0, semantic conventions 1.44.0. The hw.* hardware conventions are at Development stability, and the vcenter receiver is alpha — pin your sidecar image.


장비군별로 하나씩 나눈, 조합 가능한 OpenTelemetry 컬렉터 설정입니다. ClickStack은 모든 것을 OTel로 입수하므로, GPU 노드·BMC 달린 베어메탈·KVM 하이퍼바이저·vSphere 클러스터에 각각 필요한 것은 다른 스택이 아니라 다른 리시버 조합입니다. 이 디렉토리가 그 조합들이며, 서로를 교체하지 않고 병합되도록 작성했습니다.

프로파일을 추가하거나 수정하기 전에 CONVENTIONS.md를 읽으세요. 거기 첫 세 규칙은 취향이 아닙니다. 하나만 어겨도 시작 시 아무 오류 없이 ClickStack 자체 수집이 멈춥니다.

프로파일

프로파일 Tier 수집 대상 deploy.platform
linux-host A 모든 Linux 머신의 OS 지표와 syslog host
gpu-nvidia A dcgm-exporter 경유 NVIDIA GPU 텔레메트리 gpu
baremetal-node A in-band hwmon과 out-of-band BMC 센서 baremetal
virt-kvm A KVM/libvirt 도메인별 카운터와 하이퍼바이저 OS vm
virt-vsphere B vSphere 클러스터·호스트·VM·데이터스토어 vm
mysql A+B 자체 운영 MySQL: 엔진 지표, 에러·슬로우 쿼리 로그 host
aws-rds-mysql B RDS의 MySQL: 엔진 지표 + CloudWatch 인스턴스 지표·Enhanced Monitoring·로그 managed

아직 어느 프로파일에도 Verified on … 줄이 없습니다. 각각 해당 장비군이(또는 aws-rds-mysql은 실제 RDS 인스턴스가) 있어야 실행할 수 있고, AGENTS.md에 따라 SQL로 확인한 end-to-end 실행 전에는 그 주장을 쓰지 않습니다.

Tier A와 Tier B

ClickStack은 otelcol-contrib를 쓰지 않습니다. OCB 빌드(otelcol-hyperdx)이고 리시버가 nop, otlp, datadog, dockerstats, filelog, fluentforward, hostmetrics, k8scluster, kubeletstats, prometheus, statsd뿐입니다.

Tier 제공 파일 실행 위치
A custom.config.yaml ClickStack 내부, 설정에 병합
B sidecar.config.yaml 별도 contrib 컬렉터, OTLP로 ClickStack에 전달

대부분의 하드웨어 프로파일이 Tier A에 머무는 이유는 prometheus 리시버입니다. 이미 있는 exporter를 스크레이프하는 데는 새 리시버가 필요 없고, dcgm-exporter, node_exporter, ipmi_exporter, libvirt exporter가 모두 Prometheus를 씁니다.

사용

ClickStack은 커스텀 설정을 딱 하나만 받으므로, 원하는 프로파일을 하나로 병합합니다.

./bin/build-config.sh linux-host gpu-nvidia > custom.config.yaml

마운트하고 ClickStack이 그것을 읽게 합니다.

docker run --name clickstack \
  -p 8080:8080 -p 4317:4317 -p 4318:4318 \
  -e CUSTOM_OTELCOL_CONFIG_FILE=/etc/otelcol-contrib/custom.config.yaml \
  -v "$(pwd)/custom.config.yaml:/etc/otelcol-contrib/custom.config.yaml:ro" \
  -v /:/hostfs:ro \
  clickhouse/clickstack-all-in-one:latest

Tier B는 사이드카 설정을 만들어 ClickStack 옆에서 실행합니다.

./bin/build-config.sh --tier b virt-vsphere > sidecar/sidecar.config.yaml
cd sidecar && docker compose --env-file .env up -d

각 프로파일이 컴포넌트와 파이프라인에 자기 이름을 붙이기 때문에 깊은 병합으로 충돌할 것이 없습니다. 혹시라도 두 프로파일이 같은 파이프라인 이름을 쓰면 build-config.sh가 병합을 거부합니다.

검사

./bin/lint.sh                                  # 전체 프로파일 규약 검사
./bin/build-config.sh linux-host > /dev/null   # 병합 확인
CH_URL=http://localhost:8123 ./bin/verify.sh linux-host

verify.sh는 프로파일의 verify.sql을 ClickHouse에 실행하고 결과를 출력합니다. 결과가 비었다면 아무것도 입수되지 않은 것이며, 통과가 아니라 검증 실패입니다.

구조

경로 설명
CONVENTIONS.md 모든 프로파일이 따르는 규칙과 그 이유
bin/build-config.sh 선택한 프로파일을 하나의 설정으로 병합
bin/lint.sh 규약 검사
bin/verify.sh 프로파일의 verify.sql 실행
common/resource.yaml 공통 resourcedetection, 모든 Tier A 빌드에 병합
sidecar/ Tier B 베이스 설정과 compose 파일
profiles/<name>/ README.md, 설정 조각, .env.example, metrics.md, verify.sql

기준 버전

HyperDX 2.39.1, 컬렉터 컴포넌트 0.155.0, core 1.61.0, semantic conventions 1.44.0을 기준으로 작성했습니다. hw.* 하드웨어 규약은 Development 단계이고 vcenter 리시버는 alpha이므로, 사이드카 이미지 태그를 고정하세요.

Open this lab on GitHub →GitHub에서 이 실습 열기 →