8장. 로그 수집과 분석
개요
로그란 ?
- 서버의 상태 정보, 애플리케이션의 작업 진행 상황, 프로그램의 상태 정보, 사용자의 사용 내역등을 기록하는데 사용
로그의 저장
- 일반적으로 애플리케이션 서버의 로컬 파일 시스템에 저장
- 분석이나 백업이 필요한 경우 주기적으로 NAS 같은 공용 스토리지에 저장 후 분석
- 서버가 많아지면 관리가 어렵고 장애 발생시 유실 가능
분산된 서버 로그관리 고려사항
- 확장성
- 로그 수집 대상을 수십, 수백, 수천대 규모로 확장할 수 있어야 한다.
- 실시간성
- 특정 서버에서 발생한 로그가 최종 저장소에 실시간으로 반영되 즉시 확인이 가능해야 한다.
- 분산된 환경에서 로그의 실시간성을 만족시키기는 어렵다.
- 안정성
- 대부분 유실되어도 상관 없지만 안정성이 중요한 로그도 있다.
척와(Chukwa):하둡 기반의 로그 저장 분석 솔루션
척와(Chukwa) 개요
척와(Chukwa)란 ?
- 하둡 프로젝트의 서브 프로젝트
- http://incubator.apache.org/chukwa/
- 분산된 서버의 로그를 하둡 파일시스템에 저장하고 하둡 맵리듀스를 이용해 로그 분석을 수행하는 오픈소스이다.
- 범용적인 로그 수집과 로그 관리를 위한 솔루션으로 개발됐지만 하둡 클러스터의 로그와 서버의 상태 정보를 관리하는 기능도 있다.
척와(Chukwa)의 장점
- 로그를 생성하는 응용 프로그램을 수정하지 않고 로그를 수집할 수 있다.
- 최종 파일이 하둡 파일 시스템에 저장되기 때문에 안정적으로 저장 할 수 있다.
- 로그 수집 서버에 장애가 발생하거나 로그를 생성한 서버에 장애가 발생해도 로그가 유실되지 않는다.
- 준 실시간(near realtime)과 실시간 수집을 지원한다.
척와(Chukwa)의 단점
- 하둡이 설치되어 있어야만 운영이 가능하기 때문에 설치, 운영상의 비용이 많이 든다.
- 최종 로그 파일이 하둡의 SequenceFile 이라는 바이너리 파일 형태로 저장되기 때문에 로그 정보를 보려면 별도의 뷰어를 개발해야 한다.
시스템 구성과 동작
에이전트(Agent)
- 각 서버에 설치되어 서버의 로컬 파일 시스템에 저장된 로그 파일이나 수집 대상 정보를 컬렉터로 전송하는 기능 수행
컬렉터(Collector)
- 여러대의 에이전트로부터 로그 정보를 수신해 하둡 파일 시스템잉나 사용자가 정의한 스토리지로 저장하는 기능 수행
데이터 프로세싱(Data Processing)
- 여러대의 컬렉터에 저장된 로그 데이터를 가지고 주기적으로 맵리듀스 작업을 수행해 통합/분석 작업을 수행.
HICC (Hadoop Infrastructure Care Center)
- 척와는 하둡 클러스터의 로그 파일과 시스템 정보를 수집 할 수 있다.
- 이 정보를 분석해 웹 UI를 통해 하둡 클러스터를 쉽게 관리하는 기능을 제공한다.
- HICC는 척와에 포함돼 있지만, 로그 수집을 위한 용도가 아니라 하둡 클러스터 자체에 대한 관리 기능이기 때문에 선택적으로 활용할 수 있다.
척와 동작원리
- 에이전트
- 에이전트는 tail, meminfo, vmstat등의 명령을 수행해 로그파일이나 시스템상세정보를 주기적으로 컬렉터로 전송한다.
- 컬렉터
- 수십~수백대의 에이전트당 하나의 컬렉터를 실행한다.
- 백대 미만 구성시에 이중화를 위해 2대 이상으로 구성한다.
- 모든 컬렉터 서버의 장애가 발생하면 checkpoint정보를 로컬 파일시스템에 기록한다.
- 컬렉터 서버가 복구되면 checkpoint이후로 데이터를 전송한다.
- 에이전토로부터 전송된 데이터를 주기적으로 하둡파일시스템에 저장한다.
- 하나의 컬렉터는 여러대의 에이전트로부터 데이터를 전송받지만 파일은 하나로 저장한다.
- 컬렉터가 저장하는 파일을 싱크(sink)파일 이라고 하며 하둡파일 시스템의 SequenceFile 포맷으로 저장된다.
컬렉터 장애시 로그 유실 방지의 과정
- 에이전트는 컬렉터로 로그 데이터를 전송
- 컬렉터는 수신한 로그 데이터를 하둡 파일 시스템에 저장
- 에이전트는 주기적으로 하둡 파일 시스템에 저장된 파일 길이를 컬렉터에 요청
- 하둡 파일 시스템에서 close() 가 호출되기 전에 파일의 길이는 0이기 때문에 0을 반환
- 에이전트는 파일 길이가 자신이 전송한 로그의 길이보다 작으면 체크포인트 값을 증가시키지 않는다.
- close() 가 호출돼 하둡 파일 시스템에 안정적으로 저장되고 이 값을 에이전트가 받으면 에이전트는 체크 포인트값을 증가
- 컬렉터가 정상적으로 파일을 close() 시키지 못하고 장애가 발생한 경우
에이전트는 체크포인트를 증가시킬 수 없고 이런 상태가 일정 시간(15분) 동안 지속되면
전송을 모두 초기화시키고 현재의 체크포인트 값부터 다시 전송한다.
딜리버리 모델
- 로그 관리 시스템에서 안정성과 실시간성 모두를 만족하기는 어렵다.
- 척와는 딜리버리 모델이라는 개념을 통해 로그 데이터의 특성에 맞게 선택할 수 있는 기능을 제공한다.
- 척와는 안정적인(Reliable) 모델, 빠른 패스(Fast-path) 모델 두가지 딜리버리 모델을 제공한다.
| 구분 | 안정적인(Reliable) 모델 | 빠른 패스(Fast-path) 모델 |
|---|
| 실시간성 | 수 분 | 수 초 |
| 데이터 저장 | 하둡 파일 시스템 | 소켓 |
| 안정성 | 장애시 재전송 가능 | 재전송 불가 |
| 대상 로그 | 모든 로그 | 사용자 필터에 의해 필터링된 로그 |
| 데이터 분석 | 맵리듀스 | 스트리밍 프로세싱 |
| 데이터 정렬 | 로그 생성 순서 보장 | 보장하지 않음 |
| 데이터 중복 | 데이터 중복 없음 | 데이터 중복 가능 |
빠른 패스(Fast-path) 모델
- SocketTeeWriter를 이용
- SocketTeeWriter는 소켓 데몬 서버처럼 동작
- 소켓포트는 chukwaCollector.tee.port값으로 설정하며 기본값은 9094이다.
안정적인(Reliable) 모델
- SeqFileWriter를 이용
- SeqFileWriter는 하둡에서 제공하는 SequenceFile 형태로 로그 파일을 저장한다.
데이터 모델과 처리
- 에이전트는 원본 데이터에 특정 필드를 추가해 전송한다.
- 이런 전송 단위를 청크(Chunk)라고 한다.
| 필드 | 의미 | 소스 |
|---|
| Source | 청크가 생성된 호스트 명 | 척와가 자동으로 추가 |
| Cluster | 청크의 클러스터 명 | 에이전트 환경 설정에 사용자가 정의 |
| Datatype | 청크의 데이터 타입 | 어댑터 적용시 사용자가 정의 |
| Sequence ID | 일련번호 | 자동으로 부여 |
| Name | 데이터 소스 이름 | 어댑터에서 정의 |
- 원본 데이터에 위 데이터를 추가하는 이유는 재전송시 중복방지와 분석작업에 활용하기 위해서다
설치
- 하둡은 미리 설치되어 있어야 한다.
- tvstatistics01.music 설치
다운로드
export CHUKWA_HOME=/home/gurubee/apps/chukwa-incubating-0.5.0
export PATH=$PATH:$CHUKWA_HOME/bin
chukwa-env.sh 환경설정
- 척와 환경설정 파일인 chukwa-env.sh 을 아래와 같이 수정한다.
chukwa-incubating-0.5.0/etc/chukwa/chukwa-env.sh
# The java implementation to use. Required.
export JAVA_HOME=/home/gurubee/apps/jdk
# Optional
# The location of HBase Configuration directory. For writing data to
# HBase, you need to set environment variable HBASE_CONF to HBase conf
# directory.
export HBASE_CONF_DIR=/home/gurubee/apps/hbase/conf
# Hadoop Configuration directory
export HADOOP_CONF_DIR=/home/gurubee/apps/hadoop/conf
# The location of chukwa data repository (in either HDFS or your local
# file system, whichever you are using)
export chukwaRecordsRepository=/home/gurubee/apps/chukwa-incubating-0.5.0/repos
컬렉터 환경설정
- http://socurites.com/69 참고
- conf/chukwa-collector-conf.xml 파일에 컬렉터 옵션을 설정할 수 있다.
- writer.hdfs.filesystem은 반드시 설정해야 한다.
- writer.hdfs.filesystem : 수집한 로그를 저장할 하둡 파일 시스템
- chukwaCollector.writerClass
- 로그 레코드를 저장할 Writer 클래스
- 디폴트: org.apache.hadoop.chukwa.datacollection.writer.PipelineStageWriter
- chukwaCollector.outputDir
- 수집한 로그(싱크 파일)를 저장할 하둡의 디렉토리
- 디폴트: /chukwa/logs/
- chukwaCollector.rotateInterval
- 오픈한 파일을 close()하는 주기 (ms)
- 디폴트: 300000 (default)
- chukwaCollector.http.port
- 컬렉터가 리스닝할 포트 번호
- 디폴트: 8080
추가학습 정보