• Linux 시스템의 디스크 I/O 사용량과 파일 시스템 및 inode 사용량을 모니터링
  • Prometheus를 사용하여 Disk I/O를 확인 가능
  • Prometheus는 메트릭 수집 시스템이며, node_exporter는 다양한 시스템 메트릭을 노출
  • 디스크 I/O에 대한 개별 메트릭을 분석 → 디스크 성능, 디스크 사용량 및 애플리케이션에서 발생하는 I/O 대기 시간에 대한 중요한 정보를 제공

디스크 I/O

  • Linux 시스템에서 디스크 I/O 메트릭은 파일 시스템에서 몇 개의 파일을 읽음으로써 모니터링 가능
  • 디스크 또는 프로세스가 파일인 경우 지정된 시점에 연결된 메트릭을 저장하는 파일이 있음

Node exporter의 원시 디스크 통계

  • Linux 시스템에서 node_exporter는 디스크 메트릭을 /proc/diskstats 파일에서 얻어옮
  • /proc/diskstat 파일의 형식 → https://www.kernel.org/doc/Documentation/iostats.txt
  • 각 prometheus 메트릭은 NewDiskstatsCollector의 소스 코드에서 볼 수 있듯이 해당 파일의 필드 중 하나에 직접 대응함
  • prometheus 메트릭 값을 커널 소스 데이터와 일치시키는 것이 중요 → node_exporter는 몇 가지 크기 조정 요소를 제외하고 커널에서 반환된 원시 데이터를 추출함
  • 커널이 여러 섹터를 반환하는 경우 node_exporter는 섹터 크기를 곱하여 바이트 수가 됨
  • 커널이 시간을 밀리초 단위로 보고하는 경우 node_exporter는 0.001을 곱하여 초를 만듦

Node exporter의 I/O 메트릭 값

1. node_disk_reads_completed_total

  • field 1
  • 성공적으로 완료된 총 읽기 수

2. node_disk_reads_merged_total

  • field 2
  • 서로 인접한 읽기를 효율성의 위해 병합하는 횟수를 표시

3. node_disk_writes_merged_total

  • field 6
  • 서로 인접한 쓰기를 효율성의 위해 병합하는 횟수를 표시

4. node_disk_discards_merged_total

  • field 13
  • 서로 인접한 읽기 및 쓰기는 효율성을 위해 병합될 수 있음
  • 두 개의 4K 읽기는 궁극적으로 디스크에 전달되기 전에 하나의 8K 읽기가 될 수 있으므로 하나의 I/O로만 계산(및 대기열에 추가)
  • node_disk_discards_merged_total 필드를 통해 읽기 및 쓰기 병합 작업이 얼마나 자주 수행되었는지 알 수 있음

5. node_disk_read_bytes_total

  • field 3
  • 성공적으로 읽은 총 바이트 수

6. node_disk_read_time_seconds_total

  • field 4
  • 모든 읽기에 소요된 총 시간(초) → __make_request()에서 end_that_request_last()까지 측정

7. node_disk_writes_completed_total

  • field 5
  • 성공적으로 완료된 총 쓰기 수

8. node_disk_written_bytes_total

  • field 7
  • 성공적으로 쓰기가 완료된 총 바이트 수

9. node_disk_write_time_seconds_total

  • field 8
  • 모든 쓰기에 소요된 총 시간(초) → __make_request()에서 end_that_request_last()까지 측정

10. node_disk_io_now

  • field 9
  • 0으로 가야 하는 유일한 필드
  • 요청이 request_queue 구조체에 제공되면 증가하고 완료되면 감소

11. node_disk_io_time_seconds_total

  • field 10
  • I/O를 수행하는 데 소요된 시간(초)
  • node_disk_io_time_seconds_total 필드는 node_disk_io_now가 0이 아닌 한 증가

12. node_disk_io_time_weighted_seconds_total

  • field 11
  • I/O를 수행하는 데 소요된 가중치(초)
  • I/O를 수행하는 데 소요된 시간(초)에 동시 I/O 요청 수를 곱한 값을 계산
  • I/O 완료 시간과 누적될 수 있는 백로그(backlog)를 쉽게 측정 가능

13. node_disk_discards_completed_total

  • field 12
  • 성공적으로 완료된 총 폐기(discard) 수

14. node_disk_discarded_sectors_total

  • field 14
  • 성공적으로 폐기(discard)된 총 섹터 수

15. node_disk_discard_time_seconds_total

  • field 15
  • 모든 폐기(discard)에 소요된 총 시간(초) → __make_request()에서 end_that_request_last()까지 측정

16. node_disk_flush_requests_total

  • field 16
  • 성공적으로 완료된 총 플러시(flush) 요청 수

17. node_disk_flush_requests_time_seconds_total

  • field 17
  • 모든 플러시(flush) 요청에 소요된 총 시간(초)

+ Recent posts