HomeLập trìnhPythonCách sử dụng...

Cách sử dụng Elaticsearch, Logstash và Kibana để trực quan hóa nhật ký trong Python trong thời gian thực


bởi Ritvik Khanna

0*RI4JzqOuAPDtLRsq
nguồn

Ghi nhật ký là gì?

Giả sử bạn đang phát triển một sản phẩm phần mềm. Nó hoạt động từ xa, tương tác với các thiết bị khác nhau, thu thập dữ liệu từ các cảm biến và cung cấp dịch vụ cho người dùng. Một ngày nọ, xảy ra sự cố và hệ thống không hoạt động như mong đợi. Nó có thể không nhận dạng được thiết bị hoặc không nhận được bất kỳ dữ liệu nào từ cảm biến hoặc có thể vừa gặp lỗi thời gian chạy do lỗi trong mã. Làm thế nào bạn có thể biết chắc chắn?

Bây giờ, hãy tưởng tượng nếu có các điểm kiểm tra trong mã hệ thống, tại đó, nếu hệ thống trả về một kết quả không mong muốn, nó chỉ cần đánh dấu kết quả đó và thông báo cho nhà phát triển. Đây là khái niệm về đăng nhập.

Ghi nhật ký cho phép các nhà phát triển hiểu mã thực sự đang làm gì và quy trình công việc diễn ra như thế nào. Phần lớn cuộc sống của các nhà phát triển phần mềm là giám sát, khắc phục sự cố và gỡ lỗi. Ghi nhật ký làm cho quá trình này trở nên dễ dàng và mượt mà hơn nhiều.

Trực quan hóa các bản ghi

0*-sOdBVARaJLNvu17
nguồn

Bây giờ, nếu bạn là một nhà phát triển chuyên gia đã phát triển và tạo phần mềm trong một thời gian dài, thì bạn sẽ nghĩ rằng việc ghi nhật ký không phải là vấn đề lớn và hầu hết mã của chúng tôi được bao gồm trong một Debug.Log('____') bản tường trình. Chà, điều đó thật tuyệt nhưng có một số khía cạnh khác của việc ghi nhật ký mà chúng ta có thể tận dụng.

Trực quan hóa dữ liệu đã ghi cụ thể có các lợi ích sau:

  • Giám sát hoạt động của hệ thống từ xa.
  • Truyền đạt thông tin rõ ràng và hiệu quả thông qua đồ họa thống kê, sơ đồ và đồ họa thông tin.
  • Trích xuất kiến ​​thức từ dữ liệu được hiển thị dưới dạng các biểu đồ khác nhau.
  • Thực hiện các hành động cần thiết để cải thiện hệ thống.

Có một số cách chúng ta có thể trực quan hóa dữ liệu thô. Có một số thư viện trong ngôn ngữ lập trình Python và R có thể trợ giúp trong việc vẽ biểu đồ. Bạn có thể tìm hiểu thêm về nó đây. Nhưng trong bài đăng này, tôi sẽ không thảo luận về các phương pháp được đề cập ở trên. Bạn đã bao giờ nghe nói về ngăn xếp ELK?

ngăn xếp ELK

E — ElaticsearchL — nhật ký, K — kibana

Hãy để tôi giới thiệu ngắn gọn về nó. Ngăn xếp ELK là một tập hợp gồm ba phần mềm nguồn mở giúp cung cấp thông tin chi tiết theo thời gian thực về dữ liệu có thể có cấu trúc hoặc không có cấu trúc. Người ta có thể tìm kiếm và phân tích dữ liệu bằng các công cụ của nó một cách cực kỳ dễ dàng và hiệu quả.

Đọc thêm  Chuỗi so sánh Python – Cách kiểm tra sự bằng nhau của chuỗi

Elaticsearch là một công cụ phân tích và tìm kiếm RESTful phân tán, có khả năng giải quyết số lượng trường hợp sử dụng ngày càng tăng. Là trung tâm của Ngăn xếp đàn hồi, nó lưu trữ tập trung dữ liệu của bạn để bạn có thể khám phá những điều mong đợi và khám phá những điều không mong đợi. Elaticsearch cho phép bạn thực hiện và kết hợp nhiều loại tìm kiếm — có cấu trúc, không cấu trúc, địa lý, số liệu, v.v. Nó được xây dựng trên ngôn ngữ lập trình Java, cho phép Elaticsearch chạy trên các nền tảng khác nhau. Nó cho phép người dùng khám phá lượng dữ liệu rất lớn ở tốc độ rất cao.

