Logo

Personal Ops Runbook

Personal runbook covering infrastructure operations for Cloud, Kubernetes, OpenStack, and Ceph environments. Includes deployment and teardown procedures, node management, cluster monitoring setup, and incident response workflows compiled from day-to-day operational work. Intended strictly for personal reference — configurations and scripts are environment-specific and not guaranteed to work as-is elsewhere.

OVERVIEW

Tài liệu này ghi lại quy trình xử lý tình huống ổ đĩa full (100%) do dữ liệu Prometheus TSDB phình to trong Docker volume.

  • Dành cho ai: Admin/DevOps vận hành stack monitoring (Prometheus/Grafana/Loki) chạy bằng Docker / Docker Compose.
  • Dùng khi nào: Khi df -h báo / 100%, hoặc /var/lib/docker/volumes tăng bất thường, Prometheus chiếm hàng trăm GB.
  • Cách đọc nhanh:

    1. Xác nhận nguyên nhân: /var/lib/docker/volumes/.../_data/data là TSDB của Prometheus.
    2. Ưu tiên cách an toàn: đặt retention hợp lý rồi restart (mục A + C).
    3. Nếu đang full disk và cần “thở” ngay: xoá block cũ nhất có kiểm soát (mục B1).
    4. Chỉ dùng reset (mục B2) khi chấp nhận mất toàn bộ history.

Warning: Khi disk đã 100%, nhiều thao tác có thể fail (logrotate, docker, systemd). Hãy giải phóng một ít dung lượng trước (xoá 1 block cũ nhất) để hệ thống hoạt động ổn định trở lại.


Hiện trạng & xác định thủ phạm

1) Disk / đầy 100%

Log lúc login báo lỗi

-bash: echo: write error: No space left on device
cat: write error: No space left on device

Check disk

(venv) root@adminserver-251:/home/hoanghd3# df -h | head
Filesystem                         Size  Used Avail Use% Mounted on
tmpfs                              3.2G  333M  2.9G  11% /run
/dev/mapper/ubuntu--vg-ubuntu--lv  470G  446G   12M 100% /
tmpfs                               16G   16K   16G   1% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
/dev/sda2                          2.0G  252M  1.6G  14% /boot
tmpfs                              3.2G  4.0K  3.2G   1% /run/user/0
tmpfs                              3.2G  8.0K  3.2G   1% /run/user/1001
/dev/rbd0                          503G   83G  395G  18% /s3-data
overlay                            470G  446G   12M 100% /var/lib/docker/overlay2/20f5afb568dd74e9457fb313390616142b470b7454dc7362e51afa6bc01f7993/merged

2) Top thư mục ngốn dung lượng

Đầu tiên có thể tìm từ thư mục gốc /

(venv) root@adminserver-251:/home/hoanghd3# sudo du -xhd1 / 2>/dev/null | sort -hr | head
446G    /
334G    /var
97G     /home
4.6G    /usr
1.3G    /root
1.3G    /opt
408M    /etc
1.1M    /tmp
36K     /textfile_collector
24K     /snap

Xác định /var nhiều dung lượng nhất, tiếp tục tìm thư mục /var

(venv) root@adminserver-251:/home/hoanghd3# sudo du -xhd1 /var 2>/dev/null | sort -hr | head
334G    /var/lib
334G    /var
231M    /var/log
139M    /var/cache
2.7M    /var/backups
64K     /var/snap
52K     /var/tmp
24K     /var/www
20K     /var/spool
4.0K    /var/opt

Xác định /var/lib nhiều dung lượng nhất, tiếp tục tìm thư mục /var/lib

(venv) root@adminserver-251:/home/hoanghd3# sudo du -xhd1 /var/lib 2>/dev/null | sort -hr | head
334G    /var/lib
332G    /var/lib/docker
1006M   /var/lib/snapd
273M    /var/lib/apt
45M     /var/lib/dpkg
6.2M    /var/lib/ubuntu-advantage
3.5M    /var/lib/command-not-found
1.1M    /var/lib/containerd
908K    /var/lib/letsencrypt
704K    /var/lib/usbutils

