我正在添加一個已在一個容器中成功完成的 Docker 健康檢查功能,但是將相同的代碼添加到不同的容器中卻表現得很奇怪。
本質上,我只是試圖不使用環境變數記錄某些請求。
在dockerfile:
HEALTHCHECK CMD curl -ILfSs http://localhost:80 -A "HealthCheck" || exit 1
RUN ln -sf /dev/stdout /var/www/logs/access.log \
&& ln -sf /dev/stdout /var/www/logs/transfer.log \
&& ln -sf /dev/stdout /var/www/logs/ssl-transfer.log \
&& ln -sf /dev/stderr /var/www/logs/error.log \
&& ln -sf /dev/stderr /var/www/logs/ssl-error.log
在httpd.conf:
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
<IfModule setenvif_module>
BrowserMatchNoCase ^healthcheck nolog
</IfModule>
CustomLog "logs/access.log" combinedio env=!nolog
</IfModule>
所以現在當健康檢查滴答作響時,日志通常會顯示:
127.0.0.1 - - [05/Oct/2022:03:22:13 0000] "HEAD / HTTP/1.1" 200 - "-" "HealthCheck" 74 1095
顯示了這一點(它根本不應該顯示任何東西,因為當 UserAgent 匹配“healthcheck”時設定了 env var):
127.0.0.1 - - [05/Oct/2022:05:17:46 0000] "HEAD / HTTP/1.1" 200 -
它的行為幾乎就像它正在替換與“healthcheck”匹配的所有內容,之后什么都沒有(空字串),我認為它甚至不應該有能力這樣做(?)。
我已經測驗了通過注釋掉該行來確保呼叫的唯一健康檢查是 httpd.conf 中的這個BrowserMatchNoCase ^healthcheck nolog,然后它確實只顯示了包含“HealthCheck”用戶代理的通常預期的行。
uj5u.com熱心網友回復:
如果預期條件不匹配并且格式錯誤,最簡單的解釋是CustomLog您的配置中有第二個指令。
此外,我將洗掉所有 ifmodules。如果未加載模塊,您不希望跳過這些內容,您希望它失敗。
uj5u.com熱心網友回復:
謎團已揭開; 配置中有一個“隱藏的”TransferLog與 my 決斗CustomLog,所以我的東西實際上按預期作業,但也被呼叫,所以每次呼叫TransferLog它們都同時輸出到日志。HealthCheck
我說“隱藏”是因為即使它就在眼前,但這是我個人第一次遇到該TransferLog指令;我一直只使用CustomLog,并且不知道當它們都存在時如何TransferLog結合使用。CustomLog
完全洗掉TransferLog并且僅使用CustomLog(因為它允許日志格式化而 TransferLog 不允許)起到了作用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/512912.html