nhật ký là một đường dẫn xử lý dữ liệu phía máy chủ, mã nguồn mở, nhập dữ liệu từ vô số nguồn đồng thời, biến đổi dữ liệu và sau đó gửi dữ liệu đó đến “kho lưu trữ” yêu thích của bạn (như Elaticsearch). Dữ liệu thường nằm rải rác hoặc bị cô lập trên nhiều hệ thống ở nhiều định dạng. Logstash hỗ trợ nhiều loại đầu vào kéo các sự kiện từ vô số nguồn chung vào cùng một lúc. Dễ dàng nhập từ nhật ký, số liệu, ứng dụng web, kho lưu trữ dữ liệu và các dịch vụ AWS khác nhau của bạn, tất cả đều theo kiểu phát trực tuyến, liên tục. Logstash có một khung có thể cắm được với hơn 200 plugin. Trộn, kết hợp và sắp xếp các đầu vào, bộ lọc và đầu ra khác nhau để hoạt động hài hòa trong đường ống.

kibana là một nền tảng phân tích và trực quan mã nguồn mở được thiết kế để hoạt động với Elaticsearch. Bạn sử dụng Kibana để tìm kiếm, xem và tương tác với dữ liệu được lưu trữ trong các chỉ số Elaticsearch. Bạn có thể dễ dàng thực hiện phân tích dữ liệu nâng cao và trực quan hóa dữ liệu của mình trong nhiều biểu đồ, bảng và bản đồ. Kibana giúp dễ dàng hiểu khối lượng dữ liệu lớn. Giao diện đơn giản, dựa trên trình duyệt của nó cho phép bạn nhanh chóng tạo và chia sẻ bảng điều khiển động hiển thị các thay đổi đối với truy vấn Elaticsearch trong thời gian thực.

Để hiểu rõ hơn về quy trình làm việc về cách ba phần mềm tương tác với nhau, hãy tham khảo sơ đồ sau:

1*OHP01Lidop3GQZbnwg9s4Q
nguồn

Thực hiện

Đăng nhập bằng Python

Ở đây, tôi chọn giải thích việc triển khai đăng nhập bằng Python vì đây là ngôn ngữ được sử dụng nhiều nhất cho các dự án liên quan đến giao tiếp giữa nhiều máy và internet vạn vật. Nó sẽ giúp cung cấp cho bạn một ý tưởng tổng thể về cách thức hoạt động của nó.

Python cung cấp một hệ thống ghi nhật ký như một phần của thư viện tiêu chuẩn của nó, vì vậy bạn có thể nhanh chóng thêm ghi nhật ký vào ứng dụng của mình.

import logging

Trong Python, việc ghi nhật ký có thể được thực hiện ở 5 cấp độ khác nhau, mỗi cấp độ tương ứng chỉ ra loại sự kiện. Có như sau:

  • Thông tin — Chỉ định các thông báo thông tin làm nổi bật tiến trình của ứng dụng ở cấp độ chi tiết.
  • gỡ lỗi — Chỉ định các sự kiện thông tin chi tiết hữu ích nhất để gỡ lỗi ứng dụng.
  • Cảnh báo – Chỉ định các tình huống có khả năng gây hại.
  • Lỗi — Chỉ định các sự kiện lỗi vẫn có thể cho phép ứng dụng tiếp tục chạy.
  • Bạo kích — Chỉ định các sự kiện lỗi rất nghiêm trọng có thể dẫn đến việc hủy bỏ ứng dụng.
Đọc thêm  Toán tử Python – Toán tử logic trong Python

Do đó tùy theo sự cố cần ghi nhật ký mà ta sử dụng mức xác định cho phù hợp.

Ghi chú: Thông tin và Gỡ lỗi không được ghi theo mặc định vì chỉ ghi nhật ký ở cấp độ Cảnh báo trở lên.

Bây giờ để đưa ra một ví dụ và tạo một tập hợp các câu lệnh nhật ký để trực quan hóa, tôi đã tạo một tập lệnh Python ghi lại các câu lệnh có định dạng cụ thể và một thông báo.

import logging
import random

logging.basicConfig(filename="logFile.txt",
                    filemode="a",
                    format="%(asctime)s %(levelname)s-%(message)s",
                    datefmt="%Y-%m-%d %H:%M:%S")
