티스토리 뷰

Dev./Docker

[Docker] logging option

인쥭 2021. 3. 2. 16:11
반응형

 

  • Docker는 컨테이너와 서비스로부터 많은 정보를 얻을 수 있도록 다수의 로깅 메커니즘을 제공하고 있다.
  • 이러한 로깅 메커니즘은 logging driver라고 함!
  • 각각의 Docker 데몬은 명시적으로 다른 로깅 메커니즘을 사용하지 않는 이상, default logging driver를 사용한다.
  • default logging driver는 'json-file' logging driver이며, 컨테이너의 로그를 JSON 형식으로 캐싱한다.
  • 그러나 기본적으로 log-rotation을 지원하지 않으므로, json-file은 계속해서 쌓여 많은 디스크 공간을 차지하게될 수도 있다.
  • 이는 Disk exhaustion의 원인이 될 수 있으므로, 다음과 같이 default logging driver를 설정하자.
    • max-size : 로그 파일당 최대 용량을 지정
    • max-file : 로그 파일의 최대 개수를 지정
    • 위 조건에 따라 로그 파일의 로테이션이 이루어지게 된다.
  • docker-compose.yml의 경우
version: "3.7"
services:
  ingnoh:
    image: ingnoh:latest
    container_name: ingnoh-app
    restart: always
    network_mode: "host"
    logging:
      options:
        max-size: "1024m"  
        max-file: "5"
  • docker cli의 경우
docker run --name ingnoh-app --network host --restart always \
--log-opt max-size=1024m --log-opt max-file=5 ingnoh:latest

 

주의 : 

  • docker-compose.yml의 max-file은 반드시 string이어야 한다.
  • 명시적으로 쌍따옴표를 처리하지 않는 경우, 다음과 같은 파싱 에러가 발생할 수 있다.
Creating ingnoh-app ... 
Creating ingnoh-app ... error

ERROR: for ingnoh-app  Cannot create container for service ingnoh-app: json: cannot unmarshal number into Go struct field LogConfig.Config of type string

ERROR: for ingnoh-app  Cannot create container for service ingnoh-app: json: cannot unmarshal number into Go struct field LogConfig.Config of type string
  • max-file: 5를 max-file: "5"로 수정할 경우 문제가 생기지 않는다.
  • max-size는 굳이 쌍따옴표를 처리하지 않더라도 문제가 생기지 않는다. 암시적으로 string 형태로 판별되는 듯(근거 필요)

 

근거 : 

log-opts configuration options in the daemon.json configuration file must be provided as strings.
Boolean and numeric values (such as the value for max-file in the example above) must therefore be enclosed in quotes (").

 

댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함