인사이트

최종 수정: 2026. 1. 23.

인사이트

Kubernetes 인프라스트럭처와 서비스 성능을 통합 모니터링하는 인사이트 대시보드 사용법을 안내합니다.


개요

Insight 대시보드는 인프라스트럭처 상태와 서비스 성능 지표를 한 화면에서 모니터링할 수 있는 통합 대시보드입니다. Google의 Four Golden Signals(지연시간, 트래픽, 에러, 포화도)와 USE 메서드를 기반으로 설계되었습니다.

주요 특징

특징 설명
통합 뷰 인프라와 서비스 메트릭을 단일 대시보드에서 확인
Four Golden Signals 지연시간, 트래픽, 에러율, 포화도 모니터링
다중 클러스터 지원 여러 Kubernetes 클러스터를 동시에 모니터링
SLA/Error Budget SLA 달성률과 에러 버짓 소진율 추적
실시간 새로고침 30초 간격 자동 갱신

대시보드 접근

  1. 좌측 메뉴에서 Dashboards 클릭
  2. 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 ts

Latency (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 ts

P95:

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 ts

P99:

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 ts

Traffic (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 ts

Success 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 ts

CPU 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_stats

SLA 목표별 허용 에러율:

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 타임스탬프

문제 해결

데이터가 표시되지 않음

  1. 변수 선택 확인: 클러스터 또는 서비스가 선택되었는지 확인
  2. 시간 범위 확인: 데이터가 있는 시간 범위인지 확인
  3. Agent 상태 확인: OTel Collector가 정상 동작하는지 확인

인프라 메트릭 누락

  1. kubeletstats receiver 설정 확인
  2. hostmetrics receiver 설정 확인
  3. 클러스터 연결 상태 확인

서비스 메트릭 누락

  1. APM Agent 설치 확인
  2. 트레이스 데이터 수집 확인
  3. 서비스 이름 설정 확인

관련 문서

  • 대시보드 - 커스텀 대시보드 생성
  • 메트릭 - 메트릭 탐색기 사용법
  • 알림 - 메트릭 기반 알림 설정
  • 인프라스트럭처 - 인프라 모니터링 상세