Kiểm tra thời gian uptime của một Docker Container – Cuongquach.com | Bạn có bao giờ quan tâm đến thời gian đang chạy (uptime) của một con docker container hay không ? Thật ra giá trị này cũng ít người quan tâm, nhưng hôm nay mình có việc phải code hệ thống thu thập thông tin về container thì có nhu cầu kiểm thông tin giá trị thể hiện thời gian uptime của 1 con Docker Container chính xác thời lượng time. Thế là bạn có bài viết này đấy.
Có thể bạn quan tâm chủ đề khác
– Kích hoạt chế độ debug trên Docker
– Container Registry là gì ?
– Docker Hub là gì ?
– Sự khác nhau giữa Docker Hub và Docker Registry
Kiểm tra thời gian uptime của Docker Container
Thông thườn bạn có thể kiểm tra thời gian đang chạy của container docker như lệnh dưới, ở cột STATUS :
# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 26ef46805025 google/cadvisor:latest "/usr/bin/cadvisor -…" 2 days ago Up 2 days 0.0.0.0:8080->8080/tcp prometheus-cadvisor
Nhưng mà thông tin chỉ mang tính tương đối không phù hợp nhu cầu cần thông tin thời gian cụ thể để đo lường.
Mặc định khi bạn coi các thông tin chi tiết của docker container bằng lệnh ‘docker inspect‘ thì sẽ thấy không hề có giá trị nào thể hiện thời gian uptime như trên Linux host. Thay vào đó có một trường giá trị có thể sử dụng để tính toán đó là ‘StartedAt‘.
docker inspect --format='{{.State.StartedAt}}' <CONTAINERID>
Ví dụ:
# docker inspect --format='{{.State.StartedAt}}' ddbcf0aef360 2018-11-19T15:15:05.117303883Z
Chú thích:
– StartedAt : là thời gian mà container đó được start lên gần nhất để chạy (chạy ở trạng thái running). Khi bạn stop container thì nó vẫn sẽ lưu giá trị thời gian start container gần nhất, nên kết hợp 2 điều kiện là ‘container‘ đang chạy (running) và thời gian startedAt của nó.
Sau khi có được thông tin thời gian khởi động container rồi thì ta sẽ convert sang thời gian unix time.
# docker inspect --format='{{.State.StartedAt}}' ddbcf0aef360 | xargs date +%s -d 1542640505
Rồi lấy Unixtime thời gian hiện tại, tính toán trừ đi thời gian unixtime khởi động container là sẽ ra thời gian uptime (đơn vị giây) chạy của container . Nên ta có thể có công thức đơn giản như sau .
#!/bin/bash #Author: Quach CHi Cuong CONTAINER_ID="$1" CURRENT_TIME=$(date +%s) START_TIME_CONTAINER=$(docker inspect --format='{{.State.StartedAt}}' ${CONTAINER_ID} | xargs date +%s -d) UPTIME=$(expr ${CURRENT_TIME} - ${START_TIME_CONTAINER}) echo "CONTAINER_ID: ${CONTAINER_ID} - Uptime: ${UPTIME}s" exit 0
Giờ chạy thử script đơn giản này thôi nào.
# bash test.sh ddbcf0aef360 CONTAINER_ID: ddbcf0aef360 - Uptime: 156647
Đơn giản vui vẻ phải không các bạn. Nếu bạn thích chuyển đổi thời gian (giây) sang phút, giờ,.. thì bạn có thể tự code thêm nhé. Cám ơn các bạn đã theo dõi.
Nguồn: https://cuongquach.com/