Kiểm tra thời gian uptime của một Docker Container

Kiểm tra thời gian uptime của một Docker ContainerCuongquach.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.

thời gian uptime docker container

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/

Previous articleLàm chủ truy vấn DNS trong Consul – Service Discovery
Next articleSinh viên ngành Mạng máy tính – Cánh cửa thực tập quá hẹp
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !