티스토리 뷰

개요

  • GraylogELK Stack, Grafana와 경쟁하는 오픈 소스 로그 관제 솔루션이다. 애플리케이션이 전송한 로그 메시지의 적재와 조회, 시각화 등의 기본 기능 외 많은 기능을 제공한다. Graylog는 새 버전이 나올 때 마다 가상머신 이미지를 제공한다. 운영 환경에서는 절대 사용하지 말 것을 명시하면서도 가상머신 이미지를 제공하는 이유는 첫째, Graylog 도입을 고민하지만 설치 과정이 부담스러운 사용자를 대상으로 한 기능 맛보기이고 둘째, 로컬 개발 환경에서도 Graylog를 적극적으로 활용하라는 것이다. 실제로 디버깅의 트렌드는 IDE에서 한 문장씩 문제의 원인을 찾아가는 것보다 적절한 시점에 상세하게 적재된 로그를 확인하는 것으로 옮겨가고 있다. 이번 글을 통해 아직 국내에 잘 알려지지 않은 Graylog를 로컬에서의 디버깅 목적으로 설치하는 방법을 소개하고자 한다. (내 경우 현재 운영 중인 프로젝트에서 1년 넘게 개발, 테스트, 프로덕션 환경에서 모두 Graylog를 만족스럽게 사용하고 있다.)

목표

  • Vagrant 툴을 이용하여 Windows 운영체제에 Graylog 박스를 생성한다.

기대효과

  • Windows 운영체제의 개발 환경에서 단순 텍스트 로그가 아닌 Graylog를 통해 시각화 도구를 갖춘 도큐먼트 로그 적재와 관리가 가능해진다. 디버깅이 편리해지며 개발 생산성이 증가한다.

선행조건

  • Graylog 아키텍쳐에 대한 기본적인 이해가 필요하다. 본 블로그의 이 글을 정독한다.

Graylog 박스 다운로드 및 프로비저닝

### Graylog 박스 폴더 생성
$ md graylog
$ cd graylog

### Graylog 박스 Vagrantfile 다운로드
$ wget --no-check-certificate https://raw.githubusercontent.com/Graylog2/graylog2-images/2.4/vagrant/Vagrantfile

### Graylog 박스 Vagrantfile 편집
$ notepad Vagrantfile
Vagrant.configure(2)  do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.hostname = "graylog"

  config.vm.network :forwarded_port, guest: 80, host: 8888
  config.vm.network :forwarded_port, guest: 12201, host: 12201, protocol: 'udp'
  config.vm.network :forwarded_port, guest: 12201, host: 12201, protocol: 'tcp'

  config.vm.provider "virtualbox" do |v|
    v.memory = 4096
  end

  $script = <<SCRIPT
    apt-get update
    echo 'Going to download Graylog...'
    curl -S -s -L -O https://packages.graylog2.org/releases/graylog-omnibus/ubuntu/graylog_latest.deb
    dpkg -i graylog_latest.deb
    rm graylog_latest.deb
    graylog-ctl set-timezone Asia/Seoul
    graylog-ctl set-external-ip http://127.0.0.1:8888/api
    graylog-ctl reconfigure
SCRIPT

  config.vm.provision "shell", inline: $script
end

### Graylog 박스 실행
$ vagrant up
  • Vagrantfile 파일의 내용을 살펴보면 Ubuntu 운영체제 이미지를 내려 받아 인라인 스크립트로 Graylog 최신 버전를 설치하는 과정 임을 알 수 있다.
  • 웹 브라우저에서 Graylog Web Interface 접속이 가능하도록 로컬의 8080(애플리케이션과 충돌할 확률이 높으므로 8888 등으로 변경 추천) 포트로 포워딩이 설정되어 있다.
  • 또한 애플리케이션이 전송하는 로그 메시지를 수신할 수 있도록 로컬의 TCPUDP 프로토콜의 12201 포트로 포워딩이 설정되어 있다.
  • v.memory에서 시스템 메모리를 할당할 수 있다. 기본값은 2GB인데 로컬 머신의 사양이 좋다면 최대한 높일 것을 추천한다. (최소 4GB 권장)
  • graylog-ctl 명령은 가상머신 전용으로 제작된 어드민 명령어이다. 어드민 계정 비밀번호 변경 등 여러 설정을 명령어로 제어할 수 있다. [관련 링크]
  • 마지막으로 vagrant up 명령을 실행하면 베이스 박스 다운로드 및 프로비저닝이 진행된다. Graylog가 작동하는데 필요한 Graylog Server, MongoDB, Elasticsearch가 모두 한 가상 머신에 설치된다.

Graylog Web Interface 접속

  • 앞서의 작업이 완료되면 Graylog의 어드민 역할을 제공하는 Graylog Web Interface에 접속할 수 있다. 웹 브라우저에서 http://localhost:8888에 접속한다. 기본값인 admin/admin으로 접속한다.


Input 생성

  • Graylog를 설치하고 가장 선행되어야 할 작업은 애플리케이션이 전송하는 로그를 수신할 수 있는 Input을 생성하는 것이다. 미리 정의된 25개의 인풋을 제공하는데 이 중에서 GELF UDP 방식으로 12201번 포트를 리스닝하는 인풋을 생성해보자.
  • Graylog Web Interface 메뉴에서 SystemInputsLaunch new input 버튼을 클릭하면 생성할 수 있다. 생성 후에는 Start Input 버튼을 클릭하면 리스닝을 시작한다.

Stream 생성

  • 앞서 생성한 GELF UDP 방식의 인풋을 통해 Graylog ServerUDP 프로토콜 12201번 포트로 수신되는 모든 로그 메시지를 적재할 수 있다. 하지만 애플리케이션마다, 또는 같은 애플리케이션 내에서도 전송되는 로그의 성격이 다를 수 있다.(ex: 애플리케이션 요청 로그, 애플리케이션 스케쥴 로그) 이런 서로 다른 성격의 로그를 적절히 분류해주는 역할을 제공하는 것이 바로 Stream이다. 사용자는 생성된 스트림 단위로 적재된 로그를 조회할 수 있어 편리해진다.
  • Graylog Web Interface 메뉴에서 StreamsCreate Stream 버튼을 클릭하면 생성할 수 있다. 생성 후에는 Start Input 버튼을 클릭하면 새로운 Stream을 생성할 수 있다.
  • 스트림 생성시 Remove matches from All messages stream 선택 항목에 체크한다. GraylogAll messages라는 삭제가 불가능한 기본 스트림을 제공하는데 특정 스트림을 생성해도 위 항목을 체크하지 않으면 기본 스트림에서도 처리되어 로그 메시지가 이중으로 적재될 수 있다.

애플리케이션에서의 로그 전송

  • 인풋, 스트림까지 생성했다면 이제 애플리케이션에서 로그를 전송해볼 차례이다. Spring Boot 기반 Java 애플리케이션에서의 로그 전송은 본 블로그의 이 글을 참고하여 진행한다.


댓글
댓글쓰기 폼