Cài Đặt và Cấu Hình ELK (Filebeat, Kafka, Logstash, Elasticsearch, Kibana)

1. Các phiên bản cài đặt

  • filebeat-7.4.0-linux-x86_64.tar.gz
  • elasticsearch-7.4.0-linux-x86_64.tar.gz
  • kibana-7.4.0-linux-x86_64.tar.gz
  • logstash-7.4.0.tar.gz
  • kafka_2.12-2.3.0.tgz

2. Tác dụng của các thành phần

  • Filebeat: Công cụ chuyển tiếp nhật ký, theo dõi và đọc các tệp nhật ký được chỉ định.
  • Elasticsearch: Cơ sở dữ liệu phân tán dựa trên JSON, thiết kế để mở rộng ngang, độ tin cậy cao và dễ quản lý.
  • Kibana: Giao diện người dùng đồ họa cho phép hiển thị dữ liệu dưới dạng biểu đồ và cung cấp giao diện quản lý cho Elastic Stack.
  • Logstash: Ứng dụng xử lý dữ liệu thời gian thực, chuyển đổi và gửi dữ liệu từ nguồn đến đích.
  • Kafka: Hệ thống thông điệp phân phối có khả năng xử lý lượng lớn dữ liệu.

3. Cài đặt và cấu hình Filebeat

# Giải nén gói Filebeat và đặt vào thư mục mong muốn
tar -xzf filebeat-7.4.0-linux-x86_64.tar.gz -C /opt/app
mv filebeat-7.4.0 filebeat
# Sửa filebeat.yml
- type: log
  enabled: true
  paths:
    - /opt/applog/ldp/daily.log  # Đường dẫn đến tệp nhật ký
  fields:
    log_topic: "test-ldp"        # Tên topic
  multiline.pattern: ^\[
  multiline.negate: true
  multiline.match: after
# Cấu hình output đến Kafka
output.kafka:
  hosts: ["xxx.xxx.xxx.xxx:9092"]
  topic: '%{[fields][log_topic]}'
# Khởi động Filebeat
cd /opt/app/filebeat
nohup ./filebeat -e -c filebeat.yml > /opt/applog/filebeat.log &
# Nếu gặp lỗi kết nối, thêm IP và hostname của máy Kafka vào /etc/hosts
vi /etc/hosts
# Thêm dòng sau vào cuối file
xxx.xxx.xxx.xxx vm-vmwxxx-app

4. Cài đặt và cấu hình Kafka

  1. Giải nén và đặt vào thư mục mong muốn
tar -xzf kafka_2.12-2.3.0.tgz -C /DATA/elk
mv kafka_2.12-2.3.0 kafka
# Sửa file server.properties
cd /DATA/elk/kafka/config
vi server.properties
broker.id=0 
port=9092 
log.dirs=/DATA/logs/kafka 
zookeeper.connect=xxx.xxx.xxx.xxx:2181
  1. Cấu hình Zookeeper
cd /DATA/elk/kafka/config
vi zookeeper.properties
dataDir=/DATA/logs/zk_data
dataLogDir=/DATA/logs/zk_log
clientPort=2181
maxClientCnxns=100
tickTime=2000
initLimit=10
  1. Viết script khởi động và dừng
# Khởi động
#!/bin/bash
/DATA/elk/kafka/bin/zookeeper-server-start.sh /DATA/elk/kafka/config/zookeeper.properties &
sleep 3
/DATA/elk/kafka/bin/kafka-server-start.sh /DATA/elk/kafka/config/server.properties &

# Dừng
#!/bin/bash
/DATA/elk/kafka/bin/kafka-server-stop.sh /DATA/elk/kafka/config/server.properties &
sleep 3
/DATA/elk/kafka/bin/zookeeper-server-stop.sh /DATA/elk/kafka/config/zookeeper.properties &

Khởi tạo và kiểm tra topic:

cd /DATA/elk/kafka/bin
./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic ldp-test
./kafka-topics.sh --list --zookeeper localhost:2181
./kafka-topics.sh --delete --zookeeper localhost:2181 --topic ldp-test

Kiểm tra giao tiếp giữa producer và consumer:

  • Producer: ./kafka-console-producer.sh --broker-list localhost:9092 --topic ldp-test
  • Consumer: ./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic ldp-test --from-beginning

5. Cài đặt và cấu hình Logstash

Giải nén và chỉnh sửa file cấu hình

cd config/
mkdir conf.d
cd conf.d
touch ldp-pipeline.conf
vi ldp-pipeline.conf

input {
  kafka {
    bootstrap_servers => "xxx.xxx.xxx.xxx:9092"
    topics => "test-ldp"
    group_id => "ldp-group"
    client_id => "ldp-client"
    codec => "json"
    id => "test-ldp"
  }
}

output {
  elasticsearch {
    hosts => ["xxx.xxx.xxx.xxx:9200"]
    index => "test-ldp-index-%{+YYYY.MM.dd}"
  }
}

Sửa file logstash.yml

node.name: xxx.xxx.xxx.xxx
path.data: /DATA/elk/logstash/data
http.host: xxx.xxx.xxx.xxx
http.port: 9600
log.level: info
path.logs: /DATA/logs/logstash

Sửa file pipelines.yml

- pipeline.id: test-ldp
  path.config: "/DATA/elk/logstash/config/conf.d/ldp-pipeline.conf"
  pipeline.workers: 1
  pipeline.batch.size: 125
  pipeline.batch.delay: 50
  queue.type: memory

6. Cài đặt Elasticsearch

Giải nén và cấu hình

cd /DATA/elk/elasticsearch/config
vi elasticsearch.yml

path.logs: /DATA/logs/es
network.host: xxx.xxx.xxx.xxx
cluster.initial_master_nodes: ["node-1"]

Khởi động Elasticsearch

nohup ./elasticsearch &

Nếu gặp lỗi, hãy điều chỉnh các giới hạn hệ thống:

# Điều chỉnh giới hạn file descriptor
vim /etc/security/limits.conf
*               soft    nofile          65536
*               hard    nofile          65536
*               soft    nproc           4096
*               hard    nproc           4096

# Kiểm tra hiệu lực
ulimit -Hn
ulimit -Sn
ulimit -Hu
ulimit -Su

# Điều chỉnh số luồng tối đa
vim /etc/security/limits.d/20-nproc.conf
chenyn soft nproc 4096

# Điều chỉnh vm.max_map_count
vim /etc/sysctl.conf
vm.max_map_count=655360
sysctl -p

Khởi động Logstash và kiểm tra dữ liệu

nohup ./logstash &

Kiểm tra dữ liệu trong Elasticsearch:

curl 'xxx.xxx.xxx.xxx:9200/_cat/indices?v'

curl -XGET 'xxx.xxx.xxx.xxx:9200/test-ldp-index/_search?pretty'

7. Cài đặt Kibana

Giải nén và cấu hình

cd config
vi kibana.yml

server.host: "xxx.xxx.xxx.xxx"
elasticsearch.hosts: ["http://esip:9200"]

Khởi động Kibana

cd /DATA/elk/kibana/bin ./kibana &

Tạo và xem dữ liệu trong Kibana.

Thẻ: ELK Filebeat kafka Logstash Elasticsearch

Đăng vào ngày 23 tháng 5 lúc 01:33