ClickStack: Clickhouse ๊ธฐ๋ฐ APM
Clickhouse๋ ๊ทผ๋ ๊ฐ์ฅ ํซํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ
์ค ํ๋๋ค.
์์ฆ APM ํ๊ฒฝ์ผ๋ก๋ ๊ฐ๊ด๋ฐ๊ณ ์๋๋ฐ, ํนํ ๋๊ธฐ์
์์ ๋ง์ด ์ฐ๋๋ผ.
Clickhouse๋ ๋ค์๊ณผ ๊ฐ์ ํน์ฅ์ ์ด ์๋ค.
- ๋งค์ฐ ๋์ ์คํ ๋ฆฌ์ง ์ ์ฅ ํจ์จ: ์์ถ์ ๋นก์ธ๊ฒ ํ๊ธฐ ๋๋ฌธ
- ๋งค์ฐ ๋์ ์ฑ๋ฅ์ ์ฟผ๋ฆฌ ์ฑ๋ฅ: ๋์ ๋์ ์ฟผ๋ฆฌ ์ฒ๋ฆฌ๋์ด ์ ์ง๋ง, APM ์์ฒด์ ํน์ฑ ๋๋ฌธ์ ์์๋จ
- ๋์์ง ์์ ์ฑ๋ฅ์ INSERT ์ฒ๋ฆฌ๋: ์นด์ฐ๋๋ผ ๊ฐ์ ๊ณ ์ฑ๋ฅ KV์ ๋นํ ๋ฐ๋ ์๋์ง๋ง, async insert ๋ฑ ๋ฒํผ๋ง ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ๊ฝค ์ฒ๋ฆฌ๋์ด ์ข์
- ์ปฌ๋ผํ ์ ์ฅ๊ตฌ์กฐ
- ์๊ณ์ด ๋ฐ์ดํฐ์ ์ ๋ฆฌํจ: ํํฐ์ ํค๋ฅผ ํ์์คํฌํ ๊ธฐ๋ฐ์ผ๋ก ์ค๊ณํ๋ฉด ํจ์จ์ ์ธ ํํ๋ก ์ ์ฌ/์กฐํ๊ฐ ๊ฐ๋ฅ
- ๋จ์ผ ์์ค๋ก ๊ด๋ฆฌํฌ์ธํธ ํต์ผ ๊ฐ๋ฅ (Loki, Prometheus, Tempo 3๊ฐ๋ฅผ ๋์์ ๋์์ ๊ด๋ฆฌํด์ผํ๋ ๊ด๊ธฐ์์ ๋ฒ์ด๋ ์ ์์)
์ํคํ ์ณ
๊ธฐ๋ณธ ๊ตฌ์ฑ์์๋ ์ฌํํ ํธ์ด๋ค.
Clickhouse๋ฅผ ๋จ์ผ ์คํ ๋ฆฌ์ง๋ก ์ฌ์ฉํ๊ณ , Otel ์์ด์ ํธ๋ก ๋ก๊ทธ๋ฅผ ์๊ณ , HyperDX๋ผ๋ ๋์๋ณด๋๋ก ๋ก๊ทธ๋ฅผ ๋ณด๋ ์์ด๋ค.
๋งค์ฐ ๋์ ์ฒ๋ฆฌ๋์ ๊ฐ๋นํ๊ธฐ ์ํด์ ์๋จ์ ์นดํ์นด ๊ฐ์๊ฑธ ๋ถ์ด๊ธฐ๋ ํ๊ณ , ์คํ ๋ฆฌ์ง ๊ธฐ๋ฐ์ ๊ณ์ธตํ ๊ตฌ์ฑ์ ํ๊ธฐ๋ ํ๋ค. ํ์ง๋ง ์ผ๋จ ๊ฐ๋ณ๊ฒ ์์ํ๊ธฐ์๋ ์ด ์ ๋๋ก๋ ์ถฉ๋ถํ๋ค.
๋์๋ณด๋์ ์คํผ์
์ ํ์ง๋ HyperDX์ธ๋ฐ, HyperDX ์ธ์๋ Grafana, Signoz๋ฅผ ๋์์ผ๋ก ์ฌ์ฉํ ์ ์๋ค. ์ทจํฅ์ ๋ง์ถฐ์ ๊ณ ๋ฅด๋ฉด ๋๋ค.
HyperDX๋ clickhouse์์ ์ธ์ํด์ ๊ด๋ฆฌํ๋ ์ค์ด๊ณ , Signoz๋ ํ์ด ๊ทธ๋ ๊ฒ ์ข์ง ๋ชปํ ๊ฒ ๊ฐ๋๋ผ. Grafana๋ Clickhouse์ฉ ํ๋ฌ๊ทธ์ธ์ ์ค์นํ๋ฉด ๋ถ์ผ ์ ์์ง๋ง, ์์ฃผ ํนํ๋์ด์์ง ์๋ค.
๊ทธ๋์ Grafana + HyperDx๋ฅผ ๋ณํ์ผ๋ก ์ฌ์ฉํ๋ ์ฌ๋ก๊ฐ ๋ง์ ๊ฒ ๊ฐ๋ค.
์ฐธ๊ณ ๋ก HyperDX๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ํ/์ค์ ๊ด๋ฆฌ์ MongoDB๋ฅผ ์ฐ๋ ๊ฒ์ด ๊ธฐ๋ณธ๊ฐ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ๋งค์ฐ ๋์ ์ฒ๋ฆฌ๋๊ณผ ๋น์ฉ ํจ์จ์ฑ์ ์ํ๋ค๋ฉด, ์ด๋ฐ ์์ผ๋ก ํ์ฅํ ์ ์๋ค.