Cứ như vậy tìm xác định thư mục lớn nhất và tìm /var/lib/docker -> từ đây ta cũng xác minh được dung lượng lớn phát sinh từ Docker nhưng chưa biết từ ứng dụng nào.

(venv) root@adminserver-251:/home/hoanghd3# sudo du -xhd1 /var/lib/docker 2>/dev/null | sort -hr | head
332G    /var/lib/docker
313G    /var/lib/docker/volumes
13G     /var/lib/docker/containers
7.6G    /var/lib/docker/overlay2
20M     /var/lib/docker/image
160K    /var/lib/docker/network
112K    /var/lib/docker/buildkit
16K     /var/lib/docker/plugins
8.0K    /var/lib/docker/tmp
4.0K    /var/lib/docker/swarm

Xác định volume 2ac7edc7177d13eec597cf6453ec9bf24be4d2f410ef15dfc1b376b0dca234ff đang có site lớn nhất

(venv) root@adminserver-251:/home/hoanghd3# sudo du -xhd1 /var/lib/docker/volumes 2>/dev/null | sort -hr | head
313G    /var/lib/docker/volumes
312G    /var/lib/docker/volumes/2ac7edc7177d13eec597cf6453ec9bf24be4d2f410ef15dfc1b376b0dca234ff
813M    /var/lib/docker/volumes/cb21f492160213c9cb70709c33f7f5a0104df38ad59090a7d55f933bf7c1db40
333M    /var/lib/docker/volumes/1a55c0508eafa8eff23b682e3e953f55f2e4afc96f74ae2033bd79535c4b847f
12K     /var/lib/docker/volumes/fe9d99925a6159bde8f9c1d16d6619d22a23a4e8489251e2b7f62cd2d654253b
12K     /var/lib/docker/volumes/e4bdbbc8cab68e8bc562370832cb7e6041988911a5094c33fb3db22f1f3b8a8a
12K     /var/lib/docker/volumes/a2af4bde355eb06890449e0796019535dc293411329f4fa9b23d90801033a377
12K     /var/lib/docker/volumes/9742cd4d6a6ad3586290e9fd9a100bbd88dac03d58a7b2feacb5839b5fb43482
12K     /var/lib/docker/volumes/63a4d4f33c66ad426109049f44269443114f6825b8177f81e0b2df58c12529d1
12K     /var/lib/docker/volumes/52cbcf97f650d1f90c06289db1676e66e05b8a8144f74cc162a3bb7c9339ec3f

Vào sâu xíu nữa sẽ thấy rõ ràng thư mục phình to nhất

(venv) root@adminserver-251:/home/hoanghd3# sudo du -xhd1 /var/lib/docker/volumes/2ac7edc7177d13eec597cf6453ec9bf24be4d2f410ef15dfc1b376b0dca234ff 2>/dev/null | sort -hr | head
312G    /var/lib/docker/volumes/2ac7edc7177d13eec597cf6453ec9bf24be4d2f410ef15dfc1b376b0dca234ff/_data
312G    /var/lib/docker/volumes/2ac7edc7177d13eec597cf6453ec9bf24be4d2f410ef15dfc1b376b0dca234ff

✅ Kết luận: volume 2ac7ed... đang chiếm ~312G, gần như toàn bộ nằm ở .../_data/data (khả năng cao là Prometheus TSDB).


Kiểm tra mức độ “rác” của Docker (để tránh dọn nhầm)

(venv) root@adminserver-251:/home/hoanghd3# sudo docker system df -v
Images space usage:

