인사이트
인사이트
Kubernetes 인프라스트럭처와 서비스 성능을 통합 모니터링하는 인사이트 대시보드 사용법을 안내합니다.
개요
Insight 대시보드는 인프라스트럭처 상태와 서비스 성능 지표를 한 화면에서 모니터링할 수 있는 통합 대시보드입니다. Google의 Four Golden Signals(지연시간, 트래픽, 에러, 포화도)와 USE 메서드를 기반으로 설계되었습니다.
주요 특징
| 특징 | 설명 |
|---|---|
| 통합 뷰 | 인프라와 서비스 메트릭을 단일 대시보드에서 확인 |
| Four Golden Signals | 지연시간, 트래픽, 에러율, 포화도 모니터링 |
| 다중 클러스터 지원 | 여러 Kubernetes 클러스터를 동시에 모니터링 |
| SLA/Error Budget | SLA 달성률과 에러 버짓 소진율 추적 |
| 실시간 새로고침 | 30초 간격 자동 갱신 |
대시보드 접근
- 좌측 메뉴에서 Dashboards 클릭
- Insight Dashboard 선택
변수 (Variables)
대시보드 상단에서 필터링에 사용하는 변수들입니다.
변수 목록
| 변수 | 설명 | 쿼리 |
|---|---|---|
service.name |
서비스 선택 (Four Golden Signals용) | SELECT DISTINCT serviceName FROM signoz_traces.signoz_index_v3 |
k8s.cluster.name |
Kubernetes 클러스터 선택 | SELECT DISTINCT resource_attrs['k8s.cluster.name'] FROM signoz_metrics.time_series_v4 WHERE metric_name = 'k8s.node.cpu.time' |
k8s.node.name |
노드 상세 필터링 | SELECT DISTINCT resource_attrs['k8s.node.name'] FROM signoz_metrics.time_series_v4 WHERE metric_name = 'k8s.node.cpu.time' AND resource_attrs['k8s.cluster.name'] IN $k8s.cluster.name |
변수 사용법
- 모든 변수는 다중 선택 가능
- ALL 옵션으로 전체 선택 가능
- 클러스터 변수 변경 시 노드 변수가 자동 필터링됨
대시보드 구성
Insight 대시보드는 크게 두 섹션으로 구성됩니다.
1. Infrastructure Health & Performance (인프라 모니터링)
Kubernetes 클러스터의 리소스 사용량과 시스템 상태를 모니터링합니다.
2. Service Level Monitoring - Four Golden Signals (서비스 모니터링)
애플리케이션의 성능과 SLA 달성 현황을 모니터링합니다.
Infrastructure Health & Performance
요약 패널 (Summary Panels)
Cluster CPU Usage
클러스터 전체 노드의 평균 CPU 사용률입니다.
| 항목 | 내용 |
|---|---|
| 패널 유형 | Value |
| 단위 | percentunit (0-1) |
수식:
avg(k8s.node.cpu.utilization) WHERE k8s.cluster.name IN $k8s.cluster.name집계:
- 시간 집계: avg
- 공간 집계: avg
- 축소: last
임계값:
| 색상 | 조건 |
|---|---|
| 노란색 | > 70% |
| 빨간색 | > 90% |
Memory Usage %
클러스터 전체 메모리 사용률입니다.
| 항목 | 내용 |
|---|---|
| 패널 유형 | Value |
| 단위 | percent |
수식:
(A / B) * 100
A = sum(k8s.node.memory.usage) WHERE k8s.cluster.name IN $k8s.cluster.name
B = sum(k8s.node.allocatable_memory) WHERE k8s.cluster.name IN $k8s.cluster.name집계:
- A, B 시간 집계: avg
- A, B 공간 집계: sum
- 축소: last
임계값:
| 색상 | 조건 |
|---|---|
| 노란색 | > 80% |
| 빨간색 | > 95% |
Total Pods
클러스터 내 전체 파드 수입니다.
| 항목 | 내용 |
|---|---|
| 패널 유형 | Value |
| 단위 | short |
수식:
count(k8s.pod.phase) WHERE k8s.cluster.name IN $k8s.cluster.name집계:
- 시간 집계: count
- 공간 집계: count
- 축소: last
Ready Deployments
가용 상태인 디플로이먼트 레플리카 합계입니다.
| 항목 | 내용 |
|---|---|
| 패널 유형 | Value |
| 단위 | short |
수식:
sum(k8s.deployment.available) WHERE k8s.cluster.name IN $k8s.cluster.name집계:
- 시간 집계: sum
- 공간 집계: sum
- 축소: last
임계값:
| 색상 | 조건 |
|---|---|
| 녹색 | > 0 |
Total Nodes
메트릭을 보고하는 노드 수입니다.
| 항목 | 내용 |
|---|---|
| 패널 유형 | Value |
| 단위 | short |
수식:
count(k8s.node.cpu.utilization) WHERE k8s.cluster.name IN $k8s.cluster.name집계:
- 시간 집계: count
- 공간 집계: count
- 축소: last
시계열 패널 (Time Series Panels)
Network Errors/s
초당 네트워크 에러 발생 수입니다.
| 항목 | 내용 |
|---|---|
| 패널 유형 | Time Series |
| 단위 | short |
수식:
sum(rate(system.network.errors)) WHERE k8s.cluster.name IN $k8s.cluster.name집계:
- 시간 집계: rate
- 공간 집계: sum
임계값:
| 색상 | 조건 |
|---|---|
| 빨간색 | > 0 |
Load Average (1m)
1분 시스템 로드 평균입니다.
| 항목 | 내용 |
|---|---|
| 패널 유형 | Time Series |
| 단위 | short |
수식:
avg(system.cpu.load_average.1m) WHERE k8s.cluster.name IN $k8s.cluster.name집계:
- 시간 집계: avg
- 공간 집계: avg
임계값:
| 색상 | 조건 |
|---|---|
| 노란색 | > 2 |
| 빨간색 | > 4 |
Disk IOPS
초당 디스크 I/O 연산 수입니다.
| 항목 | 내용 |
|---|---|
| 패널 유형 | Time Series |
| 단위 | short |
수식:
sum(rate(system.disk.operations)) WHERE k8s.cluster.name IN $k8s.cluster.name집계:
- 시간 집계: rate
- 공간 집계: sum
CPU Usage Trend by Node
노드별 CPU 사용률 추이입니다.
| 항목 | 내용 |
|---|---|
| 패널 유형 | Time Series |
| 단위 | percentunit |
수식:
avg(k8s.node.cpu.utilization) BY k8s.node.name WHERE k8s.cluster.name IN $k8s.cluster.name집계:
- 시간 집계: avg
- 공간 집계: avg
- Group By: k8s.node.name
Memory Usage Trend by Node
노드별 메모리 사용량 추이입니다.
| 항목 | 내용 |
|---|---|
| 패널 유형 | Time Series |
| 단위 | bytes |
수식:
avg(k8s.node.memory.usage) BY k8s.node.name WHERE k8s.cluster.name IN $k8s.cluster.name집계:
- 시간 집계: avg
- 공간 집계: avg
- Group By: k8s.node.name
Disk Performance Trend
읽기/쓰기 방향별 IOPS 추이입니다.
| 항목 | 내용 |
|---|---|
| 패널 유형 | Time Series |
| 단위 | short |
수식:
sum(rate(system.disk.operations)) BY direction WHERE k8s.cluster.name IN $k8s.cluster.name집계:
- 시간 집계: rate
- 공간 집계: sum
- Group By: direction
Inode Usage %
파일시스템 inode 사용률입니다.
| 항목 | 내용 |
|---|---|
| 패널 유형 | Time Series |
| 단위 | percent |
수식:
(A / (A + B)) * 100
A = sum(system.filesystem.inodes.usage) WHERE state = 'used' AND k8s.cluster.name IN $k8s.cluster.name
B = sum(system.filesystem.inodes.usage) WHERE state = 'free' AND k8s.cluster.name IN $k8s.cluster.name집계:
- A, B 시간 집계: avg
- A, B 공간 집계: sum
임계값:
| 색상 | 조건 |
|---|---|
| 노란색 | > 80% |
| 빨간색 | > 95% |
테이블 패널 (Table Panel)
Namespace Resource Summary
네임스페이스별 메모리 및 CPU 사용량입니다.
| 항목 | 내용 |
|---|---|
| 패널 유형 | Table |
| 열 | k8s.namespace.name, Memory Usage (bytes), CPU Usage |
수식:
A = sum(k8s.pod.memory.working_set) BY k8s.namespace.name WHERE k8s.cluster.name IN $k8s.cluster.name
B = sum(k8s.pod.cpu.usage) BY k8s.namespace.name WHERE k8s.cluster.name IN $k8s.cluster.name집계:
- A 시간 집계: avg, 축소: last
- B 시간 집계: avg, 축소: avg
- 공간 집계: sum
- 정렬: k8s.namespace.name ASC
- 제한: 20개
Service Level Monitoring - Four Golden Signals
요약 패널 (Summary Panels)
Error Budget Consumption
99.95% SLA 기준 에러 버짓 소진율입니다.
| 항목 | 내용 |
|---|---|
| 패널 유형 | Value |
| 단위 | percent |
| 데이터 범위 | 최근 1시간 |
수식 (ClickHouse SQL):
SELECT ((COUNT(CASE WHEN status_code = 2 THEN 1 END) * 100.0) / COUNT(*)) / 0.05 as error_budget
FROM signoz_traces.signoz_index_v3
WHERE serviceName IN $service.name
AND timestamp >= now() - INTERVAL 1 HOUR
AND timestamp <= now()설명:
- 에러율 = (에러 수 / 전체 요청 수) * 100
- 에러 버짓 소진율 = 에러율 / 허용 에러율(0.05%) * 100
- 100% 이상이면 SLA 위반
SLA Achievement Rate
최근 1시간 SLA 달성률입니다.
| 항목 | 내용 |
|---|---|
| 패널 유형 | Value |
| 단위 | percent |
| 데이터 범위 | 최근 1시간 |
수식 (ClickHouse SQL):
SELECT (COUNT(CASE WHEN status_code = 0 THEN 1 END) * 100.0) / COUNT(*) as sla_rate
FROM signoz_traces.signoz_index_v3
WHERE serviceName IN $service.name
AND timestamp >= now() - INTERVAL 1 HOUR
AND timestamp <= now()설명:
- SLA 달성률 = (성공 요청 수 / 전체 요청 수) * 100
Average Response Time
최근 1시간 평균 응답 시간(마이크로초)입니다.
| 항목 | 내용 |
|---|---|
| 패널 유형 | Value |
| 단위 | µs |
| 데이터 범위 | 최근 1시간 |
수식 (ClickHouse SQL):
SELECT AVG(durationNano) / 1000 as avg_latency_us
FROM signoz_traces.signoz_index_v3
WHERE serviceName IN $service.name
AND timestamp >= now() - INTERVAL 1 HOUR
AND timestamp <= now()Success Request Count
최근 1시간 성공 요청 수입니다.
| 항목 | 내용 |
|---|---|
| 패널 유형 | Value |
| 단위 | short |
| 데이터 범위 | 최근 1시간 |
수식 (ClickHouse SQL):
SELECT COUNT() as success_count
FROM signoz_traces.signoz_index_v3
WHERE serviceName IN $service.name
AND status_code = 0
AND timestamp >= now() - INTERVAL 1 HOUR
AND timestamp <= now()시계열 패널 (Time Series Panels)
Errors (Error Rate)
분당 에러율 추이입니다.
| 항목 | 내용 |
|---|---|
| 패널 유형 | Time Series |
| 단위 | percent |
| 데이터 범위 | 선택된 시간 범위 |
수식 (ClickHouse SQL):
SELECT
toStartOfInterval(timestamp, INTERVAL 1 minute) as ts,
(COUNT(CASE WHEN status_code = 2 THEN 1 END) * 100.0) / COUNT(*) as error_rate
FROM signoz_traces.signoz_index_v3
WHERE serviceName IN $service.name
AND timestamp >= $start_datetime
AND timestamp <= $end_datetime
GROUP BY ts
ORDER BY tsLatency (Response Time)
P50, P95, P99 응답 시간 추이입니다.
| 항목 | 내용 |
|---|---|
| 패널 유형 | Time Series |
| 단위 | µs |
| 데이터 범위 | 선택된 시간 범위 |
수식 (ClickHouse SQL):
P50:
SELECT
toStartOfInterval(timestamp, INTERVAL 1 minute) as ts,
quantile(0.50)(durationNano) / 1000 as p50_latency
FROM signoz_traces.signoz_index_v3
WHERE serviceName IN $service.name
AND timestamp >= $start_datetime
AND timestamp <= $end_datetime
GROUP BY ts
ORDER BY tsP95:
SELECT
toStartOfInterval(timestamp, INTERVAL 1 minute) as ts,
quantile(0.95)(durationNano) / 1000 as p95_latency
FROM signoz_traces.signoz_index_v3
WHERE serviceName IN $service.name
AND timestamp >= $start_datetime
AND timestamp <= $end_datetime
GROUP BY ts
ORDER BY tsP99:
SELECT
toStartOfInterval(timestamp, INTERVAL 1 minute) as ts,
quantile(0.99)(durationNano) / 1000 as p99_latency
FROM signoz_traces.signoz_index_v3
WHERE serviceName IN $service.name
AND timestamp >= $start_datetime
AND timestamp <= $end_datetime
GROUP BY ts
ORDER BY tsTraffic (Requests Per Minute)
분당 전체 요청 수와 성공 요청 수 추이입니다.
| 항목 | 내용 |
|---|---|
| 패널 유형 | Time Series |
| 단위 | reqpm |
| 데이터 범위 | 선택된 시간 범위 |
수식 (ClickHouse SQL):
Total RPM:
SELECT
toStartOfInterval(timestamp, INTERVAL 1 minute) as ts,
COUNT() as rpm
FROM signoz_traces.signoz_index_v3
WHERE serviceName IN $service.name
AND timestamp >= $start_datetime
AND timestamp <= $end_datetime
GROUP BY ts
ORDER BY tsSuccess RPM:
SELECT
toStartOfInterval(timestamp, INTERVAL 1 minute) as ts,
COUNT() as success_rpm
FROM signoz_traces.signoz_index_v3
WHERE serviceName IN $service.name
AND status_code = 0
AND timestamp >= $start_datetime
AND timestamp <= $end_datetime
GROUP BY ts
ORDER BY tsCPU Saturation
CPU 포화도 추이입니다.
| 항목 | 내용 |
|---|---|
| 패널 유형 | Time Series |
| 단위 | percentunit |
수식:
avg(k8s.node.cpu.utilization)집계:
- 시간 집계: avg
- 공간 집계: avg
Disk I/O Saturation
디스크 I/O 처리량 추이입니다.
| 항목 | 내용 |
|---|---|
| 패널 유형 | Time Series |
| 단위 | binBps (bytes/sec) |
수식:
sum(rate(system.disk.io))집계:
- 시간 집계: rate
- 공간 집계: sum
테이블 패널 (Table Panel)
SLA & Error Budget Status
30일 기준 SLA별 가용성과 에러 버짓 상태입니다.
| 항목 | 내용 |
|---|---|
| 패널 유형 | Table |
| 열 | SLA Target, Actual Availability, Error Budget Consumed, Status |
| 데이터 범위 | 최근 30일 |
수식 (ClickHouse SQL):
WITH error_stats AS (
SELECT
COUNT(CASE WHEN status_code = 2 THEN 1 END) as error_count,
COUNT(*) as total_count,
(COUNT(CASE WHEN status_code = 2 THEN 1 END) * 100.0) / COUNT(*) as error_rate
FROM signoz_traces.signoz_index_v3
WHERE serviceName IN $service.name
AND timestamp >= now() - INTERVAL 30 DAY
)
SELECT
'99.99% SLA' as sla_target,
toString(round(100 - error_rate, 4)) || '%' as actual_availability,
CASE
WHEN error_rate = 0 THEN '0.0%'
ELSE toString(round(error_rate / 0.01 * 100, 1)) || '%'
END as error_budget_consumed,
CASE
WHEN error_rate = 0 THEN 'Good ✓'
WHEN error_rate / 0.01 * 100 > 100 THEN 'Critical ⚠'
WHEN error_rate / 0.01 * 100 > 70 THEN 'Warning ⚡'
ELSE 'Good ✓'
END as status
FROM error_stats
UNION ALL
SELECT
'99.95% SLA',
toString(round(100 - error_rate, 4)) || '%',
CASE
WHEN error_rate = 0 THEN '0.0%'
ELSE toString(round(error_rate / 0.05 * 100, 1)) || '%'
END,
CASE
WHEN error_rate = 0 THEN 'Good ✓'
WHEN error_rate / 0.05 * 100 > 100 THEN 'Critical ⚠'
WHEN error_rate / 0.05 * 100 > 70 THEN 'Warning ⚡'
ELSE 'Good ✓'
END
FROM error_stats
UNION ALL
SELECT
'99.90% SLA',
toString(round(100 - error_rate, 4)) || '%',
CASE
WHEN error_rate = 0 THEN '0.0%'
ELSE toString(round(error_rate / 0.1 * 100, 1)) || '%'
END,
CASE
WHEN error_rate = 0 THEN 'Good ✓'
WHEN error_rate / 0.1 * 100 > 100 THEN 'Critical ⚠'
WHEN error_rate / 0.1 * 100 > 70 THEN 'Warning ⚡'
ELSE 'Good ✓'
END
FROM error_statsSLA 목표별 허용 에러율:
| SLA 목표 | 허용 에러율 | 월간 허용 다운타임 |
|---|---|---|
| 99.99% | 0.01% | ~4.3분 |
| 99.95% | 0.05% | ~21.6분 |
| 99.90% | 0.10% | ~43.2분 |
상태 표시:
| 상태 | 조건 | 색상 |
|---|---|---|
| Good ✓ | 에러 버짓 소진율 ≤ 70% | 녹색 |
| Warning ⚡ | 에러 버짓 소진율 70-100% | 주황색 |
| Critical ⚠ | 에러 버짓 소진율 > 100% | 빨간색 |
사용되는 메트릭
Infrastructure 메트릭
| 메트릭 | 설명 | 소스 |
|---|---|---|
k8s.node.cpu.utilization |
노드 CPU 사용률 | kubeletstats |
k8s.node.memory.usage |
노드 메모리 사용량 | kubeletstats |
k8s.node.allocatable_memory |
노드 할당 가능 메모리 | kubeletstats |
k8s.pod.phase |
파드 상태 | kubeletstats |
k8s.pod.cpu.usage |
파드 CPU 사용량 | kubeletstats |
k8s.pod.memory.working_set |
파드 메모리 워킹셋 | kubeletstats |
k8s.deployment.available |
디플로이먼트 가용 레플리카 | kubeletstats |
system.cpu.load_average.1m |
1분 로드 평균 | hostmetrics |
system.disk.operations |
디스크 I/O 연산 | hostmetrics |
system.disk.io |
디스크 I/O 바이트 | hostmetrics |
system.network.errors |
네트워크 에러 | hostmetrics |
system.filesystem.inodes.usage |
inode 사용량 | hostmetrics |
Service 메트릭 (Trace 기반)
| 필드 | 설명 |
|---|---|
serviceName |
서비스 이름 |
status_code |
상태 코드 (0=성공, 2=에러) |
durationNano |
응답 시간 (나노초) |
timestamp |
타임스탬프 |
문제 해결
데이터가 표시되지 않음
- 변수 선택 확인: 클러스터 또는 서비스가 선택되었는지 확인
- 시간 범위 확인: 데이터가 있는 시간 범위인지 확인
- Agent 상태 확인: OTel Collector가 정상 동작하는지 확인
인프라 메트릭 누락
- kubeletstats receiver 설정 확인
- hostmetrics receiver 설정 확인
- 클러스터 연결 상태 확인
서비스 메트릭 누락
- APM Agent 설치 확인
- 트레이스 데이터 수집 확인
- 서비스 이름 설정 확인
관련 문서
- 대시보드 - 커스텀 대시보드 생성
- 메트릭 - 메트릭 탐색기 사용법
- 알림 - 메트릭 기반 알림 설정
- 인프라스트럭처 - 인프라 모니터링 상세