EFK(Elasticsearch + Fluentd + Kibana) + rancher1.6 설치 및 운영
Fluentd는 로그(데이터) 수집기(collector)다. 보통 로그를 수집하는 데 사용하지만, 다양한 데이터 소스(HTTP, TCP 등)로부터 데이터를 받아올 수 있다.Fluentd로 전달된 데이터는 tag, time, record(JSON) 로 구성된 이벤트로 처리되며, 원하는 형태로 가공되어 다양한 목적지(Elasticsearch, S3, HDFS 등)로 전달될 수 있다.Fluentd는 C와 Ruby로 개발되었다. 더 적은 메모리를 사용해야 하는 환경에서는 Fluentd forwarder의 경량화 버전인 Fluentd-Bit 와 함께 사용할 수 있다. 데이터 유실을 막기 위해 메모리와 파일 기반의 버퍼(Buffer) 시스템을 갖고 있으며, Failover 를 위한 HA(High Availability) 구성도 가능하다
이벤트 | Event
- Fluentd가 읽어들인 데이터는 tag, time, record 로 구성된 이벤트(Event) 로 처리된다.
- tag: 이벤트를 어디로 보낼지 결정하기 위한 구분값
- time: 이벤트가 발생한 시간
- record: 데이터 (JSON)
[https://blog.jonnung.com/system/2018/04/06/fluentd-log-collector-part1/ 내용중 일부 캡처 ]
Service Flow
각 Container에서 수집되는 Log를 Fluentd로 전달 (tail / forward ..등) -> ElasticSearch + Kibana 연동.
- 상황에 따라, AWS의 S3와 연동 할수도 있음.
EFK (Elasticsearch + Fluentd + Kibana) 설치
- 설치방법은 사이트((https://docs.fluentd.org/v0.12/articles/docker-logging-efk-compose) 를 참고 하였습니다.
- Fluentd의 경우, Plugin과 연동을 위해, image를 계속 생성해야 하기에 Build로 생성 합니다.
- 처음엔, 기본 image만 racher stack으로 만들고, 나머지 설정을 추가 하려고 생각했는데, 그냥 기존대로 Build 로 처리했습니다.
- "fluent-plugin-elasticsearch"를 추가 했는데. 만얀 다른곳으로 data를 보내려면 plugin을 추가 후 image Build 하시면 됩니다.
- Elasticsearch & Kibana는 image만 올렸습니다. ( 추가될 설정은 memory limit 정도라고 생각합니다. )
- "fluent.conf"파일이 주된 설정파일 이며, 설정변경을 위해 Volume Mount 로 잡아 줍니다.
- 기본적인 app log를 수집하기 때문에, forward 로 설정 하였습니다.
- port는 24224이고 0.0.0.0에 Bind 했습니다.
Install (폴더 및 파일 생성)
파일 경로
/docker-compose.yml
/fluentd/Dockerfile
/fluentd/conf/fluent.conf
/docker-compose.yml 설정 파일.
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 | version: '2' services: web: ## TEST 용 wep 설치 image: httpd:2.4 ports: - "80" links: - fluentd logging: driver: "fluentd" options: fluentd-address: localhost:24224 ## fluend 서버 IP 등록 tag: httpd.access fluentd: build: ./fluentd volumes: - ./fluentd/conf:/fluentd/etc links: - "elasticsearch" ports: - "24224:24224" - "24224:24224/udp" elasticsearch: image: elasticsearch:5.5 expose: - 9200 ports: - "9200:9200" - "9300:9300" kibana: image: kibana:5.5 links: - "elasticsearch" ports: - "5601:5601" | cs |
/fluent/Dockerfile 파일
1 2 | FROM fluent/fluentd:v0.12 RUN ["gem", "install", "fluent-plugin-elasticsearch", "--no-rdoc", "--no-ri", "--version", "1.9.5"] | cs |
/fluent/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 | <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 |
insall (docer-comose up)
- "docker-compose.yml" 파일이 있는 곳에서 아래와 같이 실행 합니다.
1 | docker-compose up -d | cs |
Rancher 확인
- 아래와 같이 Racher [INFRASTRUCTURE] - [ Hosts] 에서 확인 가능 합니다.
EFK (Elasticsearch + Fluentd + Kibana ) 설치 - ( rancher1.6 설정 )
- "Log Driver"를 통해 , log를 어디로 보낼 건지 선택할수 있습니다.
- default는 아무런 설정이 없는 상태 입니다.
rancher1.6 설정
- 해당 컨테이너의 정보 수정
- Lpg Driver : Fluentd 로 지정
- Log option :
- fluent-address : fluentd 서버 IP 및 포트 (ex localhost:24224 )
- tag : 어떤 컨테이너에서 수집되었는지 확인 할수 있는 구분자 입니다.
rancher1.6 설정
- 설정이 완료 되면, 설정한 컨테이너의 app log 가 "fluentd_1"로 전달 됨.
Kibana 에서 확인
- 아래와 같이 kibana에서 확인 가능.