일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 데이터베이스
- 도커
- programmers
- 라우팅
- docker
- 코딩 테스트
- 라우팅프로토콜
- Snort Rule
- Python
- TDD
- OSI7계층
- 리눅스
- 스노트
- Container
- Routing
- 프로그래머스
- Linux
- Cosmos
- MySQL
- osi7layer
- Router
- 코딩테스트
- db
- 스노트 룰
- database
- coding test
- snort
- 컨테이너
- 트레바리
- 라우터
- Today
- Total
Simple is IT, 누구나 보고 누구나 깨닫는 IT
Docker Container Logging_syslog(2/4) 본문
Container Logging
도커는 컨테이너의 로그를 기본적으로 Json-file로 저장합니다.
그 밖에도 각종 로깅 드라이버를 사용하도록 설정해 컨테이너의 로그를 수집할 수도 있죠.
우리가 다뤄볼 것은 syslog, fluentd, awslogs 입니다.
Syslog
컨테이너의 로그는 JSON뿐만 아니라 syslog로 보내 저장하도록 설정할 수 있습니다.
syslog는 유닉스 계열 OS에서 로그를 수집하는 오래된 표준이에요!
Kernel, Security 등 시스템과 관련된 로그, 애플리케이션 로그 등 다양한 종류의 로그를 수집해 저장하죠.
유닉스 계열의 OS에서는 Syslog를 사용하는 인터페이스가 모두 동일해 체계적으로 관리할 수 있어요.
우리는 --log-driver 옵션을 통해 syslog에 로그를 저장하는 컨테이너를 생성할거에요.
아래 옵션으로 컨테이너를 생성하면 syslogtest라는 문구를 출력하고 종료될 겁니다.
docker run -d \
> --name syslog \
> --log-driver=syslog \
> ubuntu:16.04 \
> echo syslogtest
syslog의 경로는 OS마다 다른데요.
CentOS 같은 경우에는 /var/log/messages, 제가 쓰는 Ubuntu 같은 경우에는 /var/log/syslog 입니다.
# cat /var/log/syslog
.....
Jul 18 14:51:21 master fd25400ee4c4[3225]: syslogtest
.....
로그를 확인해보니 정상적으로 기록이 되었음을 알 수 있네요.
이러한 syslog는 원격 서버에 설치된다면 로그 옵션을 추가해 로그 정보를 원격 서버로 보낼 수 있죠.
이런 동작을 가능하게하는 rsyslog를 사용해 중앙 컨테이너로 로그를 저장해 볼거에요.
rsyslog
docker run -it \
-h rsyslog \
--name rsyslog_server \
-p 514:514 -p 514:514/udp \
ubuntu:16.04
컨테이너 내부의 rsyslog.conf 파일에서 syslog 서버를 구동시키는 항목의 주석을 해제해 저장합니다.
root@rsyslog:/# vi /etc/rsyslog.conf
.....
# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")
# provides TCP syslog reception
module(load="imtcp")
input(type="imtcp" port="514")
설정 변경했으니 서비스 재시작!
root@rsyslog:/# service rsyslog restart
빠져나와 로그를 출력하기 위한 컨테이너를 생성합니다.
docker run -itd \
--log-driver=syslog \
--log-opt syslog-address=tcp://192.168.99.100:514 \
--log-opt tag="log" \
ubuntu:16.04 echo "syslog test!"
생성한 컨테이너는 syslog test 라는 문장을 외친 후 자동으로 종료됩니다.
--log-opt는 로깅 드라이버에 추가할 옵션을 뜻해요.
syslog-address에서 rsyslog 컨테이너 접근을 위한 주소를 입력하고,
tag는 로그 데이터가 기록될 때 함께 저장될 태그입니다. 주로 로그를 분류할 때 사용하죠.
rsyslog 서버 컨테이너에서 돌아와 로그가 기록되었는지 확인해볼까요?
$ docker exec -it rsyslog_server tail /var/log/syslog
.....
Jul 18 14:22:50 192.168.99.100 log[2599]: #033]0;root@0f6ca2286dac: /#007root@0f6ca2286dac:/# exit#015
Jul 18 14:23:11 192.168.99.100 log[2599]: syslog test!#015
성공적으로 로그가 기록되었네요. 또 추가한 'log' 태그도 눈에 띄는군요 ㅎㅎ
여기서 추가로 --log-opt 옵션에서는 syslog-facility를 사용할 수 있어요.
이 옵션은 로그를 생성하는 주체에 따라 로그를 다르게 저장하는 것입니다.
예를들어, 여러 애플리케이션 중 mail에서 로그가 출력된다면 mail이라는 파일로 저장을 하는것이죠!
docker run -itd \
--log-driver=syslog \
--log-opt syslog-address=tcp://192.168.99.100:514 \
--log-opt tag="maillog" \
--log-opt syslog-facility="mail" \
ubuntu:16.04 echo "syslog test!"
이제 서버 컨테이너는 새로운 로그 파일이 생겨 maillog를 저장하게 될 거에요.
$ docker exec -it rsyslog_server tail /var/log/mail.log
Jul 18 14:32:31 192.168.99.100 maillog[2599]: syslog test!#015
지금까지 사용했던 syslog와 rsyslog는 유닉스 계열 OS에서 사용할 수 있는 가장 기본적인 Logging 방법이었어요. 하지만 별도의 UI를 제공하지는 않지만 logentries, LogAnalyzer 등과 같은 로그 분석기와 연동하면 웹 인터페이스를 활용해 편리하게 로그를 확인할 수 있답니다.
'Simple is IT > Cloud & Container' 카테고리의 다른 글
Docker Container Logging_awslogs(4/4) (0) | 2020.07.18 |
---|---|
Docker Container Logging_fluentd(3/4) (3) | 2020.07.18 |
Docker Container Logging_logs(1/4) (0) | 2020.07.18 |
도커 볼륨으로 효율적인, Stateless한 Container 운영을 해보자! (0) | 2020.07.16 |
S3 WEB Hosting (0) | 2020.07.09 |