REPOSITORY                        TAG               IMAGE ID       CREATED         SIZE      SHARED SIZE   UNIQUE SIZE   CONTAINERS
quay.io/minio/minio               latest            a98a9d647e70   6 months ago    175MB     0B            175.3MB       1
wordpress                         latest            1dd7c0f90f66   6 months ago    703MB     0B            703.1MB       4
grafana/grafana                   latest            008307cdce1d   8 months ago    680MB     0B            680.5MB       1
hoanghd164/nginx-addon            latest            d82fe1a3c0ed   8 months ago    677MB     0B            677.2MB       1
prom/pushgateway                  latest            a254145ab33a   9 months ago    24.2MB    2.774MB       21.39MB       1
prom/alertmanager                 latest            91c01b3cec9b   10 months ago   72.3MB    2.774MB       69.53MB       1
prom/blackbox-exporter            latest            694775639bf5   11 months ago   26.5MB    2.774MB       23.76MB       1
redis                             latest            fa310398637f   12 months ago   117MB     0B            117MB         0
prom/snmp-exporter                main              05fca5bd7452   12 months ago   22.3MB    2.774MB       19.52MB       1
prompve/prometheus-pve-exporter   latest            6cf4af921d9c   13 months ago   122MB     0B            121.7MB       1
mongo                             latest            f08e39122805   13 months ago   855MB     0B            854.9MB       0
prom/prometheus                   latest            24c1b63a5674   14 months ago   292MB     2.774MB       289MB         1
mongo                             4.4               d896c071ac69   23 months ago   427MB     0B            427.3MB       1
outlinewiki/outline               0.72.0-3          db3456a4d962   2 years ago     732MB     0B            732.2MB       0
grafana/loki                      2.9.0             21abbe8487a0   2 years ago     74.8MB    0B            74.85MB       1
wordpress                         6.2.2             5f9504793952   2 years ago     664MB     0B            663.9MB       1
mariadb                           10.7.8            895b6c8829c3   2 years ago     396MB     0B            395.7MB       5
postgres                          15.2-alpine3.17   ddc12ac7fa27   2 years ago     243MB     0B            243.1MB       0
vicalloy/oidc-server              latest            d0662f453b20   3 years ago     1.05GB    0B            1.052GB       0

Containers space usage:

CONTAINER ID   IMAGE                             COMMAND                  LOCAL VOLUMES   SIZE      CREATED        STATUS                    NAMES
8e26e8e71800   mongo:4.4                         "docker-entrypoint.s…"   1               0B        5 weeks ago    Exited (14) 2 days ago    mongodb
6a4f2a5b8345   prom/blackbox-exporter            "/bin/blackbox_expor…"   0               0B        3 months ago   Up 3 months               blackbox
712357f46932   prom/prometheus                   "/bin/prometheus --c…"   1               0B        3 months ago   Up 2 months               prometheus
90b1435db85f   prompve/prometheus-pve-exporter   "/opt/prometheus-pve…"   0               0B        3 months ago   Up 3 months               pve-exporter
1848805f14b0   grafana/grafana                   "/run.sh"                0               106MB     3 months ago   Up 3 months               grafana
33ef7084b934   prom/pushgateway                  "/bin/pushgateway"       0               0B        3 months ago   Up 3 months               pushgateway
9e45ed5c43c0   prom/alertmanager                 "/bin/alertmanager -…"   1               0B        3 months ago   Up 3 months               alertmanager
93a425811263   grafana/loki:2.9.0                "/usr/bin/loki -conf…"   0               0B        3 months ago   Up 3 months               loki
9e84d7ea8dce   prom/snmp-exporter:main           "/bin/snmp_exporter …"   0               0B        3 months ago   Up 3 months               snmp-exporter
4559962f654e   wordpress:latest                  "docker-entrypoint.s…"   0               854B      4 months ago   Up 4 months               l2pro-production
8e8f5ea73490   mariadb:10.7.8                    "docker-entrypoint.s…"   0               2B        4 months ago   Up 4 months               l2pro-db-production
7e35f7d55ce9   wordpress:latest                  "docker-entrypoint.s…"   0               854B      4 months ago   Up 4 months               evfai-production
7db87339ef2a   mariadb:10.7.8                    "docker-entrypoint.s…"   0               2B        4 months ago   Up 4 months               evfai-db-production
99761009169c   wordpress:latest                  "docker-entrypoint.s…"   0               854B      4 months ago   Up 4 months               aicsc-production
f6eebf54e51d   mariadb:10.7.8                    "docker-entrypoint.s…"   0               2B        4 months ago   Up 4 months               aicsc-db-production
8e1561dd625e   mariadb:10.7.8                    "docker-entrypoint.s…"   0               2B        5 months ago   Up 5 months               weautomate-db-production
9fbb6b825642   wordpress:latest                  "docker-entrypoint.s…"   0               854B      5 months ago   Up 5 months               weautomate-production
51f450535298   quay.io/minio/minio               "/usr/bin/docker-ent…"   0               0B        5 months ago   Exited (0) 5 months ago   minio
fd863c8015eb   hoanghd164/nginx-addon:latest     "nginx -g 'daemon of…"   0               984B      7 months ago   Up 2 weeks                nginx
caa489b2a121   wordpress:6.2.2                   "docker-entrypoint.s…"   0               854B      7 months ago   Up 4 months               stacklab-production
85095ceaed37   mariadb:10.7.8                    "docker-entrypoint.s…"   0               2B        7 months ago   Up 4 months               stacklab-db-production

