Kafka và ELK thường xuyên được sử dụng trong việc sử lý Log, Kafka hoạt động như một bộ đệm đứng trước LogStash, nó sẽ hứng Log, xử lý, phân luồng và đẩy về LogStash, đảm bảo cho LogSlash không bị nghẽn khi traffic quá nhiều được đẩy tới đồng thời. Trong bài này, chúng ta tìm hiểu cách kết hợp giữa ELK và Kafka trong việc xử lý Log.
Kafka đóng vai trò quan trọng trong hạ tầng của chúng ta. Như vậy, chúng ta sẽ xây dựng một hệ thống giám sát để đảm bảo các luồng dữ liệu thông qua các ống dẫn pipeline. Các metrics hiệu suất chính cần quan tâm là latency, lag. Chúng được giám sát chặt chẽ bằng nhiều tiến trình và công cụ khác nhau.
Một thành phần khác trong quá trình giám sát hệ thống cần được nhắc đến đó là Log của Kafka.
Kafka sẽ sinh ra nhiều kiểu Log file khác nhau, chúng ta sẽ thu thập những Log đó bằng Filebeat, thêm vào trường metadata và áp dụng cấu hình có khả năng phân tích của Kafka để phân tích các lớp của Log và Java.
Trong bài này, Tôi sẽ cung cấp các hướng dẫn để bạn có thể nắm bắt được cách thức kết hợp giữa Kafka và ELK. Trong những bước đầu tiên, sẽ giải thích cách để cài đặt Kafka và kiểm tra một vài trường hợp trên server log. Nếu bạn đã cài đặt Kafka trước rồi thì có thể bỏ qua những bước này để đi đến phần cài đặt và cấu hình ELK.
Cài Đặt Kafka
Để chạy được Kafka và ELK, chúng đều cần môi trường Java. Vậy nên, trước tiên chúng ta sẽ tiến hành cài đặt Java:
sudo apt-get update sudo apt-get install default-jre
Tiếp theo, Apache Kafka sử dụng ZooKeeper để giữ thông tin cấu hình và đồng bộ, vì vậy chúng cũng cần cài đặt ZooKeeper trước khi cài đặt Kafka:
sudo apt-get install zookeeperd
Mặc định, ZooKeeper sẽ lắng nghe trên Port 2181. Bạn có thể kiểm tra nó bằng cấu lệnh sau:
netstat -nlpt | grep ':2181'
Tiếp đến, hãy tải và giải nén Kafka:
wget http://apache.mivzakim.net/kafka/2.1.0/kafka_2.11-2.1.0.tgz tar -xvzf kafka_2.12-2.1.0.tgz sudo cp -r kafka_2.11-2.1.0 /opt/kafka
Kafka bây giờ đã sẵn sàng để Start, chúng ta sẽ thực thi file Script sau:
sudo /opt/kafka/bin/kafka-server-start.sh
/opt/kafka/config/server.properties
Bạn sẽ thấy những dòng log INFO hiển trên màn hình, nhìn dưới cuối sẽ thấy thông báo Kafka đã Start thành công.
[2018-12-30 08:57:45,714] INFO Kafka version : 2.1.0 (org.apache.kafka.common.utils.AppInfoParser) [2018-12-30 08:57:45,714] INFO Kafka commitId : 809be928f1ae004e (org.apache.kafka.common.utils.AppInfoParser) [2018-12-30 08:57:45,716] INFO [KafkaServer id=0] started (kafka.server.KafkaServer)
Khi Kafka thực thi, nó sẽ Listen trên Port 9092.
Kiểm Tra Kafka
Chúng ta sẽ tiến kiểm tra xem việc cài đặt Kafka có thành công hay không.
Đầu tiên, Tạo một Topic mới với một partition và một replicas ( vì chúng ta chỉ có một Kafka server) sử dụng câu lệnh sau:
/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic danielTest
Bạn nhìn thấy đầu ra với các thông tin:
Created topic "danielTest"
Bằng việc sử dụng console producer, chúng ta sẽ Post một vài message đến Topic vừa tạo.
/opt/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic danielTest
Tại dấu nhắc, nhập vào những message sau cho Topic:
>This is just a test >Typing a message >OK
Mở một tab khác, chúng ta sẽ chạy câu lệnh cho Kafka consumer để đọc data từ Kafka và hiển thị các message mà chúng ta đã nhập lúc nãy.
/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic danielTest --from-beginning
Bạn sẽ thấy lại những message mà chúng ta đã nhập.
>This is just a test
>Typing a message
>OK
Cài Đặt ELK
Tiếp theo, chúng ta đi đến phần cài đặt các thành phần Logging là Elasticsearch, Logstash, Kibana, Filebeat.
Tiến hành tải và cài đặt Elastics Publics signing Key:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
Thêm repository mới:
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
Cập nhật lại hệ thống và cài đặt Elasticsearch:
sudo apt-get update && sudo apt-get install elasticsearch
Chạy Elasticsearch:
sudo service elasticsearch start
Kiểm tra xem Elasticsearch đã cài đặt thành công hay chưa với lệnh Curl:
curl "http://localhost:9200"
Bạn sẽ thấy đầu ra như sau:
{ "name" : "6YVkfM0", "cluster_name" : "elasticsearch", "cluster_uuid" : "8d8-GCYiQoOQMJdDrzugdg", "version" : { "number" : "6.5.4", "build_flavor" : "default", "build_type" : "deb", "build_hash" : "d2ef93d", "build_date" : "2018-12-17T21:17:40.758843Z", "build_snapshot" : false, "lucene_version" : "7.5.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }
Tiếp theo, ta sẽ cài dặt kibana:
sudo apt-get install kibana
Mở tệp tin cấu hình của Kibana tại: /etc/kibana/kibana.yml , và cấu hình như sau:
server.port: 5601 elasticsearch.url: "http://localhost:9200"
And, start Kibana with:
sudo service kibana start
To install Filebeat, use:
sudo apt install filebeat
Cấu Hình Pipeline
Tôi sẽ miêu tả 2 phương pháp để chuyển Log từ Kafka đến ELK, thứ nhất là sử dụng Logz.io, thứ hai là sử dụng Logstash.
Đẩy Logs Vào Logz.io
Để đẩy lấy Logs từ Logz.io, chúng ta sẽ điều chỉnh 1 vài thứ trong file cấu hình của Filebeat.
Đầu tiên, bạn cần tải về SSL certificate để sử dụng cho việc mã hóa đường truyền:
wget https://raw.githubusercontent.com/logzio/public-certificates/master/COMODORSADomainValidationSecureServerCA.crt sudo mkdir -p /etc/pki/tls/certs sudo cp COMODORSADomainValidationSecureServerCA.crt /etc/pki/tls/certs/
Tệp tin cấu hình sẽ trông như sau:
filebeat.inputs:
- type: log paths: - /opt/kafka/logs/server.log fields: logzio_codec: plain token: <yourAccountToken> type: kafka_server env: dev fields_under_root: true encoding: utf-8 ignore_older: 3h multiline: pattern: '\[[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{3}\] ([A-a]lert|ALERT|[T|t]race|TRACE|[D|d]ebug|DEBUG|[N|n]otice|NOTICE|[I|i]nfo|INFO|[W|w]arn?(?:ing)?|WARN?(?:ING)?|[E|e]rr?(?:or)?|ERR?(?:OR)?|[C|c]rit?(?:ical)?|CRIT?(?:ICAL)?|[F|f]atal|FATAL|[S|s]evere|SEVERE|EMERG(?:ENCY)?|[Ee]merg(?:ency)?)' negate: true match: after registry_file: /var/lib/filebeat/registry output: logstash: hosts: ["listener.logz.io:5015"] ssl: certificate_authorities: ['/etc/pki/tls/certs/COMODORSADomainValidationSecureServerCA.crt'] processors: - add_host_metadata: ~ - add_cloud_metadata: ~
Một vài điểm cần lưu ý trong việc cấu hình:
- Cần lấy được account token từ ” General settings” trong trang Logz.io ( phía trên góc phải )
- Be sure to use kafka_server as the log type to apply automatic parsing.
Đảm bảo việc bạn sử dụng kiểu log là “kafka_server ” để áp dụng cho việc tự động parsing. - Bạn nên kiểm tra cú pháp YAML trước khi start Filebeat. Bạn có thể sử dụng tool “visual studio code” hoặc các công cụ online để làm điều này.
Lưu file và start Filebeat với:
sudo systemctl start filebeat
Bạn sẽ nhìn thấy log trên server Kafka đang xuất hiện trong Logz.io sau một vài phút:
Vận Chuyển Log Đến Logstash
Để Chuyển Log từ Kafka server đến ELK, bạn có thể sử dụng Filebeat module. Module này sẽ chịu tránh nhiệm thu thập data, parsing và định nghĩa ra các index trong Elasticsearch để hiển thị ra trên Kibana.
Để sử dụng module này, đầu tiên cần định nghĩa đường dẫn chứa log file:
sudo vim /etc/filebeat/modules.d/kafka.yml.disabled
– module: kafka
log: enabled: true #var.kafka_home: var.paths: - "/opt/kafka/logs/server.log"
Enable module và thiết lập môi trường:
sudo filebeat modules enable kafka
sudo filebeat setup -e
Cuối cùng, restart lại Filebeat:
sudo service filebeat restart
Sau một vài phút, trên Kibana, bạn sẽ tìm thấy “filebeat-*” index đã được định nghĩa và Log của Kafka đã được hiển thị.
Phân Tích Data
Vậy, chúng ta tìm kiếm thứ gì ? những gì có thể làm với Kafka server ?
Áp dụng việc parsing vào phân tích log có một vài trường quan trọng, đặc biệt là log level và class của Kafka. Chúng ta có thể sử dụng những trường này để giám sát và khắc phục sự cố trong nhiều trường hợp xảy ra.
Ví dụ, chúng ta có thể tạo một visualization đơn giản để hiển thị nheiefu Kafka server đang chạy:
Hoặc, chúng ta có thể tạo visualizion để hiển thị các kiểu logs khác nhau:
Tương tự, có thể là hiển thị các thành phần của Kafka:
Cuối cùng, bạn sẽ đặt những visualizion đó vào trong một dashboard như từng Kafka server.
Tóm Lại
Giống như bất kỳ các thành phần khác trong ELK, Kafka cũng nên được log và giám sát. Trong Logz.io, chúng ta có thể sử dụng nhiều hệ thống giám sát có nhiều metrics và log để đảm bảo dữ liệu của chúng ta. ELK và Kafka là một sự kết hợp khá tuyệt cho việc trace và troubleshoot trong Production.
Chúc các bạn thành công !
Đăng ký liền tay Nhận Ngay Bài Mới
Subscribe ngay
Cám ơn bạn đã đăng ký !
Lỗi đăng ký !
Add Comment