for i in xrange(0,15):
    x=random.randint(0,2)
    if(x==0):
        logging.warning('Log Message')
    elif(x==1):
        logging.critical('Log Message')
    else:
        logging.error('Log Message')
log_gen.py

Tại đây, các câu lệnh nhật ký sẽ nối vào một tệp có tên logFile.txt trong định dạng được chỉ định. Tôi đã chạy tập lệnh trong ba ngày ở các khoảng thời gian khác nhau để tạo một tệp chứa nhật ký ngẫu nhiên như bên dưới:

2019-01-09 09:01:05,333 ERROR-Log Message
2019-01-09 09:01:05,333 WARNING-Log Message
2019-01-09 09:01:05,333 ERROR-Log Message
2019-01-09 09:01:05,333 CRITICAL-Log Message
2019-01-09 09:01:05,333 WARNING-Log Message
2019-01-09 09:01:05,333 ERROR-Log Message
2019-01-09 09:01:05,333 ERROR-Log Message
2019-01-09 09:01:05,333 WARNING-Log Message
2019-01-09 09:01:05,333 WARNING-Log Message
2019-01-09 09:01:05,333 ERROR-Log Message
2019-01-09 09:01:05,333 CRITICAL-Log Message
2019-01-09 09:01:05,333 CRITICAL-Log Message
2019-01-09 09:01:05,333 CRITICAL-Log Message
2019-01-09 11:07:05,333 ERROR-Log Message
2019-01-09 11:07:05,333 WARNING-Log Message
2019-01-09 11:07:05,333 ERROR-Log Message
2019-01-09 11:07:05,333 ERROR-Log Message
2019-01-09 11:07:05,333 WARNING-Log Message
2019-01-09 11:07:05,333 CRITICAL-Log Message
2019-01-09 11:07:05,333 WARNING-Log Message
2019-01-09 11:07:05,333 ERROR-Log Message
logFile.txt

Thiết lập Elaticsearch, Logstash và Kibana

Lúc đầu, hãy tải xuống ba phần mềm mã nguồn mở từ các liên kết tương ứng của chúng [elasticsearch],[logstash]và[kibana]. Giải nén các tệp và đặt cả ba tệp vào thư mục dự án.

Bắt đầu nào.

Bước 1 — Thiết lập Kibana và Elaticsearch trên hệ thống cục bộ. Chúng tôi chạy Kibana bằng lệnh sau trong thư mục bin của Kibana.

bin\kibana

Tương tự, Elaticsearch được thiết lập như thế này:

bin\elasticsearch

Bây giờ, trong hai thiết bị đầu cuối riêng biệt, chúng ta có thể thấy cả hai mô-đun đang chạy. Để kiểm tra xem các dịch vụ có đang chạy mở không máy chủ cục bộ:5621máy chủ cục bộ:9600.

Sau khi cả hai dịch vụ đều chạy thành công, chúng tôi sử dụng các chương trình Logstash và Python để phân tích dữ liệu nhật ký thô và chuyển nó tới Elaticsearch từ đó Kibana truy vấn dữ liệu.

Bước 2— Bây giờ hãy tiếp tục với Logstash. Trước khi bắt đầu Logstash, tệp cấu hình Logstash được tạo trong đó chỉ định chi tiết về tệp đầu vào, vị trí đầu ra và phương pháp lọc.

input{
 file{
 path => "full/path/to/log_file/location/logFile.txt"
 start_position => "beginning"
 }
}
filter
{
 grok{
 match => {"message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:log-level}-%{GREEDYDATA:message}"}
 }
    date {
    match => ["timestamp", "ISO8601"]
  }
}
output{
 elasticsearch{
 hosts => ["localhost:9200"]
 index => "index_name"}
stdout{codec => rubydebug}
}
logstash-simple.conf

Tệp cấu hình này đóng vai trò chính trong ngăn xếp ELK. Hãy xem bộ lọc{grok{…}} dòng. Đây là một plugin bộ lọc Grok. Grok là một cách tuyệt vời để phân tích dữ liệu nhật ký phi cấu trúc thành thứ gì đó có cấu trúc và có thể truy vấn được. Công cụ này hoàn hảo cho nhật ký nhật ký hệ thống, apache và các nhật ký máy chủ web khác, nhật ký mysql và nói chung, bất kỳ định dạng nhật ký nào thường được viết cho con người chứ không phải máy tính. Mẫu grok này được đề cập trong mã cho Logstash biết cách phân tích từng mục nhập dòng trong tệp nhật ký của chúng tôi.

