EFK Stack 구축 using Docker compose
Elasticsearch + Fluentd + Kibana 조합을 EFK Stack이라 부른다.
참고로 Elasticsearch + logstash + Kibana 조합은 ELK Stack 이다.
Fluentd : 오픈소스 log collector Elasticsearch : Lucene 기반 분산 검색 엔진이며 JSON 형태로 문서를 저장한다. (schema free) Kibana : 데이터 시각화를 위한 오픈소스 | cs |
간편하게 설치하기 위해서 Docker를 이용하였다.
해당 구축 방식은 실무에 적용하기에 다소 부족하니 테스트 용도로만 사용해야 한다.
난 Spring Data Elasticsearch 를 테스트 하기 위해 구축했다.
1.
먼저 Docker와 Docker compose를 설치한다.
설치 방법은 예전에 포스팅한 글이 있어 링크로 대체한다.
http://lng1982.tistory.com/268
2.
docker-compose.yml 작성한다.
apache webserver, fluentd, elasticsearch, kibana 4개의 Docker 컨테이너 설정이 포함된다.
여기서 중요한 것은 elasticsearch 메모리 설정이다.
로컬 서버의 메모리 자원이 넉넉하지 않아 256m 로 설정 후 구동했는데 아래와 같은 오류 메세지가 출력되었다.
kibana_elasticsearch_1 exited with code 137 | cs |
137 코드가 무엇을 의미하는지 찾아보니 Out of memory 에러가 발생한 케이스였다.
그래서 1024로 설정했는데 동일한 문제가 발생하여 1.5G 정도 할당하였다.
또한 networks 설정도 중요하다.
기본적으로 Docker 컨테이너들 간에는 서로 통신을 할 수 없다.
이를 위해서 하나의 네트워크로 묶어주는 설정이 필요하다.
난 이 부분 설정을 빠트려서 Unable to connect to Elasticsearch at http://elasticsearch:9200 오류가 발생했었다.
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | version: '2' services: web: image: httpd:2.4 mem_limit: 256m networks: - default - internal ports: - "80:80" links: - fluentd logging: driver: "fluentd" options: fluentd-address: localhost:24224 tag: httpd.access fluentd: build: ./fluentd mem_limit: 128m networks: - default - internal volumes: - ./fluentd/conf:/fluentd/etc links: - "elasticsearch" ports: - "24224:24224" - "24224:24224/udp" elasticsearch: image: elasticsearch:5.5 mem_limit: 1536m networks: - default - internal expose: - 9200 ports: - "9200:9200" - "9300:9300" kibana: image: kibana:5.5 mem_limit: 128m networks: - default - internal links: - "elasticsearch" ports: - "5601:5601" networks: internal: driver: bridge | cs |
3.
fluentd Docker 파일 준비
docker-compose.yml 파일이 존재하는 디렉토리에 fluentd/Dockerfile을 생성한다.
Dockerfile에는 다음의 정보가 추가된다.
FROM fluent/fluentd:v0.12 RUN ["gem", "install", "fluent-plugin-elasticsearch", "--no-rdoc", "--no-ri", "--version", "1.9.2"] | cs |
4.
fluentd 설정 준비
docker-compose.yml 파일이 존재하는 디렉토리에 fluentd/conf/fluent.conf 파일을 생성한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <source> @type forward port 24224 bind 0.0.0.0 </source> <match *.**> @type copy <store> @type elasticsearch host elasticsearch port 9200 logstash_format true logstash_prefix fluentd logstash_dateformat %Y%m%d include_tag_key true type_name access_log tag_key @log_name flush_interval 1s </store> <store> @type stdout </store> </match> | cs |
5.
Docker 구동
docker-compose.yml 파일이 존재하는 위치로 이동 후 다음의 명령어 실행
# docker-compose up & | cs |
구동이 완료된 후 # docker ps 명령어를 통해 총 4개의 컨테이너가 동작됨을 알 수 있다.
6.
kibana 대쉬보드 접속
http://localhost:5601/ 로 이동하면 configure an index pattern 화면이 보인다.
index name or pattern 에 fluentd-* 를 입력한 후 "Create" 버튼을 누른다.
실제 로그가 제대로 수집되고 시각화 되는지를 확인하기 위해서 아파치 웹 서버의 루트 페이지에 접속해 보자.
http://localhost 페이지에 여러번 요청을 보낸 후 kibana 대쉬보드의 좌측 Discover 메뉴를 클릭하자.
데이터가 안 나오면 Time Range 설정이 과거로 되어 있기 때문일 수 있다.
오른쪽 상단에 있는 시계 버튼을 클릭해서 현재 날짜로 설정 후 다시 확인해 보면 된다.
여기까지가 Docker compose를 이용한 설치 방법이다.
Docker가 없었다면 4개의 오픈 소스를 모두 설치하고 셋팅하는 수고로움이 필요했을 것이다.
[참고]
https://docs.fluentd.org/v0.12/articles/docker-logging-efk-compose
'서버' 카테고리의 다른 글
[Elasticsearch] 클러스터 구성 (2) | 2017.11.30 |
---|---|
[Elasticsearch] 용어 정리 (0) | 2017.11.29 |
Apache2 설치 (Ubuntu 16.04) (0) | 2017.09.15 |
[ElasticSearch] 윈도우 설치 및 기본 동작 이해 (4) | 2017.08.31 |
Google App Engine 환경에 Spring Boot 배포하기 (0) | 2017.08.09 |
kubernetes 정리 (2) | 2017.01.12 |
Kubernetes 설치 (6) | 2017.01.12 |
Docker 정리 (2) | 2017.01.04 |