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
  • 추가 내용은 아래 추가학습 정보를 참고한다.

추가학습 정보