Hướng dẫn how do you automate a server health check using python? - làm cách nào để bạn tự động kiểm tra tình trạng máy chủ bằng python?

Vì vậy, bạn đang chạy trang web công cộng và bạn có một cái gì đó như Jenkins Server, nơi bạn có thể thực hiện các chương trình nhỏ và giám sát trạng thái trang web của bạn. Có nhiều giải pháp được trả lương nâng cao cho điều đó, nhưng trong hướng dẫn này, chúng tôi sẽ thử xây dựng ứng dụng đơn giản trong Python.

Điều đầu tiên trước tiên chúng ta cần bố trí các yêu cầu:

  • Yêu cầu URL được chỉ định
  • Nhận phản hồi và kiểm tra mã trạng thái
  • Thật tuyệt khi đo thời gian phản hồi
  • Chúng tôi sẽ cần chạy các yêu cầu theo lịch trình [cứ sau 15 giây]
  • Hãy cảnh giác nếu có sự cố xảy ra

Được rồi, chúng tôi có các yêu cầu của chúng tôi cho phép xem giải pháp:

# health_check.py
import requests
import schedule
import time


def fetch_url[]:
    response = requests.get['//93days.me']
    status_code = response.status_code
    response_time = response.elapsed.total_seconds[]
    if status_code == 200 and response_time < 3:
        print[f'The status code: {status_code}, Response time: {response_time}']
    else:
        print[f'We are in trouble Huston']


schedule.every[15].seconds.do[fetch_url]

while True:
   schedule.run_pending[]
   time.sleep[1]

Bây giờ tất cả còn lại là bắt đầu chương trình, mở ra thiết bị đầu cuối đến thư mục tệp của bạn và chạy:

Đây là những gì xảy ra khi chúng tôi chạy chương trình, trước tiên chúng tôi nhập 3 thư viện [yêu cầu, lịch trình, thời gian]. Trong hàm fetch_url [], chúng tôi yêu cầu đến URL, truy xuất mã trạng thái và thời gian phản hồi [Tôi đã sử dụng phản hồi đã trôi qua ở đây]. Sau đó, chúng tôi có nếu điều kiện khác nơi chúng tôi kiểm tra mã trạng thái với thời gian phản hồi và in tin nhắn dựa trên kết quả. Bây giờ vì chúng tôi có chức năng, chúng tôi cần nói với chương trình tần suất chúng tôi muốn thực hiện cuộc gọi, trong trường hợp của tôi cứ sau 15 giây. Và toàn bộ điều sẽ chạy trong khi các vòng lặp, trong khi điều kiện là đúng.

Như bạn có thể thấy đó là một dự án demo nhỏ, nhưng bạn có thể sáng tạo và thêm thông báo chùng hoặc cảnh báo email. Chúng tôi cũng có thể lưu trữ thời gian phản hồi trong cơ sở dữ liệu và sau đó tạo ra một số biểu đồ đẹp với D3.js hoặc các thư viện tương tự. Tôi hy vọng bạn có ý tưởng và luôn cảm thấy miễn phí đăng bình luận của bạn, các đề xuất trong phần dưới đây.

Trong khi làm việc trong một dự án với EdgedB và Fastapi, tôi muốn thực hiện kiểm tra sức khỏe đối với máy chủ Fastapi trong GitHub CI. Điều này sẽ thông báo cho tôi về trạng thái làm việc của ứng dụng. Ý tưởng là -

  • Chạy máy chủ trong nền.
  • Chạy các lệnh đối với máy chủ sẽ biểu thị rằng ứng dụng đang ở trạng thái hoạt động.
  • Thực hiện dọn dẹp.
  • Thoát với mã 0 Nếu kiểm tra thành công, nếu không thoát với mã 1.

Tập lệnh shell sau đây cho thấy một quy trình công việc tương tự với máy chủ HTTP Python. Kịch bản này ”

  • Chạy một máy chủ web Python trong nền.
  • Thực hiện yêu cầu HTTP đối với máy chủ và kiểm tra xem nó có trả lại HTTP 200 [OK]. Nếu yêu cầu không thành công hoặc máy chủ chưa sẵn sàng thì hãy đợi một giây và thực hiện lại yêu cầu và tiếp tục thử lại trong 20 lần tiếp theo trước khi từ bỏ.
  • Thực hiện dọn dẹp và giết chết các quá trình Python.
  • Thoát với mã 0 Nếu yêu cầu thành công, nếu không thoát với mã 1.

#!/bin/bash

set -euo pipefail

# Run the Python server in the background.
nohup python3 -m http.server 5000 >> /dev/null &

# Give the server enough time to be ready before accepting requests.
c=20
while [[ $c != 0 ]]
do
    # Run the healthcheck.
    if [[ $[curl -I //localhost:5000/ 2>&1] =~ "200 OK" ]]; then
        echo "Health check passed!"

        # ...do additional cleanups if required.
        pkill -9 -i python
        exit 0
    fi
    [[c--]]
    echo "Server isn't ready. Retrying..." $c
    sleep 1
done

echo "Health check failed!"
# ...do additional cleanups if required.
pkill -9 -i python
exit 1

nohup trước python3 -m http.server 5000 đảm bảo rằng tín hiệu SIGHUP không thể tiếp cận máy chủ và tắt quy trình. Ampersand & sau khi lệnh chạy quá trình trong nền. Sau đó, tập lệnh bắt đầu thực hiện các yêu cầu đến URL //localhost:5000/ trong một vòng lặp. Nếu máy chủ trả về HTTP 200, kiểm tra sức khỏe được coi là thành công. Điều này sẽ phá vỡ vòng lặp và tập lệnh sẽ bị chấm dứt với trạng thái exit 0. Nếu máy chủ không trả lại HTTP 200 hoặc chưa sẵn sàng, tập lệnh sẽ tiếp tục thử lại 20 lần với khoảng 1 giây giữa mỗi yêu cầu tiếp theo trước khi từ bỏ. Kiểm tra sức khỏe không thành công sẽ khiến kịch bản chấm dứt với trạng thái exit 1.

Người giới thiệu¶

  • Sự khác biệt giữa Nohup và ampersand và

Bài Viết Liên Quan

Chủ Đề