기타/문제해결

[Prometheus] Prometheus 컨테이너 에러 err="open /data/queries.active: permission denied" 해결

닉네임없음ㅎ 2024. 9. 1. 17:30

[Prometheus] Prometheus 컨테이너 에러 err="open /data/queries.active: permission denied" 해결

 

문제상황 : 프로메테우스를 설치할때 host-path의 폴더와 마운트하여 설치하고 싶었음. 

values.yaml 파일에 적용할 pvc의 이름을 적고 설치를 시도했는데 에러가 났다 !!!!!!!!!


values 파일을 새로 생성해서 적용할 pvc 이름을 적어주고 

(pv와 pvc는 미리 생성해두었음)

 

<values.yaml> -> 프로메테우스에 적용할 values.yaml 파일임

server:
  persistentVolume:
    existingClaim: prometheus-pvc

 

 

해당 values.yaml파일이 있는 폴더 경로로 이동해서 helm을 이용해서 프로메테우스를 설치함 ! 

(namespace는 monitor로 지정했다. 이미 생성되어있는 네임스페이스여서 --create-namespace 는 생략함)

helm install prometheus prometheus-community/prometheus -f values.yaml --namespace 네임스페이스

 

 

설치를 하고 해당 네임스페이스의 pvc를 확인해보면 Bound라고 뜸. 

kubectl get pvc -n 네임스페이스이름

 

 

그리고 monitor 네임스페이스에 프로메테우스 파드들이 생성되었는지 확인 

kubectl get po -n 네임스페이스이름

생성은 되었는데 CrashLoopBackOff 가 뜬다 ㅠㅠ 

 


prometheus-server라는 파드에는 

prometheus-server-configmap-reload
prometheus-server
이렇게 두개의 컨테이너가 생성된다.
에러가 발생하는 컨테이너는 prometheus-server 컨테이너!!!!!

 

 

해당 파드의 정보를 좀 더 상세하게 조회해 보자.

kubectl describe pods 파드이름 -n 네임스페이스이름

kubectl describe pods prometheus-server-69b9cbd5f5-gplr8 -n monitor

 

파드의 정보를 쭉 내려보면 

설정한 prometheus-pvc로 볼륨설정이 잘 된것도 확인이되는데.. 

왜 CrashLoopBackOff 뜨냐고요 ㅠ

 

 

해당 컨테이너의 로그를 띄워봤다. 

kubectl logs 파드이름 -c 컨테이너이름 -n 네임스페이스이름

 

kubectl logs prometheus-server-69b9cbd5f5-gplr8 -c prometheus-server -n monitor

 

 

로그 메세지 : 

ts=2024-08-30T05:37:27.361Z caller=main.go:645 level=info msg="Starting Prometheus Server" mode=server version="(version=2.54.1, branch=HEAD, revision=e6cfa720fbe6280153fab13090a483dbd40bece3)"
ts=2024-08-30T05:37:27.363Z caller=main.go:650 level=info build_context="(go=go1.22.6, platform=linux/amd64, user=root@812ffd741951, date=20240827-10:56:41, tags=netgo,builtinassets,stringlabels)"
ts=2024-08-30T05:37:27.363Z caller=main.go:651 level=info host_details="(Linux 6.8.0-41-generic #41-Ubuntu SMP PREEMPT_DYNAMIC Fri Aug  2 20:41:06 UTC 2024 x86_64 prometheus-server-69b9cbd5f5-gplr8 (none))"
ts=2024-08-30T05:37:27.363Z caller=main.go:652 level=info fd_limits="(soft=1048576, hard=1048576)"
ts=2024-08-30T05:37:27.363Z caller=main.go:653 level=info vm_limits="(soft=unlimited, hard=unlimited)"
ts=2024-08-30T05:37:27.364Z caller=query_logger.go:114 level=error component=activeQueryTracker msg="Error opening query log file" file=/data/queries.active err="open /data/queries.active: permission denied"
panic: Unable to create mmap-ed active query log

 

무슨 에러냐 하면 수집한 metric 데이터를 기록한 query log file에 대한 접근권한이 없다는 것. 

 

리눅스에서 호스트파일 시스템의 특정 경로를 컨테이너로 마운트 했을때 접근 권한 문제가 발생할 수 있는데

호스트 os와 컨테이너 사이의 UID, GID 불일치 때문이라고 한다.

 

 

로컬 피씨에서 id를 먼저 확인해보자 

 

그리고 컨테이너로 접속해서 id를 확인해보자 

 

uid와 gid가 불일치한다. 

 

*65534 는 nobody임. 

pod를 생성할때 특정 사용자를 지정해주지 않아서 nobody로 되었는데, 

일단은 변경하지않고 그대로 진행.. 

 

이런경우 컨테이너의 uid에게 권한을 주면 됨 ! 

다시 로컬피씨에서 마운트하고자 하는 폴더 권한을 변경하였다.

 

 

 

이렇게 변경하고 프로메테우스를 다시 설치함 !!!!

그리고 pods를 띄워봤더니!!!!!!!!!

흑흑 잘돌아간다 ㅠㅠㅠㅠ