Cảnh báo: Lỗi dựa trên nhật ký đối với chủ đề Pub/Sub

1. Giới thiệu

Lần cập nhật gần đây nhất: Ngày 21 tháng 6 năm 2023

Cảnh báo về lỗi dựa trên nhật ký đối với tính khả dụng

Bạn có thể sử dụng cảnh báo dựa trên nhật ký để xác định tính sẵn có của ứng dụng bằng cách theo dõi các sự kiện hoặc mẫu cụ thể trong nhật ký*.* Khi nhận được cảnh báo về sự cố ngừng hoạt động hoặc các vấn đề khác mà người dùng gặp phải, bạn có thể thực hiện các bước để giảm thiểu tác động đến người dùng và khách hàng.

Mặc dù các lượt kiểm tra thời gian hoạt động cung cấp thông tin tổng quan về tính sẵn có, nhưng có thể chính xác hơn nếu bạn sử dụng thông báo lỗi lấy từ nhật ký làm chỉ báo cho các loại trạng thái không hoạt động cụ thể hơn và để biết tỷ lệ người dùng gặp phải vấn đề.

Lỗi có thể phát sinh do nhiều nguyên nhân, từ lỗi của người dùng đến việc bảo trì, nâng cấp hệ thống và thậm chí cả các yếu tố bên ngoài hệ thống, chẳng hạn như thời tiết xấu. Điều quan trọng trong việc cảnh báo là không cố gắng dự đoán tất cả các nguyên nhân có thể xảy ra, mà thay vào đó, hãy chọn một vài triệu chứng chính có thể đóng vai trò là điểm bắt đầu để khắc phục sự cố.

Chủ đề Pub/Sub làm kênh thông báo cảnh báo

Bạn có thể sử dụng một chủ đề Pub/Sub làm kênh thông báo của Google Cloud Monitoring để gửi cảnh báo đến một gói thuê bao Pub/Sub. Điều này cho phép bạn tích hợp các cảnh báo của Cloud Monitoring với các hệ thống khác, bao gồm cả dịch vụ thông báo của bên thứ ba.

Để sử dụng một chủ đề Pub/Sub làm kênh thông báo, trước tiên, bạn cần tạo một chủ đề Pub/Sub và một gói thuê bao Pub/Sub. Sau đó, bạn cần tạo một kênh thông báo Cloud Monitoring sử dụng chủ đề Pub/Sub làm đích đến.

Khi một cảnh báo được kích hoạt, Cloud Monitoring sẽ gửi một thông báo đến chủ đề Pub/Sub. Sau đó, người đăng ký gói thuê bao Pub/Sub có thể xử lý thông báo và thực hiện hành động thích hợp.

Sản phẩm bạn sẽ tạo ra

Trong lớp học lập trình này, bạn sẽ triển khai một ứng dụng, tạo một chủ đề Pub/Sub và tạo một cảnh báo dựa trên nhật ký để kiểm tra lỗi trong một phần cụ thể của ứng dụng và sử dụng chủ đề Pub/Sub làm kênh thông báo.

Kiến thức bạn sẽ học được

  • Cách tạo một chủ đề Pub/Sub
  • Cách tạo cảnh báo dựa trên nhật ký

Lớp học lập trình này tập trung vào việc tạo cảnh báo cho các lỗi. Các khái niệm không liên quan và mã xử lý ứng dụng được tinh chỉnh và cung cấp cho bạn, chỉ cần sao chép và dán.

Bạn cần có

  • Tài khoản Google Cloud có các quyền sau:
  • Triển khai ứng dụng Cloud Run
  • Tạo chủ đề Pub/Sub
  • Tạo thông báo

2. Thiết lập

Chọn hoặc tạo một dự án trên Google Cloud

Để chọn một dự án hiện có, hãy sử dụng trình đơn thả xuống:

b35bf95b8bf3d5d8.png