- ์ฐ๊ธฐ ์ฒ๋ฆฌ๋ ๊ฐ๋ ๊ณ์ธต: ์นดํ์นด ๊ฐ์ ๊ณ ์ฑ๋ฅ ์คํ ๋ฆฌ์ง๋ฅผ ์ค๊ฐ์ ๋ฌ์ ์ผ๋จ clickhouse์ ๊ฐํด์ง๋ ์๊ฐ ๋ถํ๋ฅผ ์ํํ๊ณ , batch insert๋ฅผ ํจ์จ์ ์ผ๋ก ํ ์ ์๋๋ก ํ๋ค.
- ์คํ ๋ฆฌ์ง ํจ์จ์ฑ ๊ณ์ธต: ์ค๋๋ ๋ก๊ทธ๋ฅผ S3 ๊ฐ์ ์ ๋ ดํ ์คํ ๋ฆฌ์ง๋ก exportํ๋, ์ด ๋ํ clickhouse๋ฅผ ํตํด์ ์กฐํํ ์ ์๋๋ก ํ๋ค. ์ฝ์ ๋๋ง S3 ๋น์ฉ์ด ๋์ค๊ณ , ์ ์ฅ๋น์ฉ์ ๋์คํฌ์ ๋นํด ์๋์ ์ผ๋ก ์ ๋ ดํ๋ค.
Docker๋ก ์์ํด๋ณด๊ธฐ (๋จ์ผ ์ด๋ฏธ์ง)
๊ฐ์ฅ ๋น ๋ฅด๊ฒ ์์ํ๋ ๋ฐฉ๋ฒ์ Clickhouse ์กฐ์ง์์ ๋ง๋ค์ด๋์ ๋จ์ผ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
ํ๋์ ์ด๋ฏธ์ง์ clickhouse, otel collector, hyperdx, mongodb๋ฅผ ๋ค ๋ง์๋์ ๊ตฌ์ฑ์ด๋ค.
๊ทธ๋ฅ ๋น ๋ฅด๊ฒ ์์ํ๊ธธ ์ํ๋ค๋ฉด docker cli๋ก ๋ฐ๋ก ์์ํ๋ฉด ๋๊ณ
docker run --name clickstack -p 8123:8123 -p 8080:8080 -p 4317:4317 -p 4318:4318 clickhouse/clickstack-all-in-one:latest clickstack
์กฐ๊ธ ๋ ์์์ ์ผ๋ก, ์ปค์คํ ํ๋ฉฐ ๊ด๋ฆฌํ๊ธธ ์ํ๋ค๋ฉด compose๋ฅผ ์ฐ๋ฉด ๋๋ค.
services:
clickstack:
image: ${CLICKSTACK_IMAGE}
container_name: clickstack
restart: unless-stopped
mem_limit: 12g # total memory ceiling for the all-in-one container
environment:
# Absolute base for post-login redirects. MUST match the external origin
# users reach the UI on (scheme://host:port), e.g. behind a tunnel/proxy.
# If unset it defaults to http://localhost:8080, which breaks login for
# anyone not browsing from the host itself.
- FRONTEND_URL=${FRONTEND_URL}
- CLICKHOUSE_DEFAULT_PASSWORD=${CLICKHOUSE_DEFAULT_PASSWORD}
- CLICKHOUSE_API_PASSWORD=${CLICKHOUSE_API_PASSWORD}
- CLICKHOUSE_WORKER_PASSWORD=${CLICKHOUSE_WORKER_PASSWORD}
ports:
- "${HYPERDX_PORT}:8080" # HyperDX UI
- "${OTLP_GRPC_PORT}:4317" # OTLP gRPC
- "${OTLP_HTTP_PORT}:4318" # OTLP HTTP
- "8123:8123" # ClickHouse HTTP
volumes:
- ch_data:/var/lib/clickhouse
- ch_logs:/var/log/clickhouse-server
- mongo_data:/data/db
- ./clickhouse/config.d:/etc/clickhouse-server/config.d:ro
- ./clickhouse/users.xml:/etc/clickhouse-server/users.xml:ro
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080"]
interval: 30s
timeout: 5s
retries: 5
start_period: 60s
volumes:
ch_data:
ch_logs:
mongo_data:
์๋ฌ ์์ด ์คํ๋๋ฉด ์ ๋ ๊ฒ์ด๋ค.
Kubernetes๋ก ์์ํ๊ธฐ (v2)
์ฟ ๋ฒ๋ฅผ ์ด๋ค๋ฉด ์ข ๋ ์ ๋๋ก ๋ ๊ตฌ์ฑ์ ๋น๊ต์ ๊ฐํธํ๊ฒ ์ธํ
ํ ์ ์๋ค.
์๋ค helm chart ๋ฒ์ ๊ด๋ฆฌ๋ ๊ณต์ ๋ฌธ์ ๊ด๋ฆฌ๊ฐ ๊ฐํ์ด๋ผ ๊ทธ๋ฅ ๋ฐ๋ผ์ latest๋ก ๋ฐ์ผ๋ฉด ํฐ์ง๋ ์ํฉ์ด๋ค. ํญ์ ๋ฒ์ ์ ๋ช
์ํด์ผ ํ๋ค.
# cert manager๊ฐ ์๋ค๋ฉด ์ค์น
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.20.3/cert-manager.yaml
# helm ์ด๊ธฐํ
helm repo add clickstack https://clickhouse.github.io/ClickStack-helm-charts
helm repo add mongodb https://mongodb.github.io/helm-charts
helm repo update
# mongodb ์ค์น (hyperDX ์ํ ๊ด๋ฆฌ)
helm install mongodb-kubernetes-operator mongodb/mongodb-kubernetes \
--set operator.watchNamespace=clickstack
# operator ์ค์น
helm install clickhouse-operator oci://ghcr.io/clickhouse/clickhouse-operator-helm \
--create-namespace \
-n clickhouse-operator-system \
--version v0.0.6


operator๊ฐ ์ ์คํ๋๋ค๋ฉด, clickstack์ ๋ณธ๊ฒฉ์ ์ผ๋ก ๊น๋ฉด ๋๋ค.
helm install my-clickstack clickstack/clickstack --version 2.1.1 -n clickstack --create-namespace

๋ฐฐํฌํ๊ณ ๋์ ์กฐ๊ธ๋ง ๊ธฐ๋ค๋ฆฌ๋ฉด

์ด๋ ๊ฒ ๋ค ๋ฐ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ฉด ์ด์ ๊ฐ๋ณ service๋ฅผ ์ด๊ฑฐ๋ ํฌํธํฌ์๋ฉํด์ ๋ถ์ฌ๋ณผ ์ ์๋ค.
๋์๋ณด๋๊ฐ app์ด๋ผ๋ service์ด๊ณ , ๋ก๊ทธ ์์ง ์๋ํฌ์ธํธ๋ otel-collector๋ผ๋ service๋ฅผ ์ฐ๋ฉด ๋๋ค.
kubectl port-forward -n clickstack svc/my-clickstack-app 3000:3000
์์ธํ ๊ฒ๋ค์ ์คํตํ๋ค.
์ฌ์ฉํด๋ณด๊ธฐ
๋ง์ฝ Clickstack ํ๋ฆฌ์ ์ ํตํด ๊ตฌ์ฑํ๋ค๋ฉด, clickhouse์๋ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ณธ ํ ์ด๋ธ์ด ๊ตฌ์ฑ๋ ๊ฒ์ด๋ค.

