Kiến Thức Linux Logging

Sử Lý Logs Với Kafka Và ELK

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:

Kafka server

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ị.

Kibana Discover Page

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:

Data visualization

Hoặc, chúng ta có thể tạo visualizion để hiển thị các kiểu logs khác nhau:

Data visualization

Tương tự, có thể là hiển thị các thành phần của Kafka:

Data visualization

Cuối cùng, bạn sẽ đặt những visualizion đó vào trong một dashboard như từng Kafka server.

Data visualization

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ười Viết:
LK

 

Add Comment

Click here to post a comment