لینوکس ۳۰۵؛ شب ۴۷: daemon.json، چرخش log و healthcheck
فهرست نوشته
process running لزوماً سرویس سالم نیست و log نامحدود میتواند دیسک را پر کند. امشب تنظیم daemon را اعتبارسنجی و سلامت HTTP را جدا از وضعیت process بررسی میکنیم.
این جلسه بخشی از دورهٔ لینوکس ۳۰۵ در ۶۰ شب است.
جایگاه در دوره: هدفهای 352.3 آزمون 305-300.
محیط: docker-a بدون workload مهم؛ قبل restart کنسول و backup config داشته باش. نمونهٔ JSON فقط برای daemon.json تازه است؛ فایل موجود را کورکورانه جایگزین نکن.
{
"log-driver": "local",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
مقادیر log-opts رشته هستند. آن را در /etc/docker/daemon.json با مالک root و مجوز مناسب نگه دار؛ propertyهای قبلی را حفظ و کل JSON را قبل اعمال بررسی کن.
sudo dockerd --validate --config-file=/etc/docker/daemon.json
sudo systemctl restart docker
sudo journalctl -u docker --since '-5 minutes'
sudo docker info --format '{{.LoggingDriver}}'
restart میتواند سرویسها را قطع کند؛ live-restore نیز HA کامل نمیسازد. پیشفرض جدید logging معمولاً فقط containerهای تازه را پوشش میدهد؛ نمونهٔ قبلی را inspect کن.
sudo docker run --name web305 -d -p 127.0.0.1:18050:8080 \
--health-cmd='python -c "import urllib.request; urllib.request.urlopen(\"http://127.0.0.1:8080/\", timeout=2)"' \
--health-interval=10s --health-timeout=3s --health-retries=3 \
lab305-web:v1
sudo docker inspect web305 --format '{{json .State.Health}}'
sudo docker logs --since 2m web305
sudo docker events --since 2m --until 0s --filter container=web305
پس از فرصت کافی، health باید healthy و آخرین probe موفق باشد؛ حالت starting طبیعی است. HEALTHCHECK بهتنهایی container standalone را restart نمیکند. restart policy به exit process مربوط است؛ monitor/orchestrator باید واکنش به unhealthy را طراحی کند.
بازگشت: container آزمایشی را حذف کن؛ اگر daemon بالا نیامد، JSON ذخیرهشده را برگردان، validate و restart کن. پاک کردن logهای داخلی با truncation روی فایلهای مدیریتشده روش معمول rotation نیست.
منبع: daemon configuration ، logging local ، HEALTHCHECK .