Đăng nhập Kafka với ngăn xếp ELK


Trịnh Tố Nga
8 tháng trước
Hữu ích 3 Chia sẻ Viết bình luận 0
Đã xem 10167

Kafka và ELK Stack - thường hai cái này là một phần của cùng một giải pháp kiến ​​trúc, Kafka đóng vai trò là bộ đệm trước Logstash để đảm bảo khả năng phục hồi. Bài viết này khám phá một sự kết hợp khác nhau - sử dụng ELK Stack để thu thập và phân tích nhật ký Kafka. 

Thêm về chủ đề:

Như đã giải thích trong  một bài trước , Kafka đóng một vai trò quan trọng trong kiến ​​trúc của chúng tôi. Do đó, chúng tôi đã xây dựng một hệ thống giám sát để đảm bảo dữ liệu được truyền qua các đường ống như mong đợi. Các số liệu hiệu suất chính, như độ trễ và độ trễ, được theo dõi chặt chẽ bằng nhiều quy trình và công cụ khác nhau.

Một yếu tố khác trong hệ thống giám sát này là nhật ký Kafka.

Kafka đã tạo ra nhiều loại tệp nhật ký, nhưng chúng tôi đã tìm thấy nhật ký máy chủ được sử dụng cụ thể. Chúng tôi thu thập các nhật ký này bằng Filebeat, thêm các trường siêu dữ liệu và áp dụng các cấu hình phân tích cú pháp để phân tích mức độ nhật ký và lớp Java.

Trong bài viết này, tôi sẽ cung cấp các hướng dẫn cần thiết để kết nối các máy chủ Kafka của bạn với ELK Stack hoặc Logz.io để bạn có thể thiết lập hệ thống ghi nhật ký của riêng mình cho Kafka. Một vài bước đầu tiên giải thích cách cài đặt Kafka và kiểm tra nó để tạo một số nhật ký máy chủ mẫu, nhưng nếu bạn đã có Kafka và chạy, chỉ cần bỏ qua các bước tiếp theo liên quan đến việc cài đặt ELK Stack và thiết lập đường ống.

Cài đặt Kafka

Cần có Java để chạy cả Kafka và ELK Stack, vì vậy hãy bắt đầu với việc cài đặt Java:

sudo apt-get update
sudo apt-get install default-jre

Tiếp theo, Apache Kafka sử dụng ZooKeeper để duy trì thông tin cấu hình và đồng bộ hóa, vì vậy chúng tôi sẽ cần cài đặt ZooKeeper trước khi thiết lập Kafka:

sudo apt-get install zookeeperd

Theo mặc định, ZooKeeper lắng nghe trên cổng 2181. Bạn có thể kiểm tra bằng cách chạy lệnh sau:

netstat -nlpt | grep ':2181'

Tiếp theo, hãy tải xuống 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

Bây giờ chúng tôi đã sẵn sàng để chạy Kafka, chúng tôi sẽ làm với kịch bản này:

sudo /opt/kafka/bin/kafka-server-start.sh 
/opt/kafka/config/server.properties

Bạn sẽ thấy một danh sách dài các tin nhắn INFO được hiển thị, ở cuối thông báo cho bạn biết rằng Kafka đã được khởi động 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)

Xin chúc mừng, bạn có Kafka và chạy, và nghe trên cổng 9092.

Kiểm tra máy chủ Kafka của bạn

Hãy dùng Kafka để chạy thử đơn giản.

Đầu tiên, tạo chủ đề đầu tiên của bạn với một phân vùng duy nhất và một bản sao (chúng tôi chỉ có một máy chủ Kafka) bằng lệnh sau:

/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 
--replication-factor 1  --partitions 1 --topic danielTest

Bạn sẽ thấy đầu ra sau:

Created topic "danielTest"

Sử dụng trình sản xuất bảng điều khiển, bây giờ chúng tôi sẽ đăng một số thông báo mẫu lên chủ đề Kafka mới tạo của chúng tôi:

/opt/kafka/bin/kafka-console-producer.sh --broker-list 
localhost:9092 --topic danielTest

Trong lời nhắc, nhập một số tin nhắn cho chủ đề:

>This is just a test
>Typing a message
>OK

Trong một tab riêng biệt, bây giờ chúng tôi sẽ chạy lệnh người tiêu dùng Kafka để đọc dữ liệu từ Kafka và hiển thị các thông báo chúng tôi đã gửi đến chủ đề để xuất bản

/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server 
localhost:9092 --topic danielTest --from-beginning

Bạn sẽ thấy các tin nhắn giống như bạn đã gửi cho chủ đề được hiển thị:

This is just a test
Typing a message
OK

Cài đặt ELK Stack

Bây giờ chúng tôi đã chắc chắn rằng cơ chế xuất bản / đăng ký đã hoạt động, hãy cài đặt các thành phần để đăng nhập nó - Elaticsearch, Kibana và Filebeat.

Bắt đầu bằng cách tải xuống và cài đặt khóa ký công khai Đàn hồi:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo 
apt-key add -

Thêm định nghĩa kho lưu trữ:

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 hệ thống và cài đặt Elaticsearch:

sudo apt-get update && sudo apt-get install elasticsearch

Chạy Elaticsearch bằng cách sử dụng:

sudo service elasticsearch start

Bạn có thể chắc chắn rằng Elaticsearch đang chạy bằng cách sử dụng cURL sau:

curl "http://localhost:9200"

Bạn sẽ thấy một đầu ra tương tự như thế này:

