docker-compose의 로그를 혼잡하게 CloudWatch에 던지기

docker-compose로 오케스트레이션하는 컨테이너들의 로그를 CloudWatch Logs에 집계하고 싶기 때문에,
logging의 awslogs driver를 사용해 보았습니다.



경위


  • docker-compose로 오케스트레이션하는 컨테이너의 로그를 집계하고 싶습니다.
  • cloudwatch logs에 던지고 싶어요! (일러스트를 만들고 싶었습니다)

  • 환경


  • amazon linux : cloudwatch logs의 role를 붙인다
  • docker: 17.03
  • docker-compose: 1.9.0

  • docker-compose.yml


  • driver에 awslogs 지정
  • options에 region, group명, stream명을 지정한다
  • logging:
      driver: "awslogs"
      options:
        awslogs-region: "ap-northeast-1"
        awslogs-group: "${RAILS_ENV}"
        awslogs-stream: "nginx"
    

    Dockerfile


  • 필요한 경우 로그를 보내고 싶은 파일에 링크를 붙이면 로그가 출력된다
  • RUN ln -sf  /dev/stdout /var/log/HOGOHOGE/app-access.log
    RUN ln -sf  /dev/stderr /var/log/HOGEHOGE/app-error.log
    

    cloud watch


  • 빈 greoup를 만들지 않으면 다음 오류가 발생합니다.
    ERROR: for redis  Cannot start service redis: Failed to initialize logging driver: ResourceNotFoundException: The specified log group does not exist.
        status code: 400, request id: xxxxxx-xxxxxxxxx-xxxxxxxx-xxxxx
    
    ERROR: for db  Cannot start service db: Failed to initialize logging driver: ResourceNotFoundException: The specified log group does not exist.
        status code: 400, request id: xxxxxx-xxxxxxxxx-xxxxxxxx-xxxxx
    



    움직여 보자


    $ docker-compose up
    

    로그 집계 가능


  • 일일이 docker exec 하지 않아도 좋아졌다





  • docker-compose.yml 전체 (db와 redis에는 의미가 없습니다)



    docker-compose.yml
    version: '2'
    services:
      web:
        image: nginx
        depends_on:
          - db
          - redis
        ports:
          - "80:80"
        logging:
          driver: "awslogs"
          options:
            awslogs-region: "ap-northeast-1"
            awslogs-group: "develop"
            awslogs-stream: "nginx"
      redis:
        image: redis
        logging:
          driver: "awslogs"
          options:
            awslogs-region: "ap-northeast-1"
            awslogs-group: "develop"
            awslogs-stream: "redis"
      db:
        image: postgres
        logging:
          driver: "awslogs"
          options:
            awslogs-region: "ap-northeast-1"
            awslogs-group: "develop"
            awslogs-stream: "posgre"
    

    요약


  • 매우 간단하네요! !
  • 이것으로 로그로서는 충분할까라고!
    그리고의 해석은 또, cloudwatch로부터 무언가에 던지면 좋을까-와! !
  • 좋은 웹페이지 즐겨찾기