BigData

Docker elk 설치

Kyle79 2019. 10. 1. 12:18

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 OSPort ContainerPort연결, 외부에서 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