{
  "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, chúng tôi sẽ cài đặt Kibana với:

sudo apt-get install kibana

Mở tệp cấu hình Kibana tại:  /etc/kibana/kibana.yml và đảm bảo bạn có cấu hình sau được xác định:

server.port: 5601
elasticsearch.url: "http://localhost:9200"

Và, bắt đầu Kibana với:

sudo service kibana start

Để cài đặt Filebeat, sử dụng:

sudo apt install filebeat

Cấu hình đường ống

Tôi sẽ mô tả hai phương thức vận chuyển nhật ký Kafka vào ELK Stack - một phương pháp nếu bạn đang sử dụng Logz.io, phương pháp khác để chuyển chúng vào triển khai ELK của riêng bạn.

Vận chuyển vào Logz.io

Để gửi dữ liệu vào Logz.io, một số điều chỉnh được yêu cầu trong tệp cấu hình Filebeat. Vì người nghe của chúng tôi xử lý phân tích cú pháp, không cần sử dụng Logstash trong trường hợp này.

Trước tiên, bạn sẽ cần tải xuống chứng chỉ SSL để sử dụng mã hóa:

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/

Các tập tin cấu hình sẽ 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 lưu ý về cấu hình:

  • Mã thông báo tài khoản Logz.io của bạn có thể được truy xuất từ ​​trang Cài đặt chung trong Logz.io (nhấp vào bánh răng ở góc trên bên phải).
  • Hãy chắc chắn sử dụng  kafka_server  làm loại nhật ký để áp dụng phân tích cú pháp tự động.
  • Tôi khuyên bạn nên xác minh YAML trước khi bắt đầu Filebeat. Bạn có thể sử dụng  công cụ trực tuyến này . Hoặc, bạn có thể sử dụng trình hướng dẫn Filebeat để tự động tạo tệp YAML (có sẵn trong phần Filebeat, bên dưới Nhật ký vận chuyển trong giao diện người dùng). 

Lưu tệp và bắt đầu Filebeat với:

sudo service filebeat start

Bạn sẽ bắt đầu thấy nhật ký máy chủ Kafka của mình xuất hiện trong Logz.io sau một hoặc hai phút:

Vận chuyển vào ELK

Để gửi nhật ký máy chủ Kafka vào ELK của riêng bạn, bạn có thể sử dụng mô-đun Kafka Filebeat. Mô-đun thu thập dữ liệu, phân tích cú pháp và xác định mẫu chỉ mục Elaticsearch trong Kibana.

Để sử dụng mô-đun, trước tiên hãy xác định đường dẫn đến tệp nhật ký:

sudo vim /etc/filebeat/modules.d/kafka.yml.disabled
 
- module: kafka
   log:
    enabled: true
    #var.kafka_home:
    var.paths:
      - "/opt/kafka/logs/server.log"

Kích hoạt mô-đun và thiết lập môi trường với:

sudo filebeat modules enable kafka
sudo filebeat setup -e

Cuối cùng nhưng không kém phần quan trọng, khởi động lại Filebeat với:

sudo service filebeat restart

Sau một hoặc hai phút, mở Kibana, bạn sẽ thấy rằng một chỉ số filebeat- * chỉ số được xác định và nhật ký máy chủ Kafka được hiển thị trên trang Khám phá:

Phân tích dữ liệu

Vậy - chúng ta đang tìm kiếm cái gì? Có thể làm gì với nhật ký máy chủ Kafka?

Việc phân tích cú pháp được áp dụng cho các bản ghi sẽ phân tích một số trường quan trọng - cụ thể là mức nhật ký và lớp Kafka và thành phần nhật ký tạo nhật ký. Chúng tôi có thể sử dụng các trường này để theo dõi và khắc phục sự cố Kafka theo nhiều cách khác nhau.

Ví dụ: chúng ta có thể tạo một trực quan đơn giản để hiển thị số lượng máy chủ Kafka chúng ta đang chạy:

Hoặc chúng ta có thể tạo một trực quan hóa cho chúng ta phân tích các bản ghi khác nhau, theo cấp độ:

Tương tự như vậy, chúng ta có thể tạo ra một hình ảnh hiển thị phân tích các thành phần Kafka dài dòng hơn:

Cuối cùng, bạn sẽ đặt những hình ảnh trực quan này và các hình ảnh khác vào một bảng điều khiển để theo dõi các trường hợp Kafka của bạn:

Chú thích

Cũng giống như bất kỳ thành phần nào khác trong ngăn xếp của bạn, Kafka nên được ghi lại và theo dõi. Tại Logz.io, chúng tôi sử dụng hệ thống giám sát nhiều tầng bao gồm các số liệu và nhật ký để đảm bảo các đường ống dữ liệu của chúng tôi hoạt động như mong đợi.

Như đã đề cập, nhật ký máy chủ Kafka chỉ là một loại nhật ký mà Kafka tạo ra, vì vậy bạn có thể muốn khám phá vận chuyển các loại khác vào ELK để phân tích. Dù bằng cách nào, ELK là một công cụ phân tích mạnh mẽ để đứng về phía bạn khi gặp khó khăn.

Bảng điều khiển ở trên có sẵn để sử dụng trong Ứng dụng ELK - Thư viện bảng điều khiển và trực quan hóa của Logz.io. Để triển khai nó, chỉ cần mở Ứng dụng ELK và tìm kiếm cho Kafka.

Hữu ích 3 Chia sẻ Viết bình luận 0
Đã xem 10167