5. 운영
서비스 환경 구축
서버에서 어플리케이션 가동
서버 운영
메트릭스 수집
로그 수집
피드백
장애 대응
어플리케이션 개선
스케일 아웃 & 인
6. 모니터링 & 로그 수집
메트릭스 로그
수치 정보
리소스 모니터링
Munin, Diamond, Sensu, …
CPU, Load Avarage,
Memory, …
쿼리수, 접속자수, 부하, …
어플리케이션 모니터링
대개 직접 구현
접속자수, 에러수, …
임의 수치
행으로 구분되는 데이터셋
비정형 데이터
시스템 로그
사용자 정보, 로그인 정보
각종 시스템 서비스 로그
어플리케이션 로그
대개 직접 구현
7. 로그
행으로 구분되는 데이터셋
비정형 데이터
어플리케이션마다 독자적인 포맷 사용
CSV, XML, JSON, …
완전한 독자적 형식
어플리케이션마다 독자적인 출력 사용
파일
표준 출력
아파치 로그 예제
195.140.144.83 - - [16/Aug/2011:00:49:33 +0900] "GET …
195.140.144.83 - - [16/Aug/2011:00:49:37 +0900] "GET …
121.3.24.52 - - [17/Aug/2011:03:23:12 +0900] "GET …
24. 컨테이너 어플리케이션 로그
생각해볼 수 있는 방법
컨테이너 안에서 수집
어플리케이션 컨테이너에서 수집기 운용
컨테이너 외부에서 수집
Docker 로그 파일 직접 사용
25. 서비스(컨테이너)적인 사고법
로그는 서비스의 일부분이 아님
컨테이너에는 데이터가 저장되어서는 안 됨
The Twelve Factor App
http://the-twelve-factor-app.herokuapp.com/
26. The Twelve Factor App - Log (1)
로그는 모든 실행중인 프로세스와 백엔드 서비스의 누적되며
시간순으로 수집되고 정렬되는 이벤트 스트림이다. 일반적으
로 어플리케이션이 직접 생성하는 로그는 한 줄에 하나의 이
벤트를 텍스트 포맷으로 기록한다(예외를 추적하는 로그는
여러줄로 쓰여지기도 한다). 로그는 고정된 시작과 끝이 없으
면 어플리케이션이 실행되는 한 계속된다.
Twelve Factor App은 어플리케이션의 출력 스트림의 목적지
나 어디에 저장되는 지 일체 간섭하지 않는다. 어플리케이션
은 로그를 작성하거나 로그 파일을 관리하려고 해서는 안된
다. 로그 파일을 관리하는 대신 각각의 실행중인 프로세스는
자신의 이벤트 스트림을 버퍼없이 stdout에 출력한다.
27. The Twelve Factor App - Log (2)
로그는 시간순으로 수집되고 정렬되는 이벤트 스트림이다.
-> 표준 출력에 출력!
출력 스트림의 목적지나 어디에 저장되는 지 일체 간섭하지
않는다.
-> 어플리케이션에는 로그에 대한 설정/로직이 없어야함!
28. 도커 로그(로그 파일을 통한 수집)
docker logs 명령어
json으로 저장
docker inspect로 위치 파악
/var/lib/docker/containers 디렉터리의 {containerid}-json.log
접근시 root 권한 필요
31. progrium/logspout 장단점
장점
logspout 컨테이너 하나면 됨
매우 일관적인 로그 수집 시스템(표준 출력)
12 Factor App에서 환경변수로 설정을 관리하는 것과 비슷
단점
컨테이너에 문제가 생기면 로그 수집 정지(?!)
약간의 딜레이
stdout과 stderr만 수집 가능
어플리케이션 설계시 고려가 필요
32. 컨테이너 어플리케이션 메트릭스
기존과 크게 다르지 않음
메트릭스는 대개 실시간 데이터
어플리케이션에서 라이브러리로 직접 보냄
필요한 경우 파일이나 다른 수집기 사용