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
- Trong folder chứa file docker-compose.yml chạy lệnh