Để tạo một dự án mới trong Google Cloud, bạn có thể làm theo các bước sau:

  1. Truy cập vào Bảng điều khiển Google Cloud Platform.
  2. Nhấp vào nút Tạo dự án.
  3. Nhập tên cho dự án của bạn.
  4. Chọn một tài khoản thanh toán cho dự án của bạn.
  5. Nhấp vào nút Tạo.

Dự án của bạn sẽ được tạo và bạn sẽ được chuyển đến trang tổng quan về dự án. Từ đó, bạn có thể bắt đầu sử dụng các dịch vụ của Google Cloud.

Dưới đây là một số thông tin chi tiết khác về từng bước:

  • Tên: Tên dự án phải là duy nhất trong tổ chức của bạn.
  • Tài khoản thanh toán: Bạn có thể sử dụng tài khoản thanh toán hiện có hoặc tạo một tài khoản thanh toán mới.
  • Tạo: Sau khi bạn nhập tất cả thông tin bắt buộc, hãy nhấp vào nút Tạo để tạo dự án.

Để biết thêm thông tin, vui lòng xem tài liệu của Google Cloud về cách tạo dự án.

3. Triển khai Ứng dụng API

Ứng dụng hoặc API mẫu này là gì?

Ứng dụng của chúng tôi là một ứng dụng API Kho hàng đơn giản, hiển thị một điểm cuối API REST với một số thao tác để liệt kê các mặt hàng trong kho và nhận số lượng hàng tồn kho của một mặt hàng cụ thể.

Sau khi triển khai API và giả sử API này được lưu trữ tại https://<somehost>, chúng ta có thể truy cập vào các điểm cuối API như sau:

https://<somehost>/inventory

Thao tác này sẽ liệt kê tất cả các mặt hàng có số lượng hàng tồn kho hiện có.

https://<somehost>/inventory/{productid}

Thao tác này sẽ cung cấp một bản ghi duy nhất có productid và mức tồn kho hiện có của sản phẩm đó.

Dữ liệu phản hồi được trả về ở định dạng JSON.

Lưu ý: Ứng dụng API này chỉ nhằm mục đích minh hoạ và không thể hiện một cách triển khai API an toàn và mạnh mẽ. Mục đích của việc này là để chúng tôi có thể nhanh chóng sử dụng ứng dụng, khám phá mục đích chính của phòng thí nghiệm, tức là Google Cloud Operations.

Dữ liệu mẫu và yêu cầu/phản hồi API

Ứng dụng này không được hỗ trợ bởi cơ sở dữ liệu ở phần phụ trợ để quy trình được đơn giản. Tệp này chứa 3 mã sản phẩm mẫu và số lượng hàng tồn kho của các sản phẩm đó.

Id Sản phẩm

Lượng hàng trong kho

I-1

10

I-2

20

I-3

30

Yêu cầu và phản hồi API mẫu được trình bày bên dưới:

Yêu cầu API

Phản hồi của API

https://<somehost>/inventory

[ { "I-1": 10, "I-2": 20, "I-3": 30 }]

https://<somehost>/inventory/I-1

{ "productid": "I-1", "qty": 10}

https://<somehost>/inventory/I-2

{ "productid": "I-2", "qty": 20}

https://<somehost>/inventory/I-200

{ "productid": I-200, "qty": -1}

Sao chép Kho lưu trữ

Mặc dù có thể vận hành Google Cloud từ xa trên máy tính xách tay, nhưng trong lớp học lập trình này, bạn sẽ sử dụng Google Cloud Shell, một môi trường dòng lệnh chạy trên Cloud.

Trên Bảng điều khiển GCP, hãy nhấp vào biểu tượng Cloud Shell trên thanh công cụ ở trên cùng bên phải:

bce75f34b2c53987.png

Quá trình này chỉ mất vài phút để cung cấp và kết nối với môi trường. Khi quá trình này kết thúc, bạn sẽ thấy như sau:

f6ef2b5f13479f3a.png

Máy ảo này được trang bị tất cả các công cụ phát triển mà bạn cần. Nó cung cấp một thư mục chính có dung lượng 5 GB và chạy trên Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và hoạt động xác thực. Bạn chỉ cần một trình duyệt để thực hiện mọi thao tác trong phòng thí nghiệm này.

Thiết lập gcloud

Trong Cloud Shell, hãy đặt mã dự án rồi lưu mã dự án đó dưới dạng biến PROJECT_ID.

PROJECT_ID=[YOUR-PROJECT-ID]

gcloud config set project $PROJECT_ID

Bây giờ, hãy thực thi lệnh sau:

$ git clone https://github.com/rominirani/cloud-code-sample-repository.git

Thao tác này sẽ tạo một thư mục có tên là cloud-code-sample-repository trong thư mục này.

(Không bắt buộc) Chạy ứng dụng trên Cloud Shell

Bạn có thể chạy ứng dụng cục bộ bằng cách làm theo các bước sau:

  1. Trong dòng lệnh, hãy chuyển đến phiên bản Python của API bằng lệnh sau:

$ cd cloud-code-sample-repository

$ cd python-flask-api

  1. Trong cửa sổ dòng lệnh, hãy cung cấp lệnh sau (Tại thời điểm viết, Cloud Shell đã cài đặt Python 3.9.x và chúng ta sẽ sử dụng phiên bản mặc định. Nếu dự định chạy ứng dụng này trên máy tính xách tay, bạn có thể sử dụng Python 3.8 trở lên:

$ python app.py

  1. Bạn có thể chạy lệnh sau để khởi động Máy chủ Python cục bộ.

1f798fbddfdc2c8e.png 46edf454cc70c5a6.png

Nhấp vào Xem trước trên cổng 8080. 5. Thao tác này sẽ mở một cửa sổ trình duyệt. Bạn sẽ thấy Lỗi 404 và điều đó không sao cả. Sửa đổi URL để chỉ có /inventory sau tên máy chủ.

Ví dụ: trên máy của tôi, đường dẫn này có dạng như sau:

https://8080-cs-557561579860-default.cs-asia-southeast1-yelo.cloudshell.dev/inventory

Thao tác này sẽ hiển thị danh sách các mặt hàng trong kho như đã giải thích trước đó:

709d57ee2f0137e4.png

  1. Giờ đây, bạn có thể dừng máy chủ bằng cách chuyển đến Terminal rồi nhấn Ctrl-C

Triển khai ứng dụng

Giờ đây, chúng ta sẽ triển khai ứng dụng API này lên Cloud Run. Quy trình này liên quan đến việc sử dụng ứng dụng dòng lệnh gcloud để chạy lệnh triển khai mã vào Cloud Run.

Trên cửa sổ dòng lệnh, hãy đưa ra lệnh gcloud sau:

$ gcloud run deploy --source .

Thao tác này sẽ hỏi bạn nhiều câu hỏi và một số điểm được đề cập dưới đây:

  1. Tên dịch vụ (python-flask-api): Bạn có thể sử dụng tên mặc định này hoặc chọn tên khác, chẳng hạn như my-inventory-api
  2. API [run.googleapis.com] chưa được bật trên dự án [613162942481]. Bạn có muốn bật và thử lại không (quá trình này sẽ mất vài phút)? (y/N)? Có
  3. Vui lòng chỉ định một khu vực: Chọn 31 (us-west-1)
  4. API [artifactregistry.googleapis.com] chưa được bật trên dự án [613162942481]. Bạn có muốn bật và thử lại không (quá trình này sẽ mất vài phút)? (y/N)? Có
  5. Việc triển khai từ nguồn yêu cầu phải có một kho lưu trữ Docker của Artifact Registry để lưu trữ các vùng chứa đã tạo. Một kho lưu trữ có tên [cloud-run-source-deploy] trong khu vực [us-west1] sẽ được tạo.
  6. Bạn có muốn tiếp tục không (Y/n)? Có
  7. Cho phép các lệnh gọi chưa xác thực đến [my-inventory-api] (y/N)? Có

Cuối cùng, thao tác này sẽ bắt đầu quy trình lấy mã nguồn của bạn, đưa mã nguồn vào vùng chứa, đẩy mã nguồn đó vào Artifact Registry rồi triển khai dịch vụ Cloud Run + bản sửa đổi. Bạn nên kiên nhẫn trong quá trình này (có thể mất 3-4 phút) và bạn sẽ thấy quá trình hoàn tất với URL dịch vụ xuất hiện.

Sau đây là ví dụ về một lần chạy:

87ba8dbf88e8cfa4.png

Kiểm thử ứng dụng

Giờ đây, sau khi triển khai ứng dụng lên Cloud Run, bạn có thể truy cập vào ứng dụng API như sau:

  1. Lưu ý URL dịch vụ ở bước trước. Ví dụ: trên chế độ thiết lập của tôi, biểu tượng này xuất hiện dưới dạng https://my-inventory-api-bt2r5243dq-uw.a.run.app. Hãy gọi tệp này là <SERVICE_URL>.
  2. Mở một trình duyệt rồi truy cập vào 3 URL sau cho các điểm cuối API:
  3. <SERVICE_URL>/inventory
  4. <SERVICE_URL>/inventory/I-1
  5. <SERVICE_URL>/inventory/I-100

Yêu cầu này phải tuân theo quy cách mà chúng tôi đã cung cấp trong một phần trước đó, kèm theo Yêu cầu và Phản hồi API mẫu.

Nhận thông tin chi tiết về dịch vụ từ Cloud Run

Chúng tôi đã triển khai Dịch vụ API của mình cho Cloud Run, một môi trường điện toán không máy chủ. Chúng ta có thể truy cập vào dịch vụ Cloud Run thông qua bảng điều khiển Cloud bất cứ lúc nào.

Trong trình đơn chính, hãy chuyển đến Cloud Run. Thao tác này sẽ hiển thị danh sách các dịch vụ mà bạn đang chạy trong Cloud Run. Bạn sẽ thấy dịch vụ mà mình vừa triển khai. Tuỳ thuộc vào tên mà bạn đã chọn, bạn sẽ thấy nội dung tương tự như sau:

2633965c4bc957cc.png

Nhấp vào Tên dịch vụ để xem thông tin chi tiết. Sau đây là thông tin chi tiết về mẫu:

33042ae64322ce07.png

Hãy chú ý đến URL. Đây chỉ là URL dịch vụ mà bạn có thể nhập vào trình duyệt và truy cập vào API Kho hàng mà chúng ta vừa triển khai. Xem các chỉ số và thông tin chi tiết khác.

Hãy bắt đầu sử dụng Google Cloud Operations Suite ngay bây giờ.

4. Tạo một chủ đề Pub/Sub để nhận thông báo cảnh báo

Để tạo một chủ đề Pub/Sub, bạn có thể làm theo các bước sau trong Bảng điều khiển Google Cloud:

  1. Tìm Pub/Sub trong hộp Tìm kiếm rồi chuyển đến Pub/Sub. 935028bd8f6328ef.png
  2. Nhấp vào thẻ Chủ đề nếu bạn chưa chuyển đến thẻ này. 7fd8bf91386a88fd.png
  3. Nhấp vào nút Tạo chủ đề. cd9d197f9023c41b.png
  4. Nhập một tên dễ nhận biết cho chủ đề của bạn.

173f313b4a3c4934.png

  1. Nhấp vào nút Tạo. ca9a02477da21a44.png
  2. Sao chép Tên chủ đề bằng nút biểu tượng sao chép. Bạn sẽ cần đến khoá này cho phần tiếp theo.

20848252ee83df93.png

5. Tạo chính sách cảnh báo cho lỗi

Khám phá nhật ký lỗi

Cách xem nhật ký lỗi của ứng dụng:

Nhấp vào thẻ Ghi nhật ký.

Thao tác này sẽ hiển thị một giao diện nhật ký, trong đó bạn có thể chọn/huỷ chọn cụ thể nhiều Tài nguyên (Dự án, Tài nguyên Google Cloud, tên dịch vụ, v.v.) cùng với Cấp nhật ký để lọc thông điệp nhật ký khi cần.

6605b68395185b89.png

Mô phỏng một vài yêu cầu không hợp lệ đối với Dịch vụ kho hàng bằng cách cung cấp mã sản phẩm không phải là I-1, I-2 và I-3. Ví dụ: yêu cầu không chính xác là:

https://<SERVICE_URL>/inventory/I-999

Giờ đây, chúng ta sẽ tìm kiếm tất cả CẢNH BÁO do API của chúng ta tạo ra, khi một Mã sản phẩm không chính xác được cung cấp trong Truy vấn.

Tạo chính sách cảnh báo tuỳ chỉnh dựa trên nhật ký cho các lỗi

Giả sử chúng ta muốn theo dõi sự xuất hiện của một thông báo lỗi rất cụ thể cho một phần của ứng dụng. Ví dụ: nếu chúng tôi nhận thấy có nhiều lỗi khi tra cứu Mã sản phẩm. Vấn đề này là dấu hiệu của nhiều vấn đề có thể xảy ra (đường liên kết không hợp lệ, cơ sở dữ liệu không nhất quán hoặc bot liệt kê trang web của chúng tôi). Mặc dù khó hoặc không thể hình dung mọi nguyên nhân tiềm ẩn, nhưng ứng dụng gửi thông báo này dù chỉ một lần cũng là một vấn đề cấp cao mà chúng tôi muốn biết. Để cảnh báo về vấn đề này, chúng ta cần tạo một chính sách dựa trên dữ liệu trong nhật ký lỗi.

  1. Trong Hộp truy vấn, hãy chèn các tham số truy vấn sau:

resource.type="cloud_run_revision"

textPayload =~ "WARNING in app: Received inventory request for incorrect productid"

Đoạn mã sẽ trông giống như sau:

f672154cfebf0051.png

  1. Nhấp vào Chạy truy vấn. Sau đó, bạn sẽ thấy tất cả các yêu cầu đã nhận được và yêu cầu nào gặp phải vấn đề này.

77c190e3a2fab6bf.png

  1. Để chuyển đổi nội dung trên thành một cảnh báo, hãy nhấp vào nút Tạo cảnh báo mà bạn thấy trong Trình khám phá nhật ký ngay bên dưới trường truy vấn, ở bên phải:

4cd3fcf142189376.png

  1. Thao tác này sẽ mở biểu mẫu để tạo một chính sách cảnh báo dựa trên nhật ký.

b82446854bad87fc.png

  1. Sử dụng truy vấn ban đầu cho nhật ký để đưa vào cảnh báo:

resource.type="cloud_run_revision"

textPayload =~ "WARNING in app: Received inventory request for incorrect productid"

764227db73ec3de6.png

  1. Đặt tần suất thông báo và thời lượng sự cố. Để minh hoạ, bạn có thể sử dụng giá trị tối thiểu cho từng mục:

bb3d96448ec998a1.png

  1. Cuối cùng, trong phần "Ai sẽ nhận được thông báo?", hãy chọn kênh thông báo Pub/Sub mà bạn đã tạo trước đó:

3593c48c29d4b76c.png

  1. Nhấp vào Lưu. Để xem và quản lý chính sách cảnh báo, hãy truy cập vào trang Cảnh báo rồi kiểm tra trong mục Chính sách: ca08ea380fb37c91.png

6. Xin chúc mừng

Xin chúc mừng! Bạn đã định cấu hình thành công Uptime Check để gửi cảnh báo đến Pub/Sub!