Đôi khi, chúng tôi cần một cách để thông báo bằng cách sử dụng điểm cuối HTTP về mức độ sẵn sàng của dịch vụ nhưng dịch vụ không cung cấp bất kỳ điều nào trong số này. Ví dụ: một bản sao MySQL mà chúng tôi cần vào và ra khỏi nhóm tùy thuộc vào độ trễ của nó hoặc nút công nhân mà chúng tôi muốn xóa khỏi nhóm đó tùy thuộc vào mức sử dụng CPU của nó
Nếu chúng tôi có một lệnh sẽ cho chúng tôi biết liệu dịch vụ đã sẵn sàng chấp nhận kết nối hay chưa, chúng tôi có thể sử dụng healthcheckd để tạo điểm cuối HTTP để xuất bản nó
Công cụ này là thứ mà chúng ta có thể cài đặt dễ dàng trên bất kỳ máy chủ hoặc bộ chứa nào, các phụ thuộc duy nhất là pid [để xử lý việc tạo tệp PID] và configparser [để đọc tệp cấu hình ini]. Nó sử dụng http của python. máy chủ để xử lý các yêu cầu HTTP
Để định cấu hình, chúng ta chỉ cần tạo một tệp cấu hình với lệnh mà chúng ta muốn sử dụng, ví dụ: nếu chúng ta sử dụng lệnh sau, lệnh này sẽ chỉ trả về 0 nếu chữ số cuối cùng của biến RANDOM của bash lớn hơn 5
Chúng ta có thể cấu hình nó như vậy
[healthcheckd]
pidfile = demo.pid
port = 9999
command = "test ${RANDOM: -1} -ge 5"
Và cuối cùng chạy máy chủ web bằng cấu hình này
python3 healthcheckd.py ./random_example.config
Bây giờ chúng tôi sử dụng run curl to localhost bằng cách sử dụng cổng đã định cấu hình, chúng tôi sẽ nhận được một kết quả khác tùy thuộc vào giá trị của biến RANDOM
$ curl -I localhost:9999
HTTP/1.0 200 OK
Server: BaseHTTP/0.6 Python/3.8.10
Date: Tue, 26 Oct 2021 15:41:04 GMT
Content-type: text/html
$ curl -I localhost:9999
HTTP/1.0 503 Service Unavailable
Server: BaseHTTP/0.6 Python/3.8.10
Date: Tue, 26 Oct 2021 15:41:05 GMT
Content-type: text/html
$ curl -I localhost:9999
HTTP/1.0 200 OK
Server: BaseHTTP/0.6 Python/3.8.10
Date: Tue, 26 Oct 2021 15:41:06 GMT
Content-type: text/html
$ curl -I localhost:9999
HTTP/1.0 503 Service Unavailable
Server: BaseHTTP/0.6 Python/3.8.10
Date: Tue, 26 Oct 2021 15:41:06 GMT
Content-type: text/html
$ curl -I localhost:9999
HTTP/1.0 503 Service Unavailable
Server: BaseHTTP/0.6 Python/3.8.10
Date: Tue, 26 Oct 2021 15:41:07 GMT
Content-type: text/html
[...]
Để có điểm cuối sức khỏe, chúng ta chỉ cần thay đổi tập lệnh để chạy thành thứ gì đó trả về 0 khi chúng ta muốn chấp nhận kết nối hoặc bất kỳ mã trả về nào khác khi chúng ta không
Phân tích sâu hơn về trạng thái bảo trì của aio-tiny-healthcheck dựa trên nhịp phiên bản PyPI đã phát hành, hoạt động của kho lưu trữ và các điểm dữ liệu khác đã xác định rằng việc bảo trì của nó là Không hoạt động
Một tín hiệu bảo trì dự án quan trọng cần xem xét đối với aio-tiny-healthcheck là nó không thấy bất kỳ phiên bản mới nào được phát hành cho PyPI trong 12 tháng qua và có thể được coi là dự án đã ngừng hoạt động hoặc dự án ít nhận được sự quan tâm từ những người bảo trì dự án.
Trong tháng trước, chúng tôi không tìm thấy bất kỳ hoạt động yêu cầu kéo nào hoặc thay đổi trạng thái vấn đề đã được phát hiện đối với kho lưu trữ GitHub
Xây dựng kiểm tra sức khỏe là một nhiệm vụ phổ biến khi xây dựng máy chủ web. Bạn có thể đã thấy các trang trạng thái, chẳng hạn như trạng thái Github, nơi chúng tôi có thể xem thời gian cập nhật của từng dịch vụ được cung cấp. Trong bài viết này, chúng ta sẽ tìm hiểu cách tạo điểm cuối kiểm tra sức khỏe cơ bản trong Python
Bước đầu tiên để xây dựng một tính năng như thế này có thể là một lộ trình sức khỏe đơn giản, sau đó chúng ta có thể kết hợp điều này với bộ đếm số liệu để ghi lại thời gian lên và xuống. Chúng tôi cũng có thể thêm cảnh báo khi dịch vụ của chúng tôi ngừng hoạt động. Trong các bài viết sau, chúng ta sẽ khám phá thêm các tính năng này. Hãy bắt đầu với một vài điều cơ bản
Cài đặt các mô-đun
Đối với dự án này, chúng tôi sẽ chỉ xây dựng một dịch vụ http cơ bản và cuối cùng chúng tôi sẽ kết nối với DB của mình để đảm bảo dịch vụ được kết nối đầy đủ. Để làm điều này, hãy cài đặt như sau
pip install flask psycopg2
Điểm cuối sức khỏe cơ bản
Hãy bắt đầu bằng cách tạo một điểm cuối đơn giản có tên là /health
mà chúng ta có thể ping. Điểm cuối này sẽ chỉ trả về trạng thái 200. Nếu chúng tôi không nhận được trạng thái 200, chúng tôi có thể cho rằng máy chủ đang ngừng hoạt động
from flask import Flask
app = Flask[__name__]
@app.route["/health"]
def health[]:
return
if __name__ == "__main__":
app.run[]
Kiểm tra sức khỏe
Bây giờ, để ping dịch vụ, chúng ta có thể cuộn tròn như vậy
curl //localhost:3000/health
Trong thực tế, rất có thể chúng tôi sẽ có một dịch vụ định kỳ sẽ ping dịch vụ này trong một khoảng thời gian, ghi lại kết quả để chúng tôi có thể xem số liệu thống kê sau và gửi thông báo nếu có thời gian ngừng hoạt động. Trong một bài viết sau, chúng tôi sẽ xây dựng điều này
Thêm nhiều hơn để kiểm tra sức khỏe
Hãy thêm một chút chi tiết kiểm tra sức khỏe của chúng tôi. Bạn có thể nhận được phức tạp hoặc đơn giản như bạn muốn ở đây. Độ phức tạp sẽ phụ thuộc vào loại báo cáo sức khỏe bạn muốn. Ví dụ: giả sử chúng tôi có cơ sở dữ liệu postgres. Để coi dịch vụ của chúng tôi là "lành mạnh", chúng tôi cũng muốn xác nhận rằng chúng tôi có thể truy vấn cơ sở dữ liệu. Hãy thêm vào như sau