Search code examples
dockercurldockerfilecontainershealth-check

Docker silent Healthcheck?


I want to add a healthcheck to my container, and it's working fine, but it's spamming my container log every time it checks, which is noisy and makes gleaning the important stuff out harder than need be:

today at 12:44:38 AM127.0.0.1 - - [07/Jul/2022:00:44:37 -0500] "HEAD / HTTP/1.1" 200 427 "-" "curl/7.12.0 (x86_64-unknown-linux-gnu) libcurl/7.12.0 ipv6 zlib/1.2.3.4 libidn/1.23"

Every 30 seconds.

I want to have it continue working normally, minus the log spam. I've tried this so far, thinking I could send the output to > /dev/null, but no luck; it still sends to the container log (stdout):

HEALTHCHECK CMD curl -ILfSs http://localhost:80 -A "HealthCheck" > /dev/null || exit 1

Anyone know how to do this?


Solution

  • Just following up on my question, I ended up doing this in Apache's 000-default (site config) file:

    # + --------------------------------------------------------------------------------------------------------------------------- +
    # | Prevent access.log spam of the Docker Healthcheck                                                                           |
    # | Refs:                                                                                                                       |
    # | https://httpd.apache.org/docs/2.2/mod/mod_setenvif.html                                                                     |
    # | https://www.linuxquestions.org/questions/linux-server-73/need-to-exclude-certain-messages-from-apache-access_log-4175543280 |
    # + --------------------------------------------------------------------------------------------------------------------------- +
    <IfModule setenvif_module>
        # If UA matches healthcheck, set 'nolog' env var, which we exclude from the log(s) in the logformat section below.
        BrowserMatchNoCase ^healthcheck nolog
    </IfModule>
    
    CustomLog ${APACHE_LOG_DIR}/access.log combined env=!nolog
    

    Note that I had set the custom health check UserAgent to: HealthCheck: Docker/1.0:

    HEALTHCHECK CMD curl -ILfSs http://localhost:80 -A "HealthCheck: Docker/1.0" || exit 1
    

    Thanks Hans, for pointing me in the right direction.