Đọc thêm  Python Convert String to Int – Cách truyền chuỗi trong Python

Bây giờ hãy lưu tệp trong thư mục Logstash và khởi động dịch vụ Logstash.

bin\logstash –f logstash-simple.conf

Để tìm hiểu thêm về cách định cấu hình logstash, hãy nhấp vào [here].

Bước 3 — Sau đó, dữ liệu được phân tích cú pháp từ các tệp nhật ký sẽ có sẵn trong phần quản lý Kibana tại máy chủ cục bộ:5621 để tạo các hình ảnh và bảng điều khiển khác nhau. Để kiểm tra xem Kibana có nhận được dữ liệu nào không, trong tab quản lý của Kibana, hãy chạy lệnh sau:

localhost:9200/_cat/indices?v

Điều này sẽ hiển thị tất cả các chỉ mục. Đối với mọi hình ảnh trực quan hóa, một mẫu Chỉ mục mới phải được chọn từ các công cụ dành cho nhà phát triển, sau đó các kỹ thuật trực quan hóa khác nhau được sử dụng để tạo trang tổng quan.

Bảng điều khiển sử dụng Kibana

Sau khi thiết lập mọi thứ, bây giờ là lúc tạo biểu đồ để trực quan hóa dữ liệu nhật ký.

Sau khi mở trang chủ quản lý Kibana, chúng tôi sẽ được yêu cầu tạo một mẫu chỉ mục mới. đi vào index_name* bên trong Trường mẫu chỉ mục và chọn dấu thời gian @ bên trong Trường bộ lọc thời gian menu thả xuống tên.

1*vgcx_wyDnpKiHuQNQZn_pw

Bây giờ để tạo biểu đồ, chúng ta vào phần hình dung chuyển hướng.

Chọn một trực quan hóa mới, chọn một loại biểu đồ và tên chỉ mục, và tùy thuộc vào yêu cầu trục của bạn, hãy tạo một biểu đồ. Chúng ta có thể tạo một biểu đồ với trục y như đếmtrục x với từ khóa cấp nhật ký hoặc là dấu thời gian.

1*Yt0dS1APsC5DRb33SkcDYA
Tạo biểu đồ

Sau khi tạo một vài biểu đồ, chúng ta có thể thêm tất cả các hình ảnh trực quan cần thiết và tạo một bảng điều khiểnnhư dưới đây:

1*sLN0wwMyVaK0YtWB3aI8TQ

Lưu ý — Bất cứ khi nào nhật ký trong tệp nhật ký được cập nhật hoặc thêm vào nhật ký trước đó, miễn là ba dịch vụ đang chạy dữ liệu trong elaticsearch và đồ thị trong kibana sẽ tự động cập nhật theo dữ liệu mới.

kết thúc

Ghi nhật ký có thể là một trợ giúp trong việc chống lại lỗi và gỡ lỗi chương trình thay vì sử dụng câu lệnh in. Mô-đun ghi nhật ký phân chia các thông báo theo các cấp độ khác nhau. Điều này dẫn đến hiểu rõ hơn về mã và cách luồng cuộc gọi diễn ra mà không làm gián đoạn chương trình.

Trực quan hóa dữ liệu là một bước cần thiết trong các tình huống mà một lượng dữ liệu khổng lồ được tạo ra trong mỗi khoảnh khắc. Các công cụ và kỹ thuật trực quan hóa dữ liệu cung cấp cho các giám đốc điều hành và những người lao động tri thức khác những cách tiếp cận mới để cải thiện đáng kể khả năng nắm bắt thông tin ẩn trong dữ liệu của họ. Nhận dạng nhanh các bản ghi lỗi, dễ hiểu dữ liệu và hình ảnh dữ liệu có thể tùy chỉnh cao là một số lợi thế. Đây là một trong những cách tổ chức dữ liệu thô mang tính xây dựng nhất.

Để tham khảo thêm, bạn có thể tham khảo tài liệu ELK chính thức từ đây — https://www.elastic.co/learn và khi đăng nhập bằng python — https://docs.python.org/2/library/logging.html



Zik.vn – Biên dịch & Biên soạn Lại

spot_img

Create a website from scratch

Just drag and drop elements in a page to get started with Newspaper Theme.

Buy Now ⟶

Bài viết liên quang

DMCA.com Protection Status