تسجيل الحاويات: إدارة سجلات Docker و Kubernetes
مشغلات سجلات Docker، أمر docker logs، سجلات pods في Kubernetes، جمع السجلات المركزي (Loki, ELK Stack)، تدوير السجلات وأفضل ممارسات إدارة السجلات في بيئة الإنتاج.
جدول المحتويات
تسجيل الحاويات: إدارة سجلات Docker و Kubernetes
يختلف التسجيل في بيئات الحاويات عن تسجيل الخوادم التقليدية. نظراً لأن الحاويات مؤقتة، فإن جمع السجلات مركزياً خارج الحاوية أمر بالغ الأهمية. يتناول هذا الدليل إدارة سجلات Docker و Kubernetes وحلول جمع السجلات المركزية وأفضل ممارسات الإنتاج.
أساسيات تسجيل Docker
أمر docker logs
# عرض سجلات الحاوية
docker logs CONTAINER_NAME
# عرض آخر N سطر
docker logs --tail 100 CONTAINER_NAME
# بث السجلات المباشر
docker logs -f CONTAINER_NAME
# عرض مع الطوابع الزمنية
docker logs -t CONTAINER_NAME
# من وقت محدد
docker logs --since 1h CONTAINER_NAME # آخر ساعة
# نطاق زمني محدد
docker logs --since 2h --until 1h CONTAINER_NAME
مشغلات سجلات Docker
# التحقق من مشغل السجل الحالي
docker info | grep 'Logging Driver'
إعداد مشغل السجل
// /etc/docker/daemon.json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3",
"compress": "true"
}
}
# إعادة تشغيل Docker daemon
systemctl restart docker
مشغل السجل عند تشغيل الحاوية
# json-file مع تدوير السجلات
docker run -d \
--name myapp \
--log-driver json-file \
--log-opt max-size=10m \
--log-opt max-file=3 \
myapp:latest
# إعادة التوجيه إلى syslog
docker run -d \
--name myapp \
--log-driver syslog \
--log-opt syslog-address=udp://localhost:514 \
myapp:latest
إعداد السجلات مع Docker Compose
version: '3.8'
services:
app:
image: myapp:latest
logging:
driver: json-file
options:
max-size: "10m"
max-file: "5"
compress: "true"
nginx:
image: nginx:latest
logging:
driver: json-file
options:
max-size: "5m"
max-file: "3"
سجلات Pods في Kubernetes
# عرض سجلات الـ pod
kubectl logs POD_NAME
# حاوية محددة (pod متعدد الحاويات)
kubectl logs POD_NAME -c CONTAINER_NAME
# بث السجلات المباشر
kubectl logs -f POD_NAME
# آخر N سطر
kubectl logs --tail=100 POD_NAME
# من وقت محدد
kubectl logs --since=1h POD_NAME
# سجلات الحاوية السابقة (بعد الانهيار)
kubectl logs --previous POD_NAME
# سجلات جميع الـ pods في deployment
kubectl logs -l app=myapp --all-containers
جمع السجلات المركزي: Loki + Grafana
# loki-stack.yml
version: '3.8'
services:
loki:
image: grafana/loki:latest
ports:
- "3100:3100"
volumes:
- loki-data:/loki
command: -config.file=/etc/loki/local-config.yaml
promtail:
image: grafana/promtail:latest
volumes:
- /var/log:/var/log:ro
- /var/lib/docker/containers:/var/lib/docker/containers:ro
- ./promtail-config.yml:/etc/promtail/config.yml
command: -config.file=/etc/promtail/config.yml
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=StrongPass123!
volumes:
- grafana-data:/var/lib/grafana
volumes:
loki-data:
grafana-data:
تدوير السجلات وإدارة القرص
# التحقق من أحجام ملفات سجلات Docker
du -sh /var/lib/docker/containers/*/*-json.log
# مسح سجل حاوية محددة
truncate -s 0 $(docker inspect --format='{{.LogPath}}' CONTAINER_NAME)
# التدوير التلقائي مع logrotate
cat > /etc/logrotate.d/docker-containers << 'EOF'
/var/lib/docker/containers/*/*.log {
rotate 7
daily
compress
size=10M
missingok
delaycompress
copytruncate
}
EOF
التسجيل المنظم (JSON)
// Node.js — تسجيل JSON مع Winston
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.combine(
winston.format.timestamp(),
winston.format.errors({ stack: true }),
winston.format.json()
),
transports: [
new winston.transports.Console()
]
});
logger.info('تسجيل دخول المستخدم', {
userId: 123,
action: 'login',
ip: '192.168.1.1'
});
logger.error('خطأ في قاعدة البيانات', {
error: err.message,
query: 'SELECT * FROM users'
});
الخلاصة
تسجيل الحاويات الفعّال ضروري لاستكشاف الأخطاء ومراقبة صحة النظام في بيئات الإنتاج. امنع امتلاء القرص بتدوير سجلات Docker، وأعدّ جمع السجلات المركزي مع Loki أو ELK Stack، وبسّط تحليل السجلات بسجلات JSON المنظمة. بهذه الإعدادات على خوادم REXE يمكنك إدارة بنيتك التحتية للحاويات برؤية كاملة.
مقالات ذات صلة
تثبيت Kubernetes مع K3s: تنسيق الحاويات الخفيف
إعداد كلاستر Kubernetes أحادي ومتعدد العقد مع K3s، استخدام kubectl، إنشاء deployments وservices، إدارة التطبيقات مع Helm. دليل Kubernetes لبيئات VPS.
إدارة Docker Volume والشبكات: التخزين الدائم وتكوين الشبكة
أنواع Docker volume (named, bind mount, tmpfs)، إدارة الـ volumes، أوضاع شبكات Docker (bridge, host, overlay)، إنشاء شبكات مخصصة والتواصل بين الحاويات. دليل شامل.
أمان Docker: تصليب بيئة الحاويات
أفضل ممارسات أمان Docker: مستخدم غير root، نظام ملفات للقراءة فقط، ملفات seccomp، فحص الصور، أمان Docker socket، عزل الشبكة وإدارة الأسرار.