티스토리 뷰
로그는 집약과 수집을 구별해서 다룸
이렇게 구별하는 이유는 각각의 목적과 정밀도가 다르기 때문
집약: 웹 서버가 출력하는 로그를 항상 전송해서 한곳에 모으는 것
수집: 각 서버상에 출력된 로그를 정기적으로 모아서 저장하는 것
로그를 집약하는 목적: 순간순간의 상황을 파악하기 위함 (무슨 일, 어디서 일어나고 있는지)
장애 발생시 어떤 머신에서 문제가 일어나고 있는지를 확인
사이트의 액세스 상황(순간 페이지뷰, 사용자 수등을 집계)
로그를 수집하는 목적: 집계, 분석, 그리고 보존을 위함
서비스 운영시 웹서버나 AP서버의 로그 집계, 분석을 기본
로그 분석에는 일별, 주별, 월별등 다양한 단위의 로그가 필요한데, 이를 위해 로그가 여러군데 분산되어 있으면 불편하다.
로그 집약, 수집에는 다양한 방법이 있다. 파일이 아니라 DB에 쓰는 것도 하나의 방법이다. DB에 로그를 등록한다면 검색성은 높아지지만 그와 동시에 관리비용도 증가하기에, 보통 이렇게까지는 할 필요가 없는 경우가 많다.
로그 집약
syslog
syslog를 사용하면 쉬움. syslog의 역할은 유닉스 계열 OS에서의 로그 집약의 허브.
아파치와 같은 웹서버의 로그를 syslog를 이용해서 집약가능하다.
syslog에 모인 로그는 Facility와 Priority가 설정된다.
syslog는 이를 통해 로그를 식별하며 필요한 로그를 파일에 쓰거나 다른 머신상의 syslog로 전송할 수 있다.
syslog는 가끔 로그를 누락하는 경우도 있고, 동일한 로그가 연속해서 출력되면 하나의 로그로 정리한다. 이때문에 집계같은 엄밀함이 요구되는 용도에는 적합하지 않지만, 대량의 로그가 출력되더라도 디스크 부하를 억제할 수 있다. syslog로 집약한 로그는 어디까지나 문제가 발생 했을 때 어떤 머신에서 발생했는지에 대한 단서를 잡거나 혹은 현재 사이트의 트렌드를 관찰하기 위해 사용한다.
syslog-ng
로그를 전송할 때는 하나의 기능성과 우선순위를 사용하고, 로그를 사용하는 단계에서 서로 다른 정보를 사용해서 구별하고 ,사이트마다 다른 파일에 로그를 출력할 수 있다면 이상적이다.
이를 구현한 것이 syslog-ng
syslog-ng의 기능
로그의 필터링
로그의 회전
로그를 출력할 디렉토리 생성
etc.
로그 수집
로그를 수집하는 목적은 로그의 보존과 분석을 위함
보통 로그분석은 하루에 한번 수행; 로그 수집도 하루에 한번, 서버 부하가 낮은 아침 시간대에 각 머신에 있는 전날의 로그를 수집한다.
또한, 수집과 동시에 각 머신상에 잇는 오래된 로그를 삭제.
또한, 로그서버상에 있는 오래된 로그를 압축하기도 함(압축시간이 오래걸리더라도 가능한 한 크기가 작아지도록 압축. ex. bzip2)
(로그는 텍스트 데이터이고, 출력된 문자열의 패턴도 정해져 있어서 높은 압축률을 기대할 수 있음)
로그를 수집하기 위해서는 웹 서버가 출력하는 로그가 일별로 나누어져 잇으면 편리하다. (Nginx는 로그를 회전하는 기능이 있을까? 아파치는 없다고 한다)
로그 회전이 없는 아파치에서 로그를 일별로 회전하기위해 두가지 방법이있다.
cron을 통해 로그파일을 rename하고 아파치를 재시작하는방법
아파치는 동작하고 있는 동안에 로그파일을 열고 있기에, 도중에 로그파일을 rename하는 것만으로는 회전을 할 수 없다. 아파치를 재시작하면 로그파일을 일단 닫기에, 리네임 후 즉시 아파치를 재시작하면 로그를 회전 시킬 수 있다.
아파치에 부가적으로 포함되어있는 rotatelogs 프로그램을 사용
로그 서버
로그 서버의 역할은 로그의 집약, 수집, 그리고 수집한 로그의 보존이다. 그외에도 로그 집계나 분석을 위해 사용하기도 한다.
이런 로그 수집, 압축, 집계/분석은 중요한 처리이기에 서비스를 제공하는 서버가 동시에 로그 서버 역할을 담당하는 것은 적절치 않다. (로그 보존용도로 용량이 큰 디스크도 필요함)
백업용 로그서버를 따로 준비할 수 없는 경우에는 로그파일만이라도 다른 머신에 전송해서 보존하도록 하는 편이 좋다.
로그에 대한 요구는 그때그때의 상황에 따라 그 내용이나 처리 방법이 크게 바뀔 수 있다.
'Server Side > Infra' 카테고리의 다른 글
Consistent Hashing (0) | 2016.10.03 |
---|
- Total
- Today
- Yesterday
- java
- Spring
- Apache
- logback
- object
- linux
- log level
- async
- NGINX
- JVM
- logging
- runtime data areas
- log
- good practice
- TaskExecutor
- slf4j
- lood
- webserver
- logging facade
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |