티스토리 뷰
개요
Graylog
는ELK 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 등으로 변경 추천) 포트로 포워딩이 설정되어 있다. - 또한 애플리케이션이 전송하는 로그 메시지를 수신할 수 있도록 로컬의 TCP와 UDP 프로토콜의 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
메뉴에서 System → Inputs → Launch new input 버튼을 클릭하면 생성할 수 있다. 생성 후에는 Start Input 버튼을 클릭하면 리스닝을 시작한다.
Stream 생성
- 앞서 생성한 GELF UDP 방식의 인풋을 통해
Graylog Server
의 UDP 프로토콜 12201번 포트로 수신되는 모든 로그 메시지를 적재할 수 있다. 하지만 애플리케이션마다, 또는 같은 애플리케이션 내에서도 전송되는 로그의 성격이 다를 수 있다.(ex: 애플리케이션 요청 로그, 애플리케이션 스케쥴 로그) 이런 서로 다른 성격의 로그를 적절히 분류해주는 역할을 제공하는 것이 바로Stream
이다. 사용자는 생성된 스트림 단위로 적재된 로그를 조회할 수 있어 편리해진다. Graylog Web Interface
메뉴에서 Streams → Create Stream 버튼을 클릭하면 생성할 수 있다. 생성 후에는 Start Input 버튼을 클릭하면 새로운 Stream을 생성할 수 있다.- 스트림 생성시
Remove matches from All messages stream
선택 항목에 체크한다. Graylog는All messages
라는 삭제가 불가능한 기본 스트림을 제공하는데 특정 스트림을 생성해도 위 항목을 체크하지 않으면 기본 스트림에서도 처리되어 로그 메시지가 이중으로 적재될 수 있다.
애플리케이션에서의 로그 전송
- 인풋, 스트림까지 생성했다면 이제 애플리케이션에서 로그를 전송해볼 차례이다. Spring Boot 기반 Java 애플리케이션에서의 로그 전송은 본 블로그의 이 글을 참고하여 진행한다.
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- java
- node.js
- bootstrap
- kotlin
- JavaScript
- 로드 바이크
- Spring MVC 3
- Kendo UI
- Tomcat
- CentOS
- 구동계
- 로드바이크
- DynamoDB
- Eclipse
- graylog
- jstl
- 태그를 입력해 주세요.
- Docker
- 평속
- MySQL
- jsp
- 자전거
- maven
- jpa
- Kendo UI Web Grid
- JHipster
- 알뜰폰
- chrome
- spring
- Spring Boot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함