Log Rotation

    版本為 22:59, 26 Dec 2024

    到這個版本。

    返回到 版本存檔.

    查閱目前版本

    說明

    要管理 Docker 的 Log 前必須先調整每個 container 各自的 Log 導出為 stdout 與 stderr 格式,這樣才能由 Docker 統一管理/顯示所有 container 的 Log 訊息。

    調整 Container 的 Log

    以 Nginx 為例,必須將預設的 Log 檔路徑導出為 stdout 與 stderr 如下述 Dockerfile 範例

    ...
    RUN \
        # Forward request and error logs to docker log collector
        && ln -sf /dev/stdout /var/log/nginx/access.log \
        && ln -sf /dev/stderr /var/log/nginx/error.log
    ...
    

    以 Mariadb 為例,新增資料庫設定檔 /etc/mysq/mariadb.conf.d/db-log.cnf

    [mysqld]
     log_error = /dev/stdout
    

    檢視 Containers Log

    不用進入 container 系統也能直接檢視任一個 container(或 service) 的 Log。

    # docker logs --tail 50 <container-name>
    # docker-compose logs --tail 50 <service-name>
    


    設定 Docker Logs 自動循環

    方法一: docker-compose.yml

    這設定只會套用相應的 container log

    services:
      web:
        image: nginx:latest
        links:
          - php
        ports:
          - "80:80"
          - "443:443"
        volumes:
          - ./web/etc_nginx/conf.d:/etc/nginx/conf.d   
          - ./web/etc_nginx/ssl:/etc/nginx/ssl
        volumes_from:
          - php
        logging:
          driver: "json-file"
          options:
            max-size: "10m"
            max-file: "3"
    

     

    方法二: Host 端的 Logrotate

    這設定會套用所有的 containers log。

    /etc/logrotate.d/docker-containers

    /var/lib/docker/containers/*/*.log {
        rotate 31
        daily
        nocompress
        missingok
        notifempty
        copytruncate
    }
    
    Powered by MindTouch Core