๋ญ๊ฐ ๋ง๋ค.
๊ทธ๋ฆฌ๊ณ HyperDX์ ์ ์ํ๋ฉด, ์ต์ด ํ์๊ฐ์ ํ๋ฉด์ด ๋ฌ๋ค.
์ฌ๊ธฐ์ ๋ฃจํธ๊ณ์ ๋ง๋ค๋ฉด ๋๋ค.
๋ง๋ค๊ณ ๋ก๊ทธ์ธํด์ ๋ค์ด๊ฐ๋ฉด ๋ฐ๋ก ๊ทธ๋ด๋ฏํ๊ฒ ๊พธ๋ฉฐ์ง ํ๋ฉด์ด ๋ฐ ๊ฒ์ด๋ค.

์์ง์ฉ API Key๋ ์ฌ๊ธฐ์ ๋ณผ ์ ์๋ค.
์ด๊ฑธ ๋ค๊ณ Otel Collector์ ์๋ฉด ๋๋ค.

๊ทธ๋ฆฌ๊ณ ์ด๋ฐ ์์ผ๋ก ๋ฉํธ๋ฆญ๊ณผ Trace๋ค์ด ๊ฐ์ํ๋๋ค.
Grafana๋ณด๋จ Elastic APM(Kibana)์ ๊ฐ๊น์ด ์คํ์ผ์ด๋ค. ์ฌ์ ๊ตฌ์ฑ์ด ๊ทธ๋ด๋ฏํ๊ฒ ๋์ด์๊ณ , Grafana์ฒ๋ผ ์ ์ ์์ด ์กฐํฉํ๋ ์คํ์ผ์ ์๋๋ค.
์์ด์ ํธ๋ฅผ ๋ถ์ด๋ ๊ฒ ์์ฒด๋ ํ์ค Otel ํ๋กํ ์ฝ์ ๋ฐ๋ฅด๋ฉด ๋๋ค. ๊ฒฐ๊ตญ ์์ง ๊ณ์ธต์ด Otel๋ก ์ถ์ํ๋์ด์๊ธฐ ๋๋ฌธ์, Grafana ์คํ์ ์ฐ๋ ๊ฒ๊ณผ ํฐ ์ฐจ์ด๋ ์๋ค.
์ฐจ์ด๊ฐ ๋ฒ์ด์ง๋ ๋ถ๋ถ์ clickhouse์ ๋ํ ์ด์ ์คํฌ์ผ ๊ฒ์ด๋ค.
๋ก๊ทธ & ํธ๋ ์ด์ค ์์ง
๊ฐ๋จํ๊ฒ ์์ง์ ํด๋ณด๋ ค๋ฉด INGESTION Key๋ฅผ ๋ค๊ณ Otel Collector์ ์ฐ๋ฌ๋ณด๋ ๊ฒ์ด ๋น ๋ฅด๋ค.
์ด๊ฑด Trace๋ฅผ ํ๋. ์๋๋ค.
KEY=ํค๊ฐ
curl -s -w '\nHTTP=%{http_code}\n' -X POST http://localhost:4318/v1/traces \
-H "authorization: $KEY" -H 'content-type: application/json' \
-d "{\"resourceSpans\":[{\"resource\":{\"attributes\":[{\"key\":\"service.name\",\"value\":{\"stringValue\":\"probe-real\"}}]},\"scopeSpans\":[{\"spans\":[{\"traceId\":\
"5b8efff798038103d269b633813fc60c\",\"spanId\":\"eee19b7ec3c1b174\",\"name\":\"probe\",\"kind\":1,\"startTimeUnixNano\":\"${NOW}\",\"endTimeUnixNano\":\"${END}\"}]}]}]}"
๊ทธ๋ผ ์ด๋ฐ ์์ผ๋ก ์์ด๊ณ ๊ฐ์ํ๊ฐ ๋๋ค.
์ดํ์๋ Otel ํ๊ฒฝ์ ์ฌ์ฉํด์ ์ธ์ด์ ๋ง๊ฒ ์์ด์ ํธ๋ฅผ ๊ตฌํํ๋ฉด ๋๋ค.

