엘라스틱서치, 레디스, 스톰 그리고 스파크의 메트릭 정보를 수집하여서 그라파나에 보여주기 위해 프로메테우스를 사용하고있습니다. 어느날 엘라스틱서치에 오류가 발생하면서 셧다운 된 적이 있습니다. 다행이도 운영중인 서버가 아닌 테스트 서버의 디스크 용량이 꽉차서 운영에는 문제가 되지 않았습니다.
어디서 용량을 많이 잡아 먹는지 보니 프로메테우스에서 대략 80퍼센트의 용량을 먹고 있었습니다.!!
어떤 이유로든 로컬 저장소가 손상된 경우 문제를 해결하는 가장 좋은 전략은 Prometheus를 종료한 다음 전체 저장소 디렉터리를 제거하는 것입니다. 개별 블록 디렉터리나 WAL 디렉터리를 제거하여 문제를 해결할 수도 있습니다. 이는 블록 디렉터리당 약 2시간의 데이터가 손실된다는 것을 의미합니다. 다시 말하지만, Prometheus의 로컬 스토리지는 내구성이 뛰어난 장기 스토리지가 아닙니다. 외부 솔루션은 확장된 보존 및 데이터 내구성을 제공합니다.
주의: 복구할 수 없는 손상이 발생할 수 있으므로 POSIX와 호환되지 않는 파일 시스템은 Prometheus의 로컬 저장소에 대해 지원되지 않습니다. NFS 파일 시스템(AWS EFS 포함)은 지원되지 않습니다. NFS는 POSIX와 호환될 수 있지만 대부분의 구현은 그렇지 않습니다. 안정성을 위해 로컬 파일 시스템을 사용하는 것이 좋습니다.
일단 프로메테우스에서 제공하는 정보를 보시면
저장
Prometheus에는 로컬 온디스크 시계열 데이터베이스가 포함되어 있지만 선택적으로 원격 스토리지 시스템과도 통합됩니다.
로컬 저장소
Prometheus의 로컬 시계열 데이터베이스는 로컬 스토리지에 매우 효율적인 맞춤형 형식으로 데이터를 저장합니다.
온디스크 레이아웃
섭취된? 샘플은 2시간 단위로 그룹화됩니다. 각 2시간 블록은 해당 시간창에 대한 모든 시계열 샘플이 포함된 Chunk 하위 디렉터리, 메타데이터 파일 및 인덱스 파일(지표 이름 및 레이블을 청크 디렉터리의 시계열에 색인화함)이 포함된 디렉터리로 구성됩니다. 청크 디렉터리의 샘플은 기본적으로 각각 최대 512MB 의 하나 이상의 세그먼트 파일로 그룹화됩니다.
API를 통해 시리즈가 삭제되면 삭제 기록은 별도의 삭제 표시 파일에 저장됩니다(청크 세그먼트에서 데이터를 즉시 삭제하는 대신).
들어오는 샘플의 현재 블록은 메모리에 보관되며 완전히 유지되지 않습니다. Prometheus 서버가 다시 시작될 때 재생할 수 있는 WAL(미리 쓰기 로그)을 통해 충돌로부터 보호됩니다. 미리 쓰기 로그 파일은 wal128MB 세그먼트로 디렉터리에 저장됩니다. 이러한 파일에는 아직 압축되지 않은 원시 데이터가 포함되어 있습니다. 따라서 일반 블록 파일보다 훨씬 더 큽니다. Prometheus는 최소 3개의 미리 쓰기 로그 파일을 보관합니다. 트래픽이 많은 서버는 최소 2시간의 원시 데이터를 보관하기 위해 3개 이상의 WAL 파일을 보관할 수 있습니다.
Prometheus 서버의 데이터 디렉터리는 다음과 같습니다.
시간 및 크기 보존 정책이 모두 지정된 경우 먼저 트리거되는 것이 사용됩니다.
만료된 블록 정리는 백그라운드에서 수행됩니다. 만료된 블록을 제거하는 데 최대 2시간이 걸릴 수 있습니다. 블록은 제거되기 전에 완전히 만료되어야 합니다.
./data
├── 01BKGV7JBM69T2G1BGBGM6KB12
│ └── meta.json
├── 01BKGTZQ1SYQJTR4PB43C8PD98
│ ├── chunks
│ │ └── 000001
│ ├── tombstones
│ ├── index
│ └── meta.json
├── 01BKGTZQ1HHWHV8FBJXW1Y3W0K
│ └── meta.json
├── 01BKGV7JC0RY8A6MACW02A2PJD
│ ├── chunks
│ │ └── 000001
│ ├── tombstones
│ ├── index
│ └── meta.json
├── chunks_head
│ └── 000001
└── wal
├── 000000002
└── checkpoint.00000001
└── 00000000