Filebeat with ELK를 사용한 로그 수집
- Docker 컨테이너 설치와 기본 사용법을 익히기 위한 문서로서
- 각각의 애플리케이션은 도커를 사용하여 설치
- Prerequisites : 도커 런타임(데몬)은 설치되어 실행 중인 환경
샘플은 1. 아파치 액세스 로그를 파일비트를 사용하여 수집,
2. logstash가 수집된 데이터를 수신하여 파싱·변형 후 엘라스틱서치에 전송
3. kibana를 사용하여 적재된 로그를 확인 하는 과정으로 이루어짐
1. 도커 컨테이너 설치 (파일비트, 로그스테시, 엘라스틱서치, 키바나)
■ 엘라스틱 설치
sudo docker run -d -p 9200:9200 -h elasticsearch --name elasticsearch \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e "http.host=0.0.0.0" -e "transport.host=127.0.0.1" \
docker.elastic.co/elasticsearch/elasticsearch:5.6.0
• run : Docker Container 설치 및 실행, 최초 실행 시 자동으로 도커 이미지를 받아 설치 함
• -d : Container 등록 및 백그라운드로 실행, 컨테이너가 자동 등록되기 때문에 이후 옵션 등이 변경되어 다시 run 명령어를 실행하면 에러 남
‘docker rm CONTAINER_ID’를 사용하여 먼저 컨데이너 제거 후 재 실행 가능함
등록된 컨테이너는 ‘docker stop CONTAINER_ID’, ‘docker start CONTAINER_ID’ 로 종료 및 시작 할 수 있음
• -p : Host OS의 Port와 Container의 Port연결, 외부에서 9200 포트로 데이터가 들어오면 Container의 포트로 포워딩 됨, 해당 옵션을 사용하지 않는 경우 Container 간의 통신은 가능하지만 외부 머신에서 접속 불가능 함
• -e : 환경변수 값 설정
• -h : Container의 host 명 지정
• --name : Container의 이름 지정, CONTAINER_ID를 사용하지 않고 지정된 이름으로 명령 가능함, ex) docker start elasticsearch
• docker.elastic.co/elasticsearch/elasticsearch:5.6.0 : 설치할 애플리케이션 지정
■ 키바나 설치
sudo docker run -d -p 5601:5601 -h kibana --name kibana \
--link elasticsearch:elasticsearch \
docker.elastic.co/kibana/kibana:5.6.0
• --link : <컨테이너명>:<호스트명>, 키바나에서 엘라스틱 서치로 통신 가능케 해 줌, 컨테이너는 최초 run 시 가상IP를 부여받기 때문에 컨테이서 제거 후 다시 run 하면 IP가 변경됨, 이를 방지하기 위해 컨테이너의 /etc/hosts 파일에 IP 정보를 등록 해야 함, Docker 엔진은 link 옵션을 사용하는 경우 자동으로 /etc/hosts 파일에 등록 해주고 가상IP가 변경되면 파일 내용을 자동 수정 해 줌
Docker Network 구조(1) - docker0와 container network 구조 참고
■ 로그스태시 설치
* 설치 전 실행 (예제는 root 계정에서 실행되었음)
>cd /root
>mkdir apps
>mkdir logstash
>vi logstash.conf
input {
beats {
# 지정된 포트로 filebeat의 데이터를 전송받음
port => 5044
}
}
output {
elasticsearch {
hosts => ["elasticsearch:9200"]
user => elastic
password =>changeme
manage_template => false
index => "access-log" #DB의 데이터베이스 명
document_type => "log" #DB의 테이블 명
}
}
※ 해당 문서는 도커 컨테이너 설치와 기본 사용법을 설명하기 위한 문서이기 때문에 logstash 설정에 대한 상세 내역은 다루지 않음
sudo docker run -u 0 -d -p 5044:5044 -h logstash --name logstash \
--link elasticsearch:elasticsearch -e LS_JAVA_OPTS="-Xms256m -Xmx256m" -v /root/apps/logstash:/config-dir \
docker.elastic.co/logstash/logstash:5.6.0 \
-f /config-dir/logstash.conf
• -v : Host OS에 생성한 logstash.conf 파일을 Container에서 접근 가능하도록 /root/apps/logstash 디렉토리를 Container의 /config-dir 에 마운트 시킴
• -f : 마운트된 logstash.conf 파일을 환경변수 파일로 인식 시킬 수 있도록 함
■ 파일비트 설치
* 설치 전 실행 (예제는 root 계정에서 실행되었음)
>cd /root/apps
>mkdir filebeat
>vi filebeat.yml
filebeat.prospectors:
- input_type: log
paths:
- /usr/share/filebeat/logs/access_log
output:
logstash:
hosts: ["logstash:5044"]
>sudo yum install httpd -y # 아파치 설치
>ln -s /var/log/httpd/access_log /root/apps/filebeat/test.log #아파치 액세스로그 링크
sudo docker run -d -h filebeat --name filebeat --link logstash:logstash \
-v /root/apps/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml -v /root/apps/filebeat/test.log:/usr/share/filebeat/logs/access_log \
docker.elastic.co/beats/filebeat:5.6.0
• -v /root/apps/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml : 파일비트 설정파일을 Container에 링크
• -v /root/apps/filebeat/test.log:/usr/share/filebeat/logs/access_log : 로그파일을 Container에 링크
2. 설치 확인
■ 엘라스틱
웹브라우저에서 http://192.168.203.217:9200/ 실행
■ 키바나
웹브라우저에서 http://192.168.203.217:5601/ 실행
>좌측 ‘Discover’ 버튼 클릭
>’Add a filter’ 버튼 클릭
>콤보박스에서 ‘_index’ 선택 > Operators 콤보박스에서 ‘is’ 선택 > Value.. 콤보박스에 ‘access-log’ 입력(logstash.conf 의 output/elasticsearch/index에 설정했던 값)
3. 도커 기본 명령어
· 컨테이너 시작/종료
>docker stop|start CONTAINER_ID|CONTAINER_NAME #ex) docker stop logstash
· 컨테이너 제거
>docker rm CONTAINER_ID|CONTAINER_NAME #ex) docker rm logstash
· 컨테이너 로그 확인
>docker logs -f CONTAINER_ID|CONTAINER_NAME
· 컨테이너 터미널 접속
>docker exec -u 0 -it CONTAINER_ID|CONTAINER_NAME /bin/bash
※ -u : root 계정으로 접속, 해당 옵션을 사용하지 않으면 접속 후 할 수 있는게 없음
· 컨테이너 IP 주소 확인
>docker inspect -f "{{ .NetworkSettings.IPAddress }}" CONTAINER_ID|CONTAINER_NAME
· 컨테이너의 /etc/hosts 파일 확인
>docker exec -t CONTAINER_ID|CONTAINER_NAME cat /etc/hosts
※ 파일을 찾을 수 없다고 에러 날 경우 ‘-u 0’ 옵션 사용하여 root 계정으로 실행
· 현재 실행되고 있는 모든 컨테이너의 포트 포워딩 정보 확인
iptables -t nat -L -n
'BigData' 카테고리의 다른 글
Korquad (0) | 2019.10.11 |
---|---|
Mysql Check (0) | 2019.10.07 |
CNN (0) | 2019.09.11 |
Reactive (0) | 2019.09.11 |
개발 패턴 - 옵저버 패턴 (0) | 2019.09.06 |