๋ก๊ทธ๋ ์์งํ๋ฉด ์ด๋ฐ ์์ผ๋ก ์์ธ๋ค.
๋์๋ณด๋ ๊น๊ธฐ
์ํ๋ค๋ฉด Grafana์ฒ๋ผ Tile์ ํ๋ํ๋ ๋ถ์ฌ์ ์ปค์คํ
๋์๋ณด๋๋ฅผ ๋ง๋ค ์ ์๋ค.
์ฌ์ฉ๋ฒ์ ๋์ถฉ ๋น์ทํ๋ค.

๋์๋ณด๋์ Tile๋ค์ ์ ์ํด์ ๋ฃ๊ณ , ๋ ์ด์์์ ์ํ๋๋๋ก ๋ฐฐ์นํ ์ ์๋ค.

๋ก๊ทธ๋ ์ด๋ฐ ์์ผ๋ก ๊ฐ๋จํ๊ฒ ๋ถ์ผ ์ ์๋ค. Search Tile์ด ๊ฐ์ฅ ์ ์ ํ ๊ฒ ๊ฐ๋ค. ์๊ณ์ด๋ก ๋ณด์ฌ์ค๋ค.

๋ก๊ทธ ๋ฒ ์ด์ค๋ก ๋ก๊ทธ ๋ ๋ฒจ๋ณ ์นด์ดํธ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์ถ๋ค๋ฉด, ์ด๋ฐ ์์ผ๋ก ๊ตฌ์ฑํ ์ ์๋ค.
group by ์ ๋ง ๋์๋๋ ๊ฒ์ผ๋ก ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.

๋ฉํธ๋ฆญ์ ์ ์ฌ๋์ด์๋ ์งํ ์ค์ ์ ์ ํ ๊ณจ๋ผ์ ์ฐจํธ๋ก ๋ฃ์ผ๋ฉด ๋๋ค. ๋์ฒด๋ก Average๊ฐ ๋ถํฉํ๋ค.

์ปค์คํ ํํฐ๋ ์ ์ฉ ๊ฐ๋ฅํ๋ค. ๋ง์ฝ 'environment'๋ผ๋ ์ปค์คํ ์์ฑ์ ์ถ๊ฐํ๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ํํฐ ๋ฒํผ์ด ํ์ํ๋ค๋ฉด ์ด๋ ๊ฒ ์ถ๊ฐํ๋ฉด ๋๋ค.

๊ทธ๋ผ ์ด๋ ๊ฒ ์ ๊ฑธ๋ฆด ๊ฒ์ด๋ค.
๊พธ๋ฏธ๊ธฐ
Tile์ Display ์ธํ
์ ๊ฑด๋๋ฆฌ๋ฉด ์ด๋ฐ์ ๋ฐ ์กฐ์ ์ด ๊ฐ๋ฅํ๋ค.
๋ํ์ ์ธ ๊ฒ์ ์ซ์ ๋จ์ ํ๊ธฐ๋ค.
์ซ์๋ฅผ ํ์ํ ๋ ์ด๋ค ๋จ์๋ก ํ์ํ ์ง๋ฅผ ์ ํ ์ ์๋ค.
์๋ฅผ ๋ค์ด Data๋ก ํ๋ฉด

