이 가이드는 레디스 OpenTelemetry 통합을 설치하고 구성할 때 발생할 수 있는 일반적인 문제를 다룹니다.
Collector 시작 문제
오류 메시지:
'receivers' unknown type: "redis" for id: "redis" (valid values: [elasticsearch hostmetrics ...])원인: NRDOT 버전에 레디스 수신기가 포함되어 있지 않습니다. 레디스 수신기는 NRDOT v1.18.0+가 필요합니다.
해결 방법: 다음 중 하나:
- NRDOT를 최신 버전으로 업그레이드
- 모든 커뮤니티 수신기가 포함된
otelcol-contrib(으)로 전환
오류 메시지:
cannot unmarshal the configuration: error reading receivers configuration일반적인 원인:
- 잘못된 YAML 들여쓰기(탭과 공백 혼합)
- 셸 스크립트에서 ConfigMap을 생성할 때 발생하는 Heredoc 문제
- 콜론이 포함된 엔드포인트 값 주위에 따옴표 누락
수정:
$# Validate YAML syntax$python3 -c "import yaml; yaml.safe_load(open('/etc/nrdot-collector/redis-collector-config.yaml'))"확인 방법:
$systemctl status nrdot-collector$# or$systemctl status otelcol-contrib일반적인 원인:
- 수집기 구성 파일의 잘못된 YAML
- 다른 프로세스와의 포트 충돌(상태 확인을 위해 포트 13133 확인)
- 메모리 부족(memory_limiter에서
limit_mib증가)
수정:
$# Check for port conflicts$ss -tlnp | grep 13133오류 메시지:
failed to fetch Redis INFO: dial tcp 127.0.0.1:6379: connect: connection refused원인: 레디스가 실행 중이 아니거나, 잘못된 엔드포인트가 설정되었거나, 방화벽이 연결을 차단하고 있습니다.
수정:
$# Verify Redis is running$redis-cli ping$
$# Test connectivity$nc -zv localhost 6379데이터 내보내기 문제
오류 메시지:
Exporting failed. 403 Forbidden원인: 잘못된 라이선스 키 또는 해당 지역에 대한 잘못된 OTLP 엔드포인트입니다.
수정:
- 라이선스 키가 올바르고 활성화되어 있는지 확인하세요.
- OTLP 엔드포인트가 계정 리전과 일치하는지 확인하세요.
확인 단계:
수집기가 실행 중인지 확인하세요:
bash$systemctl is-active nrdot-collector상태 엔드포인트 확인:
bash$curl http://localhost:13133NRQL로 테스트:
FROM Metric SELECT count(*) WHERE metricName LIKE 'redis.%' SINCE 10 minutes ago
로그 수집 문제
오류 메시지:
Failed to open file: /var/log/redis/redis-server.log: permission denied원인: 수집기 프로세스에 레디스 로그 파일에 대한 읽기 권한이 없습니다.
해결 방법(호스트 기반):
$# Option 1: Make the log file readable$sudo chmod 644 /var/log/redis/redis-server.log$
$# Option 2: Add collector user to redis group$sudo usermod -a -G redis nrdot-collector수정(Kubernetes): DaemonSet에 /var/log/pods 볼륨이 readOnly: true과(와) 함께 마운트되어 있는지 확인합니다.
Kubernetes 관련 문제
원인: 파드 레이블이 receiver_creator 검색 규칙과 일치하지 않습니다.
수정:
$# Check pod labels$kubectl get pods -n <namespace> --show-labels | grep redisConfigMap의 rule 이(가) 레디스 파드의 레이블과 일치하는지 확인하세요. 예를 들어 파드에 app.kubernetes.io/name: redis이(가) 있는 경우 그에 따라 규칙을 업데이트하세요.
확인 방법:
$kubectl get pods -n newrelic$kubectl logs -n newrelic <pod-name> --previous일반적인 원인:
- 잘못된 ConfigMap YAML(
data.config.yaml필드의 들여쓰기 확인) - 자격 증명에 대한 Kubernetes 시크릿 누락
- RBAC 권한 누락(
k8s_observer을(를) 사용하는 DaemonSet의 경우)
수정:
$# Validate ConfigMap content$kubectl get configmap otel-collector-redis-config -n newrelic -o jsonpath='{.data.config\.yaml}' | python3 -c "import yaml,sys; yaml.safe_load(sys.stdin); print('Valid YAML')"$
$# Check secret exists$kubectl get secret newrelic-credentials -n newrelic$
$# Check RBAC$kubectl auth can-i list pods --as=system:serviceaccount:newrelic:otel-collector-redis오류: 레디스 엔드포인트에 대한 연결 시간이 초과되었습니다.
수정:
$# Verify Redis pods are running$kubectl get pods -n <namespace> -l app=redis$
$# Test connectivity from collector pod$kubectl exec -n newrelic <collector-pod> -- nc -zv <redis-pod-ip> 6379일반적인 원인:
네임스페이스가 존재하지 않음
잘못된 values.yaml
Helm 리포지터리가 추가되지 않았습니다.
수정:
bash$# Create namespace first$kubectl create namespace newrelic$$# Validate (dry run)$helm template redis-otel open-telemetry/opentelemetry-collector -f values.yaml --dry-run
Cluster 모니터링 문제
증상: 인스턴스 엔티티는 나타나지만 레디스 Cluster 엔티티가 생성되지 않습니다.
일반적인 원인:
redis.cluster.name클러스터 파이프라인에 설정되지 않음redis.instance.id또는 클러스터 메트릭에server.address이 있음(클러스터 엔티티 규칙이 일치하지 않도록 방지함)Cluster 메트릭 비활성화됨(레디스 수신기에서 모든 클러스터 메트릭은 기본적으로 비활성화되어 있음)
해결 방법: 클러스터 파이프라인에 다음이 있는지 확인합니다:
redis.cluster.nameresource/cluster프로세서를 통해 설정됨server.address: {enabled: false}그리고 클러스터 수신기의server.port: {enabled: false}클러스터 파이프라인에
redis.instance.id이 없음NRQL로 확인:
SELECT count(*) FROM MetricWHERE redis.cluster.name IS NOT NULLAND redis.instance.id IS NULLAND server.address IS NULLSINCE 5 minutes ago0을 반환하면 클러스터 메트릭이 올바르게 흐르지 않는 것입니다.
증상: Cluster 엔티티는 존재하지만 대시보드에 빈 위젯이 표시됩니다.
일반적인 원인:
레디스가 Cluster 모드에서 실행되고 있지 않습니다(독립 실행형 인스턴스는 클러스터 메트릭을 생성하지 않음)
레디스 수신기 설정에서 Cluster 메트릭이 활성화되지 않음
해결 방법: 레디스가 Cluster 모드인지 확인합니다:
bash$redis-cli INFO cluster | grep cluster_enabledcluster_enabled:1을 반환해야 합니다.0을 반환하면 레디스가 Cluster 모드가 아닙니다.수신기 설정에서 클러스터 메트릭이 활성화되어 있는지 확인합니다:
redis/cluster:metrics:redis.cluster.state: {enabled: true}redis.cluster.known_nodes: {enabled: true}# ... all 9 cluster metrics must be explicitly enabled
증상: 동일한 클러스터에 대해 두 개 이상의 레디스 Cluster 엔티티가 나타납니다.
원인: 서로 다른 수집기가 동일한 클러스터에 대해 서로 다른 redis.cluster.name 값을 사용하고 있습니다.
해결 방법: 동일한 클러스터를 모니터링하는 모든 수집기가 resource/cluster 프로세서에서 정확히 동일한 redis.cluster.name 값을 사용하는지 확인합니다. 클러스터 엔티티 식별자는 이 이름입니다 ― 이름이 다르면 다른 엔티티가 생성됩니다.
증상: 클러스터 및 인스턴스 엔티티가 모두 존재하지만 서비스 맵에 CONTAINS 관계가 표시되지 않습니다.
원인: 인스턴스 메트릭에 redis.cluster.name 속성이 없으므로 관계 규칙이 이를 연결할 수 없습니다.
해결 방법: 인스턴스 파이프라인의 리소스 프로세서에 redis.cluster.name 을 추가합니다:
resource/redis_identity: attributes: - key: redis.instance.id value: "my-instance:6379" action: upsert - key: redis.cluster.name value: "my-redis-cluster" # Must match the cluster pipeline value action: upsert증상: 레디스가 작동하는 것처럼 보이지만 redis.cluster.state 이(가) 0(FAIL)을 보고합니다.
일반적인 원인:
16,384개의 해시 슬롯이 모두 할당되지는 않음(불완전한 클러스터 설정)
자동 장애 조치를 위해 사용할 수 있는 복제본이 없는 상태에서 마스터 노드가 다운됨
노드 간 네트워크 파티션
수정:
bash$# Check cluster state directly$redis-cli CLUSTER INFO | grep cluster_state$$# Check slot coverage$redis-cli CLUSTER INFO | grep cluster_slots$$# Check for failed nodes$redis-cli CLUSTER NODES | grep failcluster_slots_assigned이(가) 16384 미만인 경우 일부 슬롯이 할당되지 않습니다. 사용 가능한 노드에 누락된 슬롯 범위를 추가하여 수정합니다.