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 trạng còn hàng

Cảnh báo dựa trên nhật ký có thể được dùng để 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 dịch vụ 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 của mình.

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

Lỗi có thể phát sinh từ bất kỳ nguyên nhân nào, từ lỗi của người dùng cho đến bảo trì hệ thống, nâng cấp 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 không phải là cố gắng dự đoán tất cả nguyên nhân có thể xảy ra, mà hãy chọn một số triệu chứng chính có thể đóng vai trò là dấu hiệu khởi đầu cho quá trình khắc phục sự cố.

Chủ đề Pub/Sub dưới dạng kênh thông báo cảnh báo

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

Để sử dụng 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 Giám sát trên đám mây sử dụng chủ đề Pub/Sub làm đích đến.

Khi cảnh báo được kích hoạt, giải pháp Giám sát trên đám mây sẽ gửi thông báo về chủ đề Pub/Sub. Sau đó, người đăng ký gói thuê bao Pub/Sub có thể xử lý tin nhắn và có biện pháp xử lý 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 ứng dụng, tạo chủ đề Pub/Sub và tạo thông 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, đồng thời 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 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 lỗi. Các khái niệm và mã xử lý ứng dụng không liên quan được che đi và chỉ được cung cấp cho bạn để sao chép và dán.

Bạn cần có

  • Một tài khoản Google Cloud có quyền:
  • Triển khai các ứng dụng Cloud Run
  • Tạo chủ đề Pub/Sub
  • Tạo cảnh 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 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 Create Project (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 bổ sung 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 tài khoản mới.
  • Tạo: Sau khi nhập tất cả thông tin cần thiết, hãy nhấp vào nút Create (Tạo) để tạo dự án.

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

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

Ứng dụng hoặc API mẫu nói về vấn đề gì?

Ứng dụng của chúng ta là một ứng dụng API Inventory (API Kho hàng) đơn giản hiển thị Điểm cuối API REST cùng một số thao tác để liệt kê các mặt hàng tồn kho và lấy số lượng mặt hàng cụ thể trong kho hàng.

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

https://<somehost>/inventory

Thao tác này sẽ liệt kê tất cả các mặt hàng sản phẩm có cấp kho hàng sẵn có.

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

Mã này sẽ cung cấp một bản ghi có cấp độ sản phẩm và cấp kho hàng trên tay cho sản phẩm đó.

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

Lưu ý: Ứng dụng API này chỉ dành cho mục đích minh hoạ và không đại diện cho cách triển khai API an toàn và mạnh mẽ. Chương trình này nhằm cung cấp một ứng dụng nhanh cho chúng tôi để khám phá mục đích chính của phòng thí nghiệm này, cụ thể là Google Cloud Operations.

Yêu cầu/Phản hồi mẫu và dữ liệu

Ứng dụng này không được cơ sở dữ liệu hỗ trợ ở phần phụ trợ để đảm bảo mọi thứ đơn giản. Nó chứa 3 mã sản phẩm mẫu và các cấp khoảng không quảng cáo sẵn có.

Id Sản phẩm

Cấp khoảng không quảng cáo có sẵn

I-1

10

I-2

20

I-3

30

Dưới đây là mẫu Yêu cầu và phản hồi của API:

Yêu cầu API

Phản hồi của API

https://&lt;somehost&gt;/inventory

[ { &quot;I-1&quot;: 10, &quot;I-2&quot;: 20, &quot;I-3&quot;: 30 }]

https://&lt;somehost&gt;/inventory/I-1

{ &quot;productid&quot;: &quot;I-1&quot;, &quot;qty&quot;: 10}

https://&lt;somehost&gt;/inventory/I-2

{ &quot;productid&quot;: &quot;I-2&quot;, &quot;qty&quot;: 20}

https://&lt;somehost&gt;/inventory/I-200

{ &quot;productid&quot;: I-200, &quot;qty&quot;: -1}

Sao chép Kho lưu trữ

Mặc dù bạn 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 trong Đám mây.

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

bce75f34b2c53987.png

Sẽ chỉ mất một chút thời gian để cấp phép và kết nối với môi trường. Sau khi hoàn tất, bạn sẽ thấy như sau:

f6ef2b5f13479f3a.png

Máy ảo này chứa tất cả các công cụ phát triển mà bạn cần. Phiên bản này cung cấp thư mục gốc có dung lượng ổn định 5 GB và chạy trên Google Cloud, giúp nâng cao đáng kể hiệu suất và khả năng xác thực của mạng. Bạn có thể thực hiện tất cả công việc trong phòng thí nghiệm này chỉ bằng một trình duyệt.

Thiết lập gcloud

Trong Cloud Shell, hãy đặt mã dự án và lưu mã này 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 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. Trên cửa sổ dòng lệnh, hãy chuyển đến phiên bản Python của API thông qua lệnh sau:

$ cd cloud-code-sample-repository

$ cd python-flask-api

  1. Trong thiết bị đầu cuối, hãy cung cấp lệnh sau (Tại thời điểm viết, Cloud Shell đi kèm với Python 3.9.x được cài đặt và chúng tôi sẽ sử dụng phiên bản mặc định. Nếu bạn dự định chạy nó trên máy tính xách tay của mình, bạn có thể sử dụng Python 3.8+) :

$ 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.pngS

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

Ví dụ: trên máy của tôi sẽ 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 tồn kho như được giải thích trước đó:

709d57ee2f0137e4.png.

  1. Bạn có thể dừng máy chủ ngay bây giờ bằng cách đi đến Terminal và nhấn Ctrl-C

Triển khai ứng dụng

Bây giờ, chúng tôi sẽ triển khai ứng dụng API này cho Cloud Run. Quy trình sử dụng ứng dụng dòng lệnh gcloud để chạy lệnh nhằm triển khai mã cho Cloud Run.

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

$ gcloud run deploy --source .

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

Cuối cùng, quá trình này sẽ khởi động quá trình lấy mã nguồn của bạn, lưu trữ mã, đẩy mã vào Sổ đăng ký cấu phần phần mềm rồi triển khai dịch vụ + bản sửa đổi Cloud Run. Bạn nên kiên nhẫn thông qua quá trình này (có thể mất 3-4 phút) và bạn sẽ thấy quá trình được hoàn tất với URL dịch vụ được hiển thị cho bạn.

Dưới đây là một lần chạy mẫu:

87ba8dbf88e8cfa4.png.

Kiểm thử ứng dụng

Hiện tại, chúng ta đã 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. Ghi lại URL Dịch vụ ở bước trước. Ví dụ: trong quá trình thiết lập của tôi, tên này hiển thị là https://my-inventory-api-bt2r5243dq-uw.a.run.app. Hãy gọi đây là <SERVICE_URL>.
  2. Mở trình duyệt và 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 và phản hồi đó phải theo các thông số kỹ thuật mà chúng tôi đã cung cấp trong phần trước với 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 lên Cloud Run, một môi trường điện toán không máy chủ. Chúng tôi có thể truy cập dịch vụ Cloud Run qua bảng điều khiển Google 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à bạn vừa triển khai. Tuỳ thuộc vào tên mà bạn đã chọn, bạn sẽ thấy như sau:

2633965c4bc957cc.pngS

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

33042ae64322ce07.pngs

Hãy lưu ý URL. URL này không gì khác ngoài URL dịch vụ mà bạn có thể bấm vào trình duyệt và truy cập vào Inventory API (API Khoảng không quảng cáo) mà chúng ta vừa triển khai. Hãy xem phần Chỉ số và các 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ủ đề trên Pub/Sub, bạn có thể làm theo các bước sau trong Google Cloud Console:

  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 bật 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 ra cho chủ đề của bạn.

173f313b4a3c4934.pngs

  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 thành phần này cho phần tiếp theo.

20848252ee83df93.pngS

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

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

Để 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ị giao diện nhật ký để bạn có thể chọn/bỏ chọn cụ thể nhiều Tài nguyên (Dự án, Tài nguyên trê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.pngS

Mô phỏng một vài yêu cầu không hợp lệ đến Dịch vụ kho hàng bằng cách cung cấp các 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://&lt;SERVICE_URL&gt;/inventory/I-999

Bây giờ, chúng ta sẽ tìm kiếm tất cả các CẢNH BÁO do API của chúng tôi tạo ra khi một Mã sản phẩm đượ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 chú ý đến sự xuất hiện của một thông báo lỗi rất cụ thể trên một phần của ứng dụng. Giả sử chúng tôi nhận thấy một số lượng lớn 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 hết mọi nguyên nhân tiềm ẩn, nhưng việc ứng dụng gửi thông báo này ngay cả một lần vẫn là một vấn đề cấp cao mà chúng tôi muốn lưu ý. Để cảnh báo về vấn đề này, chúng tôi cần tạo một chính sách dựa trên dữ liệu trong nhật ký lỗi của mình.

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

resource.type=&quot;cloud_run_revision&quot;

textPayload =~ "CẢNH BÁO trong ứng dụng: Đã nhận được yêu cầu kho hàng cho mã sản phẩm không chính xác"

Hàm này có dạng như sau:

f672154cfebf0051.png

  1. Nhấp vào Run Query (Chạy truy vấn). Sau đó, hệ thống sẽ hiển thị tất cả yêu cầu đã nhận được và những yêu cầu có vấn đề này.

77c190e3a2fab6bf.png.

  1. Để chuyển đổi nội dung ở trên thành 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.pngS

  1. Thao tác này sẽ mở biểu mẫu để tạo 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 các 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.pngS

  1. Đặt tần suất thông báo và khoảng thời gian xảy ra sự cố. Trong ví dụ này, bạn có thể sử dụng giá trị tối thiểu cho mỗi chuỗi:

bb3d96448ec998a1.png

  1. Cuối cùng, đối với câu hỏi "Ai cần được thông báo?" 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 về cảnh báo, hãy truy cập vào trang Cảnh báo rồi kiểm tra trong phần 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 tính năng Kiểm tra thời gian hoạt động để gửi cảnh báo tới Pub/Sub!