๋ฐ์ดํธ ๋จ์๊ณ๋ก ๋ณํํด์ค๋ค. ์๋ง ์ด๊ฑธ ์ ์ผ ์์ฃผ ์ฐ์ง ์์๊น ์ถ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ๋ฃน์ ์ฌ์ฉํ๋ฉด Tile๋ค์ ๋ฌถ์ด์ ๊น๋ํ๊ฒ ๊ด๋ฆฌํด์ค ์ ์๋ค.
TTL ๊ธฐ๋ฐ์ ๋ก๊ทธ ๋ง๋ฃ ์ค์
์ํ๋ค๋ฉด ์ด๊ฒ๋ TTL ๊ธฐ๋ฐ์ผ๋ก ๋ก๊ทธ๋ฅผ ์ ๊ฑฐํ๊ฑฐ๋, ์คํ ๋ฆฌ์ง ๊ณ์ธต์ผ๋ก ์ฎ๊ธธ ์ ์๋ค.
๋ก๊ทธ๋ฅผ ์ค๋ ๋ณด๊ดํ ํ์๊ฐ ์๋ค๋ฉด TTL ์ ๊ฑฐ๋ง์ผ๋ก๋ ์ถฉ๋ถํ ๊ฒ์ด๋ค.
-- 30-day retention for ClickStack telemetry.
-- ttl_only_drop_parts drops whole expired parts (lower merge overhead).
ALTER TABLE default.otel_logs MODIFY SETTING ttl_only_drop_parts = 1;
ALTER TABLE default.otel_logs MODIFY TTL Timestamp + toIntervalDay(30);
ALTER TABLE default.otel_traces MODIFY SETTING ttl_only_drop_parts = 1;
ALTER TABLE default.otel_traces MODIFY TTL Timestamp + toIntervalDay(30);
ALTER TABLE default.otel_metrics_gauge MODIFY TTL TimeUnix + toIntervalDay(30);
ALTER TABLE default.otel_metrics_sum MODIFY TTL TimeUnix + toIntervalDay(30);
ALTER TABLE default.otel_metrics_histogram MODIFY TTL TimeUnix + toIntervalDay(30);
ALTER TABLE default.otel_metrics_exponential_histogram MODIFY TTL TimeUnix + toIntervalDay(30);
ALTER TABLE default.otel_metrics_summary MODIFY TTL TimeUnix + toIntervalDay(30);
๊ทธ๋ด๋๋ ์ด๋ฐ ์ฟผ๋ฆฌ๋ง ๋ ๋ ค์ค๋ ์ถฉ๋ถํ๋ค. clickhouse ๋ด์์ 30์ผ๊น์ง๋ง ๋ณด๊ดํ๊ณ ์ง์ด๋ค.
๋ค๋ง, ๋์คํฌ ํฌ๊ธฐ ๊ธฐ์ค์ผ๋ก rotation์ ๋๋ฆฌ๋ ๊ฒ์ ์ง์ ์ ์ผ๋ก ์ง์๋์ง๋ ์๋๋ค.
๊ทธ๊ฑด ์ง์ ๊ตฌํํด์ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ๋๋ ค์ผ ํ๋ค.
์์ฌ์ด ์ ๋ค
๋น์ฐํ์ง๋ง ๋ชจ๋ ๊ธฐ์ ์๋ ๋งน์ ์ด ์๊ณ , ์ด ์คํ๋ ๋ง์ฐฌ๊ฐ์ง๋ค.
(์คํ์์ค๋ฅผ ์ด๋ค๋ฉด) helm์ ๋น๋กฏํ ํจํค์ง ์์ค์ด ๊ทธ๋ ๊ฒ ์ข์ง ๋ชปํ๋ค. ์ด์ฌํ ๋ง๋ค๊ณ ์๋ ๊ฒ ๊ฐ๊ธด ํ๋ฐ, ๋ญ๊ฐ ์ข ๊ผฌ๋ฆํ๋ค. ์ ๋๋ก ์๋น์ค ํ๊ฒฝ์์ ์ฐ๋ ค๋ฉด ๊ฒฐ๊ตญ ์ง์ ๊น์์ผํ๋ ๋ถ๋ถ์ด ์๊ธธ๋ฏ
๋์๋ณด๋ ์ปค์คํ ์ด ๊ฝค ์ ๋์ง๋ง, Grafana์ฒ๋ผ ๋์๋ณด๋๋ฅผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ฒ๋ผ ๊ณต์ ํ๊ณ ๋ค์ด๋ฐ๋ ํ๊ฒฝ์ด ์กด์ฌํ์ง ์๋๋ค. ๋์ ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ ํ๋ฆ์ Kibana(Elastic APM)์ฒ๋ผ ์ด๋ ์ ๋ ์ ์ํด์ ์ ๊ณตํ๋ค.
Continuos Profiling์ ๋ํ ๊ณ ๋ ค๊ฐ ์๋ค. ํ์ํ๋ค๋ฉด pyroscope ๊ฐ์ ๋ฐ๋ค ๋ฐ๋ก ์ ์ฅํ๊ณ ๊ทธ๊ฑธ Grafana๋ pyroscope ์์ฒด ๋์๋ณด๋๋ก ์๊ฐํํด์ผ ํ๋ค.
์ฐธ์กฐ
https://clickhouse.com/docs/use-cases/observability/clickstack/getting-started/oss?loc=clickstack-oss
https://github.com/ClickHouse/ClickStack-helm-charts
https://clickhouse.com/docs/use-cases/observability/clickstack/deployment/helm-v1
https://tech.kakaopay.com/post/pallas-v2-log-platform/
https://github.com/ClickHouse/clickhouse-operator