Ps와 prometheus node exporter output 차이점?

한가지 더 문의합니다. 도와주세요. :slight_smile:

InfluxDB를 AWS EC2 인스턴스에 설치해두었는데, 이틀에 한 번꼴로 새벽 5시 20분쯤부터 CPU 스파이크가 발생하고 이후에는 접속할 수 없게 됩니다. Grafana에서는 Prometheus Node Exporter 기준으로 스파이크가 보이는데, 사용한 쿼리는 다음과 같습니다:

(query is sum by (instance)(rate(node_cpu_seconds_total{mode='user',instance=~"$node:$port",job=~"$job"}[5m])) * 100)

동시에, 스파이크가 나기 직전에 매 분마다 아래 명령어들을 실행하는 크론잡을 설정해두었습니다:

ps aux --sort=-%cpu | head -n 20
uptime

로그가 찍힌 출력을 보면 InfluxDB 프로세스의 CPU 사용량은 꾸준히 34%로 나오고(다른 프로세스는 자원 사용이 눈에 띄지 않음), load average 역시 인스턴스가 접근 불가능해질 때까지 안정적으로 유지됩니다.

제 질문은, ps와 node exporter에서 보여주는 정보에는 어떤 차이가 있는지, 제가 놓치고 있는 부분은 무엇인지 알고 싶습니다.

2 Likes

희창님 폭풍질문…:rofl::+1:t2:

ps aux에 표기되는 %CPU는 프로세스별 전체 수명 기간내에 CPU를 사용한 시간의 비율로 나타나기 때문에, 프로세스가 동작한지 오래되었다면 수 분 정도의 스파이크는 전체 평균에 큰 영향을 미치지 못할 것 같습니다. top 명령어로 확인하시면 변화가 확인될 것으로 보입니다.

uptime의 load average도 cpu 사용률과는 다른 계위의, 실행 대기중인 프로세스 수와 관련된 지표이기 때문에, 컨텍스트 스위칭이나 I/O 등으로 인해 발생한 이슈일 경우 관측되지 않을 수도 있을 것 같습니다.

반면에 node exporter쪽은 5분간의 평균 변화율을 측정하기 때문에 CPU 스파이크가 감지되는 것으로 보입니다.

해당 시간대에 InfluxDB 쪽 로그에서 compaction나 retention 등과 관련된 동작이 남아있는지 확인해보시면 좋을 것 같습니다.

4 Likes

@GopChang 해당 시간대 앞뒤로 뒤져봤는데요. 댓글 주신 것처럼 기간에 대한 평균 값에 대한 차이와 그리고 특히 “컨텍스트 스위칭이나 I/O 등으로 인해 발생한 이슈” 등 반영안되는 것들이 차이가 있네요. 한수 배웁니다. 감사합니다. :smiling_face_with_three_hearts:

2 Likes