Log харах ба удирдах
Аппликейшн ямар алдаа гаргасан, хэзээ хүсэлт ирсэн, юу болсныг мэдэхийн тулд log чухал. Docker container-ийн log-уудыг хэрхэн харах, хадгалах, удирдах талаар энэ хичээлд үзнэ.
docker logs
# Log бүгдийг харах
docker logs mycontainer
# Сүүлийн 50 мөр
docker logs --tail 50 mycontainer
# Бодит цагт дагаж харах
docker logs -f mycontainer
# Хоёуланг нь
docker logs -f --tail 100 mycontainer
# Тодорхой цагаас хойших log
docker logs --since 2024-01-15T10:00:00 mycontainer
docker logs --since 30m mycontainer # сүүлийн 30 минут
docker logs --since 2h mycontainer # сүүлийн 2 цаг
# Тодорхой цагийн өмнөх log
docker logs --until 2024-01-15T12:00:00 mycontainer
# Хооронд нь
docker logs --since 10:00 --until 11:00 mycontainer
# Timestamp харуулах
docker logs -t mycontainer
Stdout ба stderr
Docker нь аппликейшний stdout болон stderr-ийг log болгон цуглуулна. Тиймээс аппликейшн log-оо stdout руу гаргах ёстой:
# ✅ Docker log-д орно
print("Серверт холбогдлоо")
import sys; print("Алдаа гарлаа", file=sys.stderr)
# ❌ Docker log-д ороогүй — файлд хадгалагдсан
with open("/app/logs/app.log", "w") as f:
f.write("Серверт холбогдлоо")
// ✅ Docker log-д орно
console.log("Серверт холбогдлоо");
console.error("Алдаа гарлаа");
Logging driver
Docker нь log-уудыг хэрхэн хадгалах, дамжуулахыг logging driver-ээр тодорхойлно.
json-file (анхдагч)
# Log файл хаана байна вэ
docker inspect --format='{{.LogPath}}' mycontainer
# /var/lib/docker/containers/<id>/<id>-json.log
Log файлын форматыг харах:
{
"log": "Сервер 3000 порт дээр ажиллаж байна\n",
"stream": "stdout",
"time": "2024-01-15T10:00:00Z"
}
Log rotation тохируулах
Логийн файл хязгааргүй өсвөл диск дүүрнэ. Rotation тохируулна:
# Container ажиллуулахдаа
docker run -d \
--log-opt max-size=10m \
--log-opt max-file=3 \
--name myapp \
myimage
max-size=10m — нэг log файл 10MB хүртэл
max-file=3 — хамгийн ихдээ 3 файл (нийт 30MB)
Гурав дахь файл дүүрэхэд хамгийн эхний устна.
Docker daemon дээр глобал тохируулах
/etc/docker/daemon.json файлд:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
sudo systemctl restart docker
Docker Compose-д log тохируулах
services:
app:
image: myapp
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
Бусад logging driver-ууд
syslog
Системийн syslog руу дамжуулна:
docker run -d \
--log-driver syslog \
--log-opt syslog-address=udp://logserver:514 \
myimage
none
Log огт хадгалахгүй:
docker run -d --log-driver none myimage
Test container эсвэл маш их log гаргадаг, гэхдээ хадгалах шаардлагагүй тохиолдолд.
Logging driver харьцуулалт
| Driver | Хэрэглэх үед |
| ----------- | ------------------------------------- |
| json-file | Анхдагч, ихэнх тохиолдолд тохиромжтой |
| local | json-file-аас хурдан, нягтруулсан |
| syslog | Системийн log aggregation |
| journald | systemd ашиглах Linux |
| none | Log хадгалах шаардлагагүй |
| awslogs | AWS CloudWatch |
| gcplogs | Google Cloud Logging |
Docker Compose-ийн logs команд
# Бүх сервисийн log
docker compose logs
# Тодорхой сервис
docker compose logs app
# Дагаж харах
docker compose logs -f
# Сүүлийн 100 мөр
docker compose logs --tail 100
# Timestamp-тай
docker compose logs -t app
Практик жишээ: алдаа олох
# 1. Container зогссон уу?
docker ps -a
# 2. Зогссон container-ийн сүүлийн log
docker logs --tail 50 mycontainer
# 3. Сүүлийн цагийн log stderr-тэй
docker logs --since 1h 2>&1 mycontainer | grep -i error
# 4. Бодит цагт ажиллаж байгаа log дагах
docker logs -f mycontainer
Дараагийн хичээлд:
Docker-ийн аюулгүй байдал — root-аар ажиллуулахгүй байх, minimal image, нууц мэдээлэл зохицуулах.