Local Volumes space usage:

VOLUME NAME                                                        LINKS     SIZE
9742cd4d6a6ad3586290e9fd9a100bbd88dac03d58a7b2feacb5839b5fb43482   0         0B
cb21f492160213c9cb70709c33f7f5a0104df38ad59090a7d55f933bf7c1db40   0         852.1MB
2ac7edc7177d13eec597cf6453ec9bf24be4d2f410ef15dfc1b376b0dca234ff   1         334GB
9aa5ee65d3ec9fbfa2d4929dcb7f8987cf27e5a1b5c957797a9f0e6e178208bc   1         0B
52cbcf97f650d1f90c06289db1676e66e05b8a8144f74cc162a3bb7c9339ec3f   0         0B
1a55c0508eafa8eff23b682e3e953f55f2e4afc96f74ae2033bd79535c4b847f   0         348.7MB
73d07bac7267b956f220ffb8f09ce059b355f5291169ec49a27c19a1cb9f15d6   0         0B
63a4d4f33c66ad426109049f44269443114f6825b8177f81e0b2df58c12529d1   0         289B
e4bdbbc8cab68e8bc562370832cb7e6041988911a5094c33fb3db22f1f3b8a8a   0         311B
a2af4bde355eb06890449e0796019535dc293411329f4fa9b23d90801033a377   0         0B
fe9d99925a6159bde8f9c1d16d6619d22a23a4e8489251e2b7f62cd2d654253b   1         0B
de2af1e1a95a5e79efd591a776f3f7b31d405cffd30973f6b00624f18dcf61ac   0         0B
d3b2f4cde7e3531f91cabcac02356074662f80ed1e9308cc06fa71b4edc15ef8   0         0B

Build cache usage: 0B

CACHE ID   CACHE TYPE   SIZE      CREATED   LAST USED   USAGE     SHARED

Note: docker system df cho thấy Images/Containers không phải nguyên nhân chính. Volume Prometheus mới là thứ phình.


Xác định volume đó đang được mount vào đâu (để chắc chắn không xoá nhầm)

Từ đây đã xác minh được thư mục mount vào là của ứng dụng Prometheus

(venv) root@adminserver-251:/home/hoanghd3# VOL=2ac7edc7177d13eec597cf6453ec9bf24be4d2f410ef15dfc1b376b0dca234ff
sudo docker ps -aq | xargs -r sudo docker inspect \
  --format '{{.Name}} {{range .Mounts}}{{if eq .Name "'"$VOL"'"}}{{.Destination}}{{end}}{{end}}' \
| awk '$2!=""{print}'
/prometheus /prometheus

Xác định thư mục metric làm phình dung lượng

(venv) root@adminserver-251:/home/hoanghd3# sudo du -h --max-depth=2 /var/lib/docker/volumes/2ac7edc7177d13eec597cf6453ec9bf24be4d2f410ef15dfc1b376b0dca234ff/_data | sort -hr | head
312G    /var/lib/docker/volumes/2ac7edc7177d13eec597cf6453ec9bf24be4d2f410ef15dfc1b376b0dca234ff/_data/data
312G    /var/lib/docker/volumes/2ac7edc7177d13eec597cf6453ec9bf24be4d2f410ef15dfc1b376b0dca234ff/_data
60G     /var/lib/docker/volumes/2ac7edc7177d13eec597cf6453ec9bf24be4d2f410ef15dfc1b376b0dca234ff/_data/data/01KDR3N76BNFFAFF6C4HSTRT1A
60G     /var/lib/docker/volumes/2ac7edc7177d13eec597cf6453ec9bf24be4d2f410ef15dfc1b376b0dca234ff/_data/data/01KC3Z3JPCPZK8DGWW6QE155ST
60G     /var/lib/docker/volumes/2ac7edc7177d13eec597cf6453ec9bf24be4d2f410ef15dfc1b376b0dca234ff/_data/data/01KAFTHV1FDJ1FGFWDJAHY9X5E
60G     /var/lib/docker/volumes/2ac7edc7177d13eec597cf6453ec9bf24be4d2f410ef15dfc1b376b0dca234ff/_data/data/01K8VP001G94HJN5DZF5QJRZKE
21G     /var/lib/docker/volumes/2ac7edc7177d13eec597cf6453ec9bf24be4d2f410ef15dfc1b376b0dca234ff/_data/data/01KETVR992SPGWHC6CD77WXY2D
20G     /var/lib/docker/volumes/2ac7edc7177d13eec597cf6453ec9bf24be4d2f410ef15dfc1b376b0dca234ff/_data/data/01KE9FJE42PTZJFGH2A0QQXNSE
6.8G    /var/lib/docker/volumes/2ac7edc7177d13eec597cf6453ec9bf24be4d2f410ef15dfc1b376b0dca234ff/_data/data/01KF0N26YFFT3AEFH7QXM4HXTD
6.7G    /var/lib/docker/volumes/2ac7edc7177d13eec597cf6453ec9bf24be4d2f410ef15dfc1b376b0dca234ff/_data/data/01KF6EERW8FA4R0R2QC4BP1GNH

✅ Kết luận: volume này đang được container mount vào Destination/prometheus và dữ liệu TSDB nằm ở thư mục data/01K... (các TSDB blocks).

Note: Mỗi thư mục data/01K... là một block TSDB. Xoá block = mất dữ liệu metrics lịch sử của khoảng thời gian block đó.


A) Giải phóng dung lượng ngay (an toàn nhất)

Checklist nhanh (ưu tiên khi còn thao tác được)

  • [ ] Xem Prometheus đang chạy với retention gì
  • [ ] Giảm retention (theo time và/hoặc size)
  • [ ] Restart Prometheus để nó tự dọn block cũ

1) Xem Prometheus đang chạy với option gì (retention hiện tại)

sudo docker inspect prometheus --format '{{.Args}}'
# hoặc
sudo docker logs --tail=50 prometheus

2) Cách “đúng bài” để giảm size: giảm retention rồi restart

Nếu bạn đang chạy Prometheus bằng docker compose / docker run, thêm (hoặc sửa) các flag:

  • Theo thời gian (vd giữ 15 ngày): dùng --storage.tsdb.retention.time
  • Theo dung lượng (vd cap 50GB): dùng --storage.tsdb.retention.size
--storage.tsdb.retention.time=15d
--storage.tsdb.retention.size=50GB

Rồi restart container:

sudo docker restart prometheus

Warning: Prometheus sẽ tự xoá block cũ theo retention sau khi chạy. Nhưng nếu disk đang 100%, bạn có thể cần dọn “mạnh” hơn (mục B) để tạo khoảng trống cho quá trình xoá/compact diễn ra.


B) Dọn mạnh (nhưng vẫn kiểm soát được) nếu cần lấy lại hàng trăm GB

Option B1 (ít rủi ro, không mất toàn bộ): xoá các block cũ nhất trong TSDB

Các thư mục data/01K... chính là block. Bạn có thể xoá block cũ theo “thời gian” sau khi xác định cái nào cũ nhất.

  1. Liệt kê block theo thời gian sửa đổi (cũ lên đầu):
DATA=/var/lib/docker/volumes/2ac7edc7177d13eec597cf6453ec9bf24be4d2f410ef15dfc1b376b0dca234ff/_data/data
sudo ls -lt --time=mtime "$DATA" | head
sudo ls -lt --time=mtime "$DATA" | tail
  1. Xoá 1–2 block cũ nhất để giải phóng nhanh (mỗi cái của bạn đang ~60G):
# ví dụ xoá 1 block (thay tên đúng block bạn muốn xoá)
sudo rm -rf "$DATA/01KDR3N76BNFFAFF6C4HSTRT1A"
  1. Restart Prometheus:
sudo docker restart prometheus

Warning: Xoá block nghĩa là mất dữ liệu metrics lịch sử của khoảng thời gian đó. Prometheus thường vẫn chạy bình thường sau restart, nhưng đừng xoá “bừa” nhiều block nếu bạn cần giữ lịch sử.

Option B2 (mạnh nhất, nhanh nhất): reset toàn bộ Prometheus data

Chỉ dùng khi bạn chấp nhận mất toàn bộ history metrics.

sudo docker stop prometheus
sudo rm -rf /var/lib/docker/volumes/2ac7edc7177d13eec597cf6453ec9bf24be4d2f410ef15dfc1b376b0dca234ff/_data/data/*
sudo docker start prometheus

C) Fix tận gốc để không phình lại

1) Bật retention rõ ràng (khuyên dùng: size + time)

Ví dụ:

  • time: 15d
  • size: 50GB
command:
  - '--config.file=/etc/prometheus/prometheus.yml'
  - '--storage.tsdb.path=/prometheus'
  - '--storage.tsdb.retention.time=15d'
  - '--storage.tsdb.retention.size=50GB'

Note: Nếu chỉ đặt retention.time quá lớn (vd 360d) thì TSDB sẽ phình theo thời gian rất nhanh, đặc biệt khi scrape nhiều target/high-cardinality.


Kiểm tra cấu hình hiện tại & áp dụng thay đổi từ ví dụ thực tế

1) Xác nhận args hiện tại của Prometheus

(venv) root@adminserver-251:/home/monitoring/prometheus# docker inspect prometheus --format '{{.Args}}'
[--config.file=/etc/prometheus/prometheus.yml --storage.tsdb.retention.time=360d --web.enable-remote-write-receiver --web.listen-address=:9090]

✅ Nhận xét nhanh: --storage.tsdb.retention.time=360drất dài, dễ dẫn tới volume phình hàng trăm GB.

2) Ví dụ docker-compose.yml với retention hợp lý

version: '3'
services:
  loki:
    image: grafana/loki:2.9.0
    command: -config.file=/etc/loki/loki.yml
    container_name: loki
    restart: unless-stopped
    ports:
      - "3100:3100"
    volumes:
      - /home/monitoring/loki:/etc/loki
      - /home/monitoring/loki/tmp:/var/lib/loki
      - /home/monitoring/loki/rules/fake:/etc/loki/rules/fake
    networks:
      - monitoring

  prometheus:
    image: prom/prometheus
    container_name: prometheus
    restart: unless-stopped
    ports:
      - "9090:9090"
    volumes:
      - /home/monitoring/prometheus/data:/etc/prometheus/data
      - /home/monitoring/prometheus/config/prometheus.yml:/etc/prometheus/prometheus.yml
      - /etc/hosts:/etc/hosts
    privileged: true
    command:
      - --config.file=/etc/prometheus/prometheus.yml
      - --storage.tsdb.retention.time=60d
      - --storage.tsdb.retention.size=100GB
      - --web.enable-remote-write-receiver
      - --web.listen-address=:9090
    networks:
      - monitoring

  pushgateway:
    image: prom/pushgateway
    container_name: pushgateway
    restart: unless-stopped
    ports:
      - "9091:9091"
    networks:
      - monitoring

  pve_exporter:
    image: prompve/prometheus-pve-exporter
    container_name: pve-exporter
    restart: unless-stopped
    ports:
      - "9221:9221"
    volumes:
      - /home/monitoring/prometheus/pve/pve.yml:/etc/prometheus/pve.yml
    networks:
      - monitoring

  snmp-exporter:
    image: prom/snmp-exporter:main
    container_name: snmp-exporter
    restart: unless-stopped
    ports:
      - "9116:9116"
    volumes:
      - /home/monitoring/prometheus/snmp/snmp.yml:/etc/snmp_exporter/snmp.yml
      - /etc/hosts:/etc/hosts
    networks:
      - monitoring

  grafana:
    image: grafana/grafana
    container_name: grafana
    restart: unless-stopped
    ports:
      - "9092:3000"
    environment:
      GF_INSTALL_PLUGINS: grafana-polystat-panel,yesoreyeram-boomtable-panel,alexanderzobnin-zabbix-app,agenty-flowcharting-panel
      GF_SECURITY_ADMIN_PASSWORD: Aa@1234567
    volumes:
      - /home/monitoring/grafana/dashboard.yml:/etc/grafana/provisioning/dashboards/default.yml
      - /home/monitoring/grafana/datasources.yml:/etc/grafana/provisioning/datasources/default.yml
      - /home/monitoring/grafana/dashboards:/var/lib/grafana/dashboards
    networks:
      - monitoring

  alertmanager:
    image: prom/alertmanager
    container_name: alertmanager
    restart: unless-stopped
    ports:
      - "9093:9093"
    volumes:
      - /home/monitoring/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml
      - /home/monitoring/alertmanager/template.tmpl:/etc/alertmanager/template.tmpl
    command:
      - --config.file=/etc/alertmanager/alertmanager.yml
    networks:
      - monitoring

  blackbox:
    image: prom/blackbox-exporter
    container_name: blackbox
    restart: unless-stopped
    tty: true
    ports:
      - 9095:9115
    dns: 1.1.1.1
    command: --config.file=/etc/blackbox/blackbox.yml
    volumes:
      - /home/monitoring/blackbox/blackbox.yml:/etc/blackbox/blackbox.yml
    networks:
      - monitoring

networks:
  monitoring:
    name: monitoring

3) Recreate Prometheus để áp dụng cấu hình

(venv) root@adminserver-251:/home/monitoring# docker-compose up -d --force-recreate prometheus
[+] Running 1/1
 ⠿ Container prometheus  Started                                                                                                                                                                                                         2.5s

4) Xác nhận container đang chạy

(venv) root@adminserver-251:/home/monitoring# docker ps | head
CONTAINER ID   IMAGE                             COMMAND                  CREATED          STATUS          PORTS                                                                                                                 NAMES
b3fa5bc7f1fb   prom/prometheus                   "/bin/prometheus --c…"   53 seconds ago   Up 52 seconds   0.0.0.0:9090->9090/tcp, :::9090->9090/tcp                                                                             prometheus
6a4f2a5b8345   prom/blackbox-exporter            "/bin/blackbox_expor…"   3 months ago     Up 3 months     0.0.0.0:9095->9115/tcp, [::]:9095->9115/tcp                                                                           blackbox
90b1435db85f   prompve/prometheus-pve-exporter   "/opt/prometheus-pve…"   3 months ago     Up 3 months     0.0.0.0:9221->9221/tcp, :::9221->9221/tcp                                                                             pve-exporter
1848805f14b0   grafana/grafana                   "/run.sh"                3 months ago     Up 3 months     0.0.0.0:9092->3000/tcp, [::]:9092->3000/tcp                                                                           grafana
33ef7084b934   prom/pushgateway                  "/bin/pushgateway"       3 months ago     Up 3 months     0.0.0.0:9091->9091/tcp, :::9091->9091/tcp                                                                             pushgateway
9e45ed5c43c0   prom/alertmanager                 "/bin/alertmanager -…"   3 months ago     Up 3 months     0.0.0.0:9093->9093/tcp, :::9093->9093/tcp                                                                             alertmanager
93a425811263   grafana/loki:2.9.0                "/usr/bin/loki -conf…"   3 months ago     Up 3 months     0.0.0.0:3100->3100/tcp, :::3100->3100/tcp                                                                             loki
9e84d7ea8dce   prom/snmp-exporter:main           "/bin/snmp_exporter …"   3 months ago     Up 3 months     0.0.0.0:9116->9116/tcp, :::9116->9116/tcp                                                                             snmp-exporter
fd863c8015eb   hoanghd164/nginx-addon:latest     "nginx -g 'daemon of…"   7 months ago     Up 2 weeks      0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:9022->9022/tcp, :::9022->9022/tcp   nginx

5) Xác nhận args sau khi áp dụng retention

(venv) root@adminserver-251:/home/monitoring# docker inspect prometheus --format '{{.Args}}'
[--config.file=/etc/prometheus/prometheus.yml --storage.tsdb.retention.time=60d --storage.tsdb.retention.size=100GB --web.enable-remote-write-receiver --web.listen-address=:9090]

✅ Đã có cả retention.timeretention.size.


Xác nhận kết quả sau khi dọn (disk về mức an toàn)

(venv) root@adminserver-251:/home/monitoring# df -h | head
Filesystem                         Size  Used Avail Use% Mounted on
tmpfs                              3.2G  349M  2.8G  11% /run
/dev/mapper/ubuntu--vg-ubuntu--lv  470G  202G  245G  46% /
tmpfs                               16G   16K   16G   1% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
/dev/sda2                          2.0G  252M  1.6G  14% /boot
tmpfs                              3.2G  4.0K  3.2G   1% /run/user/0
tmpfs                              3.2G  8.0K  3.2G   1% /run/user/1001
/dev/rbd0                          503G   83G  395G  18% /s3-data
overlay                            470G  202G  245G  46% /var/lib/docker/overlay2/20f5afb568dd74e9457fb313390616142b470b7454dc7362e51afa6bc01f7993/merged

✅ Disk / giảm từ 100% xuống 46% — trạng thái ổn định hơn.


Gợi ý vận hành để tránh tái diễn

  • Luôn đặt retention: tối thiểu theo size (có “hard cap”), cộng thêm time để giới hạn lịch sử.
  • Khi thấy TSDB tăng bất thường:

    • xem lại scrape interval, số target và đặc biệt high-cardinality labels (vd pod, container, path, request_id…).
    • Theo dõi cảnh báo:

    • Disk usage //var/lib/docker

    • Prometheus TSDB size/compaction issues (nếu có dashboard/alert)

Note: Nếu bạn dùng --web.enable-remote-write-receiver, cân nhắc kiểm tra xem có nguồn nào “spam remote write” hoặc đẩy series quá nhiều (tăng cardinality) làm TSDB phình nhanh.