ELK stack là gì

"ELK" là viết tắt của 3 mã nguồn mở: Elasticsearch, Logstash, and Kibana

Elasticsearch: Cơ sở dữ liệu để lưu trữ, tìm kiếm và query log
Logstash: Tiếp nhận log từ nhiều nguồn, sau đó xử lý log và ghi dữ liệu và Elasticsearch
Kibana: Giao diện để quản lý, thống kê log. Đọc thông tin từ Elasticsearch

Về cơ chế hoạt động bạn có thể xem hình bên dưới

  • Đầu tiên thì log sẽ được đưa đến Logstash qua nhiều con đường, từ file, từ beat (Công cụ đọc file của elastic.co)
  • Sau đó Logstash sẽ xử lý, và phân loại log rồi đưa đến Elastic Search để lưu trữ
  • Kibana sẽ đọc những dữ liệu được lưu trong Elastic Search để hiện thị log

Build ELK stack với docker

  • Đầu tiên pull 3 image elk về máy:
    docker pull docker.elastic.co/elasticsearch/elasticsearch:6.2.4
    docker pull docker.elastic.co/kibana/kibana:6.2.4
    docker pull docker.elastic.co/logstash/logstash:6.2.4
    
  • Tạo folder có cấu trúc sau:

docker-compose.yml

version: '2'
services:
 elasticsearch:
 	container_name: elastic_624
   image: docker.elastic.co/elasticsearch/elasticsearch:6.2.4
   build: elasticsearch
   environment:
     ES_JAVA_OPTS: "-Xms1g -Xmx1g"
   ports:
     - "9203:9200"
     - "9302:9300"
   volumes:
     - ./elasticsearch/config/:/etc/elasticsearch/config/
 kibana:
   container_name: kibana_624
   image: docker.elastic.co/kibana/kibana:6.2.4
   build: kibana
   ports:
     - 5601:5601
   volumes:
     - ./kibana/config/:/opt/kibana/config/
   depends_on:
     - elasticsearch
 logstash:
 	container_name: logstash_624
 	image: docker.elastic.co/logstash/logstash:6.2.4
 	command: -f /etc/logstash/conf.d/
   build:logstash
   ports:
     - 5000:5000
   volumes:
     - ./logstash/config:/etc/logstash/conf.d
   depends_on:
     - elasticsearch

kibana.yml

server.name: "kibana"
server.host: "0.0.0.0"
ops.interval: 5000
elasticsearch.url: "[ip_server_here]:9203"
xpack.security.enabled: false

my_config.conf

input {
    file {
    	path => "your file log"
        type => "Name of Log"
    }
}
output {
    elasticsearch { 
    	hosts => ["localhost:9200"] 
    }
    if "INFO" in [message] {
	    email {
	        username => "yourmail@gmail.com"
	        address => "smtp.gmail.com"
	        password => "yourpass"
	        port => 587
	        use_tls => true
	        from => "yourmail@gmail.com"
	        subject => "LOG alert"
	        to => "yourmail@gmail.com"
	        via => "smtp"
	        body => "Here is the event line that occured: %{message}"
	    }
    }
    stdout { codec => rubydebug }
}
  • Run:
    • Trong folder chứa file docker-compose.yml chạy lệnh docker-compose up
    • Chạy thành công sẽ có 3 container như hình bên dưới
    • Địa chỉ truy cập vào kibana: your_ip:5601