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