10.3. 문제 해결
설치, 에이전트 연결, 데이터 미표시, 성능 관련 문제를 진단하고 해결하는 방법을 안내합니다.
개요
OPENMARU Observability 사용 중 문제가 발생하면 이 문서를 참고하여 원인을 파악하고 해결하세요. 문제 유형별로 확인 순서와 조치 방법을 안내합니다.
참고: 이 문서의
kubectl예시는 네임스페이스로-n openmaru-observ를 사용합니다. 다른 네임스페이스에 설치했다면 설치한 네임스페이스 이름으로 바꿔 실행하세요.
설치 관련 문제
Pod가 시작되지 않거나 재시작을 반복합니다
증상: kubectl get pods -n openmaru-observ 실행 시 Pod 상태가 Pending, CrashLoopBackOff, Error로 표시됩니다.
원인 및 조치:
-
스토리지 클래스 확인
PersistentVolume 프로비저닝에 실패하면 Pod가
Pending상태로 멈춥니다.kubectl get pvc -n openmaru-observPVC 상태가
Pending이면 Helm 설치 시 지정한 스토리지 클래스가 클러스터에 존재하는지 확인하세요.kubectl get storageclass사용 가능한 스토리지 클래스 이름을 확인하고,
values.yaml에서 스토리지 클래스 설정 값을 올바르게 지정한 뒤 재설치하세요.참고: Helm 차트의 기본 스토리지 클래스는
nfs-client입니다. 클러스터 환경에 맞는 스토리지 클래스로 변경해야 합니다. -
리소스 부족 확인
노드에 CPU 또는 메모리 여유가 없으면 Pod가 스케줄링되지 않습니다.
kubectl describe pod <pod-name> -n openmaru-observInsufficient cpu또는Insufficient memory메시지가 보이면 클러스터 리소스를 확보하거나,values.yaml에서 각 컴포넌트의 리소스 요청량을 줄여 재설치하세요. -
이미지 풀 실패 확인
ImagePullBackOff상태라면 컨테이너 이미지 레지스트리에 접근이 안 되는 것입니다.kubectl describe pod <pod-name> -n openmaru-observEvents 섹션에서 이미지 관련 오류 메시지를 확인하세요. 레지스트리 주소와 네트워크 연결을 확인합니다. 폐쇄망 환경이라면 이미지가 내부 레지스트리에 올바르게 등록되어 있는지 확인하세요.
참고: 프라이빗 레지스트리를 사용하는 경우
values.yaml의imagePullSecrets설정이 필요합니다. Kubernetes Secret이 올바르게 생성되어 있는지 확인하세요. -
서버 Pod 기동 시간 초과
서버 Pod는 최초 기동 시 데이터베이스 마이그레이션 등 초기화 작업을 수행합니다. 최대 5분까지 기동 시간이 소요될 수 있으므로 충분히 기다린 후 상태를 확인하세요.
서버 Pod가 계속
CrashLoopBackOff상태라면 로그를 확인하세요.kubectl logs <server-pod-name> -n openmaru-observPostgreSQL이나 ClickHouse 연결에 실패하는 경우가 대부분입니다. 해당 Pod가 먼저 정상 실행 중인지 확인하세요.
UI에 접속이 안 됩니다
증상: 브라우저에서 OPENMARU Observability 주소로 접속했을 때 페이지가 열리지 않습니다.
원인 및 조치:
-
Ingress 또는 Route 설정 확인
Helm 설치 시 Ingress가 활성화되어 있는지 확인하세요.
kubectl get ingress -n openmaru-observIngress 리소스가 없다면
values.yaml에서 Ingress를 활성화하여 재설치하세요.OpenShift 환경이라면 Route 리소스를 확인합니다.
kubectl get route -n openmaru-observ -
Pod 상태 확인
kubectl get pods -n openmaru-observ서버 및 UI Pod가
Running상태인지 확인합니다. 비정상 상태라면 위의 Pod가 시작되지 않거나 재시작을 반복합니다 항목을 참고하세요. -
서비스 연결 확인
Pod 내부에서 서비스 간 연결이 정상적인지 확인합니다.
kubectl get svc -n openmaru-observUI Pod는 서버에 연결하여 데이터를 가져옵니다. 서버 서비스가 정상적으로 생성되어 있는지 확인하세요.
-
네트워크 연결 확인
브라우저에서 서버 주소로 네트워크가 연결되는지 확인하세요. 방화벽이나 보안 그룹 설정으로 접속이 차단될 수 있습니다.
kube-state-metrics 관련 경고가 표시됩니다
증상: 설정 > 시스템 설정 탭의 프로젝트 상태에서 kube-state-metrics 항목이 비정상으로 표시됩니다.
원인: kube-state-metrics가 클러스터에 설치되어 있지 않거나 접근이 불가한 경우입니다.
조치:
kubectl get pods -A | grep kube-state-metrics
kube-state-metrics가 없으면 먼저 설치하세요. kube-state-metrics는 Kubernetes 리소스 상태를 메트릭으로 노출하는 컴포넌트로, OPENMARU Observability가 애플리케이션 목록을 구성하는 데 필요합니다.
Helm 차트에 포함된 kube-state-metrics가 활성화되어 있는지도 확인하세요. values.yaml에서 해당 컴포넌트가 활성화 상태인지 확인합니다.
이미 설치되어 있는데도 경고가 표시된다면 VictoriaMetrics가 kube-state-metrics의 메트릭을 수집하고 있는지 확인하세요. kube-state-metrics Pod의 컨테이너 이름이 설정과 일치해야 합니다.
데이터베이스 연결 오류가 발생합니다
증상: 서버 Pod 로그에 데이터베이스 연결 실패 메시지가 표시됩니다.
원인 및 조치:
-
PostgreSQL Pod 상태 확인
kubectl get pods -n openmaru-observ | grep postgresPostgreSQL Pod가
Running상태인지 확인합니다. PostgreSQL은 최초 기동 시 초기화에 약 2분이 소요될 수 있습니다. -
ClickHouse Pod 상태 확인
kubectl get pods -n openmaru-observ | grep clickhouseClickHouse Pod가
Running상태인지 확인합니다. -
스토리지 상태 확인
데이터베이스 Pod의 PersistentVolume이 정상적으로 바인딩되어 있는지 확인합니다.
kubectl get pvc -n openmaru-observPVC 상태가
Bound인지 확인하세요. 스토리지가 가득 찼다면 볼륨 크기를 늘리거나 불필요한 데이터를 정리해야 합니다. -
데이터베이스 Pod 로그 확인
데이터베이스 Pod 자체에 문제가 있을 수 있습니다. 로그를 확인하세요.
kubectl logs <postgres-pod-name> -n openmaru-observkubectl logs <clickhouse-pod-name> -n openmaru-observ
Helm 업그레이드 후 Pod가 비정상입니다
증상: helm upgrade 실행 후 일부 Pod가 정상적으로 시작되지 않습니다.
원인 및 조치:
-
업그레이드 상태 확인
helm status openmaru-observ -n openmaru-observ배포 상태가
deployed인지 확인합니다. -
Pod 이벤트 확인
kubectl describe pod <pod-name> -n openmaru-observEvents 섹션에서 오류 원인을 확인하세요.
-
서버 Pod 순서 확인
서버 Pod는 PostgreSQL과 ClickHouse가 먼저 정상 동작해야 합니다. 데이터베이스 Pod가 모두
Running상태인지 확인한 후 서버 Pod를 재시작하세요.kubectl rollout restart statefulset <server-statefulset-name> -n openmaru-observ
에이전트 연결 문제
노드 에이전트가 인식되지 않습니다
증상: 설정 > 시스템 설정 탭의 프로젝트 상태에서 에이전트 항목이 비정상으로 표시됩니다. 노드 메뉴에 노드가 표시되지 않습니다.
원인 및 조치:
-
API 키 확인
노드 에이전트는 API 키로 인증합니다. 설정 > 시스템 설정 탭에서 API 키가 발급되어 있는지 확인하세요.
에이전트 설치 시 올바른 API 키를 사용했는지 확인합니다. API 키를 새로 발급했다면 에이전트를 재배포해야 합니다.
-
서버 URL 확인
에이전트가 OPENMARU Observability 서버에 접근할 수 있는 URL로 설정되어 있는지 확인하세요. 에이전트가 배포된 노드에서 서버 URL로의 네트워크 연결이 가능해야 합니다.
-
에이전트 Pod 상태 확인
노드 에이전트를 DaemonSet으로 배포한 경우, 각 노드에서 에이전트 Pod가 정상 실행 중인지 확인하세요.
kubectl get pods -n <에이전트가 배포된 네임스페이스> -o widePod가 비정상 상태라면 로그를 확인하세요.
kubectl logs <pod-name> -n <네임스페이스> -
커널 버전 확인
노드 에이전트는 eBPF를 사용하므로 Linux 커널 4.16 이상이 필요합니다. 커널 버전이 이보다 낮으면 에이전트가 시작 시 종료됩니다.
uname -r -
보안 컨텍스트 확인
노드 에이전트는 eBPF 프로그램을 로드하기 위해 privileged 모드로 실행되어야 합니다. 클러스터의 보안 정책(PodSecurityPolicy, PodSecurityStandard 등)이 privileged 모드를 허용하는지 확인하세요.
에이전트 Pod에 필요한 볼륨 마운트가 정상인지도 확인합니다.
/host/sys/fs/cgroup(cgroup 파일시스템, 읽기 전용)/sys/kernel/tracing(tracefs)/sys/kernel/debug(debugfs)
-
에이전트 설치 후 대기
에이전트를 처음 설치한 경우, 첫 번째 데이터가 전송되기까지 1~2분이 걸릴 수 있습니다. 잠시 기다린 후 설정 > 시스템 설정 탭을 새로고침하세요.
참고: 노드 에이전트의 시스템 요구사항은 Linux 운영체제와 커널 4.16 이상입니다. 커널 버전이 낮으면 eBPF 기반 데이터 수집이 동작하지 않습니다.
클러스터 에이전트가 연결되지 않습니다
증상: 대시보드, 애플리케이션 목록 등 클러스터 수준의 데이터가 표시되지 않습니다.
원인 및 조치:
-
클러스터 에이전트 Pod 상태를 확인합니다.
kubectl get pods -n openmaru-observ | grep cluster-agent -
Pod가 비정상 상태라면 로그를 확인합니다.
kubectl logs <cluster-agent-pod-name> -n openmaru-observ -
values.yaml에서 아래 항목이 올바르게 설정되어 있는지 확인하세요.항목 확인 내용 클러스터 에이전트 서버 URL 서버에 접근 가능한 URL인지 확인 클러스터 에이전트 API 키 유효한 API 키인지 확인 -
클러스터 에이전트에는 Kubernetes API에 접근하기 위한 권한이 필요합니다. ClusterRole과 ClusterRoleBinding이 정상적으로 생성되어 있는지 확인하세요.
kubectl get clusterrole | grep cluster-agentkubectl get clusterrolebinding | grep cluster-agent클러스터 에이전트에 필요한 권한은 다음과 같습니다.
- nodes, services, endpoints, pods, secrets (core API)
- replicasets, deployments, statefulsets, daemonsets (apps API)
- jobs, cronjobs (batch API)
OpenTelemetry 데이터가 수신되지 않습니다
증상: OpenTelemetry SDK를 연동한 애플리케이션의 추적(Trace) 또는 로그(Log) 데이터가 분산추적 또는 로그 뷰어 메뉴에 표시되지 않습니다.
확인 순서:
-
OTel Collector Pod 상태 확인
kubectl get pods -n openmaru-observ | grep otel-collectorOTel Collector Pod가
Running상태인지 확인합니다. -
엔드포인트 설정 확인
애플리케이션의 OpenTelemetry SDK 설정에서 엔드포인트가 OTel Collector 서비스를 올바르게 가리키고 있는지 확인하세요. 분산추적 페이지 상단의 OpenTelemetry 통합 버튼을 클릭하면 올바른 엔드포인트 설정을 확인할 수 있습니다.
OTel Collector는 다음 포트로 데이터를 수신합니다.
- gRPC: 4317
- HTTP: 4318
-
API 키 확인
OTel Collector가 OPENMARU Observability 서버에 데이터를 전송할 때 유효한 API 키가 필요합니다.
values.yaml에서 API 키 설정을 확인하세요. -
네트워크 연결 확인
애플리케이션에서 OTel Collector까지, OTel Collector에서 OPENMARU Observability 서버까지 네트워크 연결이 가능한지 확인하세요.
-
OTel Collector 로그 확인
OTel Collector 로그에서 데이터 수신 및 전송 상태를 확인할 수 있습니다.
kubectl logs <otel-collector-pod-name> -n openmaru-observ메모리 제한 초과로 인해 데이터가 유실되는 경우,
values.yaml에서 OTel Collector의 메모리 제한을 늘려주세요.
데이터가 표시되지 않을 때
대시보드에 클러스터 데이터가 없습니다
증상: 대시보드의 클러스터 리소스 게이지나 상태 카드에 데이터가 표시되지 않습니다.
확인 순서:
-
실시간 연결 상태 확인
대시보드 상단의 실시간 배지가 초록색인지 확인하세요. 회색이거나 오류 상태라면 서버와의 실시간 연결이 끊어진 것입니다. 페이지를 새로고침하면 자동으로 재연결을 시도합니다.
-
클러스터 에이전트 상태 확인
위의 클러스터 에이전트가 연결되지 않습니다 항목을 참고하세요.
-
kube-state-metrics 확인
kube-state-metrics가 정상 동작하지 않으면 클러스터 상태 데이터를 수집할 수 없습니다. 위의 kube-state-metrics 관련 경고가 표시됩니다 항목을 참고하세요.
-
VictoriaMetrics 상태 확인
대시보드의 클러스터 리소스 데이터는 VictoriaMetrics에서 조회됩니다.
kubectl get pods -n openmaru-observ | grep victoria-metricsVictoriaMetrics Pod가 정상 실행 중인지 확인하세요.
애플리케이션 목록이 비어 있습니다
증상: 애플리케이션 메뉴를 클릭해도 목록에 아무것도 표시되지 않습니다.
확인 순서:
-
필터 확인
페이지 상단의 필터(네임스페이스, 카테고리, 상태)에서 데이터를 걸러내고 있지 않은지 확인하세요. 필터를 모두 초기화하고 다시 확인하세요.
-
시간 범위 확인
우측 상단의 시간 선택기에서 최근 1시간 또는 3시간으로 설정되어 있는지 확인하세요. 시간 범위가 너무 과거로 설정되어 있으면 데이터가 없을 수 있습니다.
-
클러스터 에이전트 및 kube-state-metrics 확인
클러스터 에이전트와 kube-state-metrics가 정상 동작해야 애플리케이션 목록을 구성할 수 있습니다.
-
네임스페이스 확인
모니터링 대상 네임스페이스에 실행 중인 워크로드가 있는지 확인하세요. 워크로드가 없는 네임스페이스에서는 애플리케이션이 표시되지 않습니다.