본문 바로가기
[Cloud]/Rancher1

EFK(Elasticsearch + Fluentd + Kibana) + rancher1.6 설치 와 운영

by journes 2018. 11. 22.

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에서 확인 가능.