1. Tổng quan
Các ứng dụng AI tạo sinh cũng cần có khả năng quan sát như mọi ứng dụng khác. Có kỹ thuật quan sát đặc biệt nào cần thiết cho AI tạo sinh không?
Trong lớp học lập trình này, bạn sẽ tạo một ứng dụng AI tạo sinh đơn giản. Triển khai ứng dụng đó lên Cloud Run. Đồng thời, hãy đo lường ứng dụng bằng các tính năng giám sát và ghi nhật ký thiết yếu bằng các dịch vụ và sản phẩm khả năng quan sát của Google Cloud.
Kiến thức bạn sẽ học được
- Viết một ứng dụng sử dụng Vertex AI bằng Trình chỉnh sửa Cloud Shell
- Lưu trữ mã ứng dụng trong GitHub
- Sử dụng gcloud CLI để triển khai mã nguồn của ứng dụng lên Cloud Run
- Thêm chức năng giám sát và ghi nhật ký vào ứng dụng AI tạo sinh
- Sử dụng các chỉ số dựa trên nhật ký
- Triển khai tính năng ghi nhật ký và giám sát bằng SDK Open Telemetry
- Nhận thông tin chi tiết về cách xử lý dữ liệu AI có trách nhiệm
2. Điều kiện tiên quyết
Nếu chưa có Tài khoản Google, bạn phải tạo một tài khoản mới.
3. Thiết lập dự án
- Đăng nhập vào Google Cloud Console bằng Tài khoản Google của bạn.
- Tạo dự án mới hoặc chọn sử dụng lại một dự án hiện có. Ghi lại mã dự án của dự án bạn vừa tạo hoặc chọn.
- Bật tính năng thanh toán cho dự án.
- Chi phí thanh toán để hoàn thành lớp học này sẽ dưới 5 USD.
- Bạn có thể làm theo các bước ở cuối lớp học này để xoá tài nguyên nhằm tránh bị tính thêm phí.
- Người dùng mới đủ điều kiện dùng thử miễn phí 300 USD.
- Xác nhận rằng bạn đã bật tính năng thanh toán trong phần Dự án của tôi trong Cloud Billing
- Nếu dự án mới của bạn có nội dung
Billing is disabled
trong cộtBilling account
:- Nhấp vào biểu tượng ba dấu chấm trong cột
Actions
- Nhấp vào Thay đổi thông tin thanh toán
- Chọn tài khoản thanh toán mà bạn muốn sử dụng
- Nhấp vào biểu tượng ba dấu chấm trong cột
- Nếu bạn đang tham dự một sự kiện trực tiếp, tài khoản đó có thể có tên là Tài khoản thanh toán dùng thử Google Cloud Platform
- Nếu dự án mới của bạn có nội dung
4. Chuẩn bị Trình chỉnh sửa Cloud Shell
- Chuyển đến Trình chỉnh sửa Cloud Shell. Nếu bạn thấy thông báo sau yêu cầu uỷ quyền cho màn hình shell trên đám mây gọi gcloud bằng thông tin xác thực của bạn, hãy nhấp vào Uỷ quyền để tiếp tục.
- Mở cửa sổ dòng lệnh
- Nhấp vào trình đơn có biểu tượng ba dấu gạch ngang
- Nhấp vào Terminal (Thiết bị đầu cuối)
- Nhấp vào New Terminal
(Thiết bị đầu cuối mới)
- Nhấp vào trình đơn có biểu tượng ba dấu gạch ngang
- Trong thiết bị đầu cuối, hãy định cấu hình mã dự án:
Thay thếgcloud config set project [PROJECT_ID]
[PROJECT_ID]
bằng mã dự án của bạn. Ví dụ: nếu mã dự án của bạn làlab-example-project
, thì lệnh sẽ là: Nếu bạn thấy thông báo sau đây cho biết gcloud yêu cầu thông tin xác thực của bạn cho API GCPI, hãy nhấp vào Uỷ quyền để tiếp tục.gcloud config set project lab-project-id-example
Khi thực thi thành công, bạn sẽ thấy thông báo sau: Nếu bạn thấyUpdated property [core/project].
WARNING
và được hỏiDo you want to continue (Y/N)?
, thì có thể bạn đã nhập không chính xác mã dự án. NhấnN
, nhấnEnter
rồi thử chạy lại lệnhgcloud config set project
sau khi bạn tìm thấy mã dự án chính xác. - (Không bắt buộc) Nếu bạn gặp sự cố khi tìm mã dự án, hãy chạy lệnh sau để xem mã dự án của tất cả dự án được sắp xếp theo thời gian tạo theo thứ tự giảm dần:
gcloud projects list \ --format='value(projectId,createTime)' \ --sort-by=~createTime
5. Bật API của Google
Trong dòng lệnh, hãy bật các API Google bắt buộc cho lớp học này:
gcloud services enable \
run.googleapis.com \
cloudbuild.googleapis.com \
aiplatform.googleapis.com \
logging.googleapis.com \
monitoring.googleapis.com \
cloudtrace.googleapis.com
Lệnh này sẽ mất chút thời gian để hoàn tất. Cuối cùng, ứng dụng sẽ tạo ra một thông báo thành công tương tự như sau:
Operation "operations/acf.p2-73d90d00-47ee-447a-b600" finished successfully.
Nếu bạn nhận được thông báo lỗi bắt đầu bằng ERROR: (gcloud.services.enable) HttpError accessing
và chứa thông tin chi tiết về lỗi như bên dưới, hãy thử lại lệnh sau khi chờ 1-2 phút.
"error": { "code": 429, "message": "Quota exceeded for quota metric 'Mutate requests' and limit 'Mutate requests per minute' of service 'serviceusage.googleapis.com' ...", "status": "RESOURCE_EXHAUSTED", ... }
6. Tạo ứng dụng Gen AI NodeJS
Trong bước này, bạn sẽ viết mã của một ứng dụng đơn giản dựa trên yêu cầu sử dụng mô hình Gemini để hiển thị 10 thông tin thú vị về một loài động vật mà bạn chọn. Hãy làm theo các bước sau để tạo mã ứng dụng.
- Trong dòng lệnh, hãy tạo thư mục
codelab-o11y
:mkdir ~/codelab-o11y
- Thay đổi thư mục hiện tại thành
codelab-o11y
:cd ~/codelab-o11y
- Khởi chạy
package.json
của ứng dụng NodeJS:npm init -y
- Cài đặt gói
fastify
:npm install fastify
- Cài đặt các gói Cloud SDK để xác thực và làm việc với Vertex AI:
npm install google-auth-library @google-cloud/vertexai
- Tạo tệp
index.js
rồi mở tệp đó trong Trình chỉnh sửa Cloud Shell: Giờ đây, một tệp trống sẽ xuất hiện trong cửa sổ trình chỉnh sửa phía trên dòng lệnh. Màn hình của bạn sẽ trông giống như sau:cloudshell edit index.js
- Sao chép mã sau và dán vào tệp
index.js
đã mở: Sau vài giây, Trình chỉnh sửa Cloud Shell sẽ tự động lưu mã của bạn.const { VertexAI } = require('@google-cloud/vertexai'); const { GoogleAuth } = require('google-auth-library'); let generativeModel; const auth = new GoogleAuth(); auth.getProjectId().then(result => { const vertex = new VertexAI({ project: result }); generativeModel = vertex.getGenerativeModel({ model: 'gemini-1.5-flash' }); }); const fastify = require('fastify')(); const PORT = parseInt(process.env.PORT || '8080'); fastify.get('/', async function (request, reply) { const animal = request.query.animal || 'dog'; const prompt = `Give me 10 fun facts about ${animal}. Return this as html without backticks.` const resp = await generativeModel.generateContent(prompt); const html = resp.response.candidates[0].content.parts[0].text; reply.type('text/html').send(html); }) fastify.listen({ host: '0.0.0.0', port: PORT }, function (err, address) { if (err) { console.error(err); process.exit(1); } console.log(`codelab-genai: listening on ${address}`); })
Triển khai mã của ứng dụng Gen AI cho Cloud Run
- Trong cửa sổ dòng lệnh, hãy chạy lệnh để triển khai mã nguồn của ứng dụng lên Cloud Run.
Nếu bạn thấy lời nhắc như bên dưới, thông báo cho bạn rằng lệnh này sẽ tạo một kho lưu trữ mới. Nhấp vàogcloud run deploy codelab-o11y-service \ --source="${HOME}/codelab-o11y/" \ --region=us-central1 \ --allow-unauthenticated
Enter
. Quá trình triển khai có thể mất vài phút. Sau khi quá trình triển khai hoàn tất, bạn sẽ thấy kết quả như sau:Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [us-central1] will be created. Do you want to continue (Y/n)?
Service [codelab-o11y-service] revision [codelab-o11y-service-00001-t2q] has been deployed and is serving 100 percent of traffic. Service URL: https://codelab-o11y-service-12345678901.us-central1.run.app
- Sao chép URL dịch vụ Cloud Run hiển thị vào một thẻ hoặc cửa sổ riêng trong trình duyệt. Ngoài ra, hãy chạy lệnh sau trong cửa sổ dòng lệnh để in URL dịch vụ và nhấp vào URL hiển thị trong khi giữ phím Ctrl để mở URL:
Khi mở URL, bạn có thể gặp lỗi 500 hoặc thấy thông báo:gcloud run services list \ --format='value(URL)' \ --filter='SERVICE:"codelab-o11y-service"'
Điều này có nghĩa là các dịch vụ chưa hoàn tất quá trình triển khai. Đợi vài phút rồi làm mới trang. Ở cuối, bạn sẽ thấy một văn bản bắt đầu bằng Thông tin thú vị về chó và chứa 10 thông tin thú vị về chó.Sorry, this is just a placeholder...
Hãy thử tương tác với ứng dụng để biết các thông tin thú vị về nhiều loài động vật. Để thực hiện việc này, hãy thêm tham số animal
vào URL, chẳng hạn như ?animal=[ANIMAL]
, trong đó [ANIMAL]
là tên một con vật. Ví dụ: nối ?animal=cat
để nhận 10 sự thật thú vị về mèo hoặc ?animal=sea turtle
để nhận 10 sự thật thú vị về rùa biển.
7. Kiểm tra các lệnh gọi API Vertex
Việc kiểm tra các lệnh gọi API của Google sẽ giúp trả lời các câu hỏi như "Ai gọi một API cụ thể, ở đâu và khi nào?". Việc kiểm tra rất quan trọng khi bạn khắc phục sự cố ứng dụng, điều tra mức sử dụng tài nguyên hoặc thực hiện phân tích pháp y phần mềm.
Nhật ký kiểm tra cho phép bạn theo dõi các hoạt động quản trị và hệ thống, cũng như ghi lại các lệnh gọi đến các thao tác API "đọc dữ liệu" và "ghi dữ liệu". Để kiểm tra các yêu cầu của Vertex AI nhằm tạo nội dung, bạn phải bật nhật ký kiểm tra "Đọc dữ liệu" trong Cloud Console.
- Nhấp vào nút bên dưới để mở trang Nhật ký kiểm tra trong Cloud Console
- Đảm bảo rằng trang này đã chọn dự án mà bạn đã tạo cho lớp học này. Dự án đã chọn sẽ xuất hiện ở góc trên cùng bên trái của trang ngay từ trình đơn bánh hamburger:
Nếu cần, hãy chọn đúng dự án trong hộp kết hợp. - Trong bảng Cấu hình nhật ký kiểm tra quyền truy cập dữ liệu, trong cột Dịch vụ, hãy tìm dịch vụ
Vertex AI API
rồi chọn dịch vụ đó bằng cách chọn hộp đánh dấu ở bên trái tên dịch vụ. - Trong bảng thông tin ở bên phải, hãy chọn loại kiểm tra "Đọc dữ liệu".
- Nhấp vào Lưu.
Để tạo nhật ký kiểm tra, hãy mở URL của dịch vụ. Làm mới trang trong khi thay đổi giá trị của thông số ?animal=
để nhận được kết quả khác.
Khám phá nhật ký kiểm tra
- Nhấp vào nút bên dưới để mở trang Trình khám phá nhật ký trong Cloud Console:
- Dán bộ lọc sau vào ngăn Truy vấn.
Ngăn Truy vấn là một trình chỉnh sửa nằm ở gần đầu trang Trình khám phá nhật ký:LOG_ID("cloudaudit.googleapis.com%2Fdata_access") AND protoPayload.serviceName="aiplatform.googleapis.com"
- Nhấp vào Run query (Chạy truy vấn).
- Chọn một trong các mục nhập nhật ký kiểm tra rồi mở rộng các trường để kiểm tra thông tin được ghi lại trong nhật ký.
Bạn có thể xem thông tin chi tiết về lệnh gọi API Vertex, bao gồm cả phương thức và mô hình đã sử dụng. Bạn cũng có thể xem danh tính của phương thức gọi và những quyền đã cho phép lệnh gọi.
8. Ghi lại các hoạt động tương tác với AI tạo sinh
Bạn không tìm thấy thông số yêu cầu API hoặc dữ liệu phản hồi trong nhật ký kiểm tra. Tuy nhiên, thông tin này có thể quan trọng để khắc phục sự cố ứng dụng và phân tích quy trình công việc. Trong bước này, chúng ta sẽ lấp đầy khoảng trống này bằng cách thêm tính năng ghi nhật ký ứng dụng. Tính năng ghi nhật ký sử dụng phương thức ghi nhật ký chuẩn của NodeJS console.log
để ghi nhật ký có cấu trúc vào đầu ra chuẩn. Phương thức này có khả năng ghi lại thông tin được in ra đầu ra chuẩn và tự động nhập thông tin đó vào Cloud Logging. Để ghi lại chính xác nhật ký có cấu trúc, nhật ký in phải được định dạng cho phù hợp. Hãy làm theo hướng dẫn bên dưới để thêm các tính năng ghi nhật ký có cấu trúc vào ứng dụng NodeJS của chúng ta.
- Quay lại cửa sổ (hoặc thẻ) "Cloud Shell" trong trình duyệt.
- Trong cửa sổ dòng lệnh, hãy mở lại
index.js
:cloudshell edit ~/codelab-o11y/index.js
- Hãy làm theo các bước sau để ghi lại phản hồi của mô hình:
- Tìm lệnh gọi đến
await generativeModel.generateContent()
(ở dòng 20). - Sao chép và dán mã bên dưới vào đầu dòng tiếp theo.
console.log(JSON.stringify({ severity: 'DEBUG', message: 'Content is generated', animal: animal, prompt: prompt, response: resp.response, }));
- Tìm lệnh gọi đến
Hàm xử lý được sửa đổi để gọi console.log()
nhằm in cấu trúc JSON có giản đồ tuân theo nguyên tắc định dạng có cấu trúc. Nhật ký ghi lại tham số động vật của yêu cầu cũng như câu lệnh và phản hồi của mô hình.
Sau vài giây, Trình chỉnh sửa Cloud Shell sẽ tự động lưu các thay đổi của bạn.
Triển khai mã của ứng dụng Gen AI cho Cloud Run
- Trong cửa sổ dòng lệnh, hãy chạy lệnh để triển khai mã nguồn của ứng dụng lên Cloud Run.
Nếu bạn thấy lời nhắc như bên dưới, thông báo cho bạn rằng lệnh này sẽ tạo một kho lưu trữ mới. Nhấp vàogcloud run deploy codelab-o11y-service \ --source="${HOME}/codelab-o11y/" \ --region=us-central1 \ --allow-unauthenticated
Enter
. Quá trình triển khai có thể mất vài phút. Sau khi quá trình triển khai hoàn tất, bạn sẽ thấy kết quả như sau:Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [us-central1] will be created. Do you want to continue (Y/n)?
Service [codelab-o11y-service] revision [codelab-o11y-service-00001-t2q] has been deployed and is serving 100 percent of traffic. Service URL: https://codelab-o11y-service-12345678901.us-central1.run.app
- Sao chép URL dịch vụ Cloud Run hiển thị vào một thẻ hoặc cửa sổ riêng trong trình duyệt. Ngoài ra, hãy chạy lệnh sau trong cửa sổ dòng lệnh để in URL dịch vụ và nhấp vào URL hiển thị trong khi giữ phím Ctrl để mở URL:
Khi mở URL, bạn có thể gặp lỗi 500 hoặc thấy thông báo:gcloud run services list \ --format='value(URL)' \ --filter='SERVICE:"codelab-o11y-service"'
Điều này có nghĩa là các dịch vụ chưa hoàn tất quá trình triển khai. Đợi vài phút rồi làm mới trang. Ở cuối, bạn sẽ thấy một văn bản bắt đầu bằng Thông tin thú vị về chó và chứa 10 thông tin thú vị về chó.Sorry, this is just a placeholder...
Để tạo nhật ký ứng dụng, hãy mở URL dịch vụ. Làm mới trang trong khi thay đổi giá trị của thông số ?animal=
để nhận được kết quả khác.
Để xem nhật ký ứng dụng, hãy làm như sau:
- Nhấp vào nút bên dưới để mở trang Trình khám phá nhật ký trong Cloud Console:
- Dán bộ lọc sau vào ngăn Truy vấn (#2 trong giao diện Trình khám phá nhật ký):
LOG_ID("run.googleapis.com%2Fstdout") AND severity=DEBUG
- Nhấp vào Run query (Chạy truy vấn).
Kết quả của truy vấn cho thấy nhật ký có câu lệnh và phản hồi của Vertex AI, bao gồm cả điểm xếp hạng an toàn.
9. Đếm lượt tương tác với AI tạo sinh
Cloud Run ghi các chỉ số được quản lý có thể dùng để theo dõi các dịch vụ đã triển khai. Chỉ số giám sát do người dùng quản lý giúp bạn kiểm soát tốt hơn dữ liệu và tần suất cập nhật chỉ số. Để triển khai chỉ số như vậy, bạn cần viết mã thu thập dữ liệu và ghi dữ liệu đó vào Cloud Monitoring. Hãy xem bước tiếp theo (không bắt buộc) để biết cách triển khai tính năng này bằng SDK OpenTelemetry.
Bước này cho thấy giải pháp thay thế để triển khai chỉ số người dùng trong mã – chỉ số dựa trên nhật ký. Các chỉ số dựa trên nhật ký cho phép bạn tạo các chỉ số giám sát từ các mục nhập nhật ký mà ứng dụng của bạn ghi vào Cloud Logging. Chúng ta sẽ sử dụng nhật ký ứng dụng mà chúng ta đã triển khai ở bước trước để xác định chỉ số dựa trên nhật ký của trình đếm loại. Chỉ số này sẽ tính số lệnh gọi thành công đến Vertex API.
- Hãy xem cửa sổ của Trình khám phá nhật ký mà chúng ta đã sử dụng ở bước trước. Trong ngăn Truy vấn, hãy tìm trình đơn thả xuống Thao tác rồi nhấp vào trình đơn đó để mở. Hãy xem ảnh chụp màn hình bên dưới để tìm trình đơn:
- Trong trình đơn đã mở, hãy chọn Tạo chỉ số để mở bảng điều khiển Tạo chỉ số dựa trên nhật ký.
- Hãy làm theo các bước sau để định cấu hình chỉ số bộ đếm mới trong bảng điều khiển Tạo chỉ số dựa trên nhật ký:
- Đặt Loại chỉ số: Chọn Bộ đếm.
- Thiết lập các trường sau trong mục Chi tiết:
- Tên chỉ số nhật ký: Đặt tên là
model_interaction_count
. Có một số quy định hạn chế về việc đặt tên; Hãy xem phần Khắc phục sự cố về quy định hạn chế về việc đặt tên để biết thông tin chi tiết. - Nội dung mô tả: Nhập nội dung mô tả cho chỉ số. Ví dụ:
Number of log entries capturing successful call to model inference.
- Đơn vị: Để trống hoặc chèn chữ số
1
.
- Tên chỉ số nhật ký: Đặt tên là
- Để nguyên các giá trị trong mục Lựa chọn bộ lọc. Xin lưu ý rằng trường Build filter (Bộ lọc bản dựng) có cùng bộ lọc mà chúng ta đã sử dụng để xem nhật ký ứng dụng.
- (Không bắt buộc) Thêm nhãn giúp đếm số lượng cuộc gọi cho mỗi con vật. LƯU Ý: nhãn này có khả năng làm tăng đáng kể số lượng giá trị riêng biệt của chỉ số và bạn không nên sử dụng nhãn này trong phiên bản chính thức:
- Nhấp vào Thêm nhãn.
- Đặt các trường sau trong phần Nhãn:
- Tên nhãn: Đặt tên là
animal
. - Nội dung mô tả: Nhập nội dung mô tả về nhãn. Ví dụ:
Animal parameter
. - Loại nhãn: Chọn
STRING
. - Tên trường: Nhập
jsonPayload.animal
. - Biểu thức chính quy: Để trống.
- Tên nhãn: Đặt tên là
- Nhấp vào Xong
- Nhấp vào Tạo chỉ số để tạo chỉ số.
Bạn cũng có thể tạo chỉ số dựa trên nhật ký trên trang Chỉ số dựa trên nhật ký bằng cách sử dụng lệnh CLI gcloud logging metrics create
hoặc tài nguyên Terraform google_logging_metric
.
Để tạo dữ liệu chỉ số, hãy mở URL của dịch vụ. Làm mới trang đã mở nhiều lần để thực hiện nhiều lệnh gọi đến mô hình. Giống như trước, hãy thử sử dụng các loài động vật khác nhau trong tham số.
Nhập truy vấn PromQL để tìm dữ liệu chỉ số dựa trên nhật ký. Để nhập truy vấn PromQL, hãy làm như sau:
- Nhấp vào nút bên dưới để mở trang Trình khám phá chỉ số trong Cloud Console:
- Trong thanh công cụ của ngăn trình tạo truy vấn, hãy chọn nút có tên là < > MQL hoặc < > PromQL. Xem hình ảnh bên dưới để biết vị trí của nút.
- Xác minh rằng bạn đã chọn PromQL trong nút bật/tắt Language (Ngôn ngữ). Nút bật/tắt ngôn ngữ nằm trong cùng một thanh công cụ cho phép bạn định dạng truy vấn.
- Nhập truy vấn của bạn vào trình chỉnh sửa Truy vấn:
Để biết thêm thông tin về cách sử dụng PromQL, hãy xem bài viết PromQL trong Cloud Monitoring.sum(rate(logging_googleapis_com:user_model_interaction_count{monitored_resource="cloud_run_revision"}[${__interval}]))
- Nhấp vào Run Query (Chạy truy vấn). Bạn sẽ thấy một biểu đồ đường tương tự như ảnh chụp màn hình sau:
Lưu ý rằng khi bạn bật nút bật/tắt Tự động chạy, nút Chạy truy vấn sẽ không xuất hiện.
10. (Không bắt buộc) Sử dụng Open Telemetry để giám sát và theo dõi
Như đã đề cập ở bước trước, bạn có thể triển khai các chỉ số bằng cách sử dụng SDK OpenTelemetry (Otel). Bạn nên sử dụng OTel trên các cấu trúc dịch vụ vi mô. Bước này mô tả những nội dung sau:
- Khởi chạy các thành phần OTel để hỗ trợ việc theo dõi và giám sát ứng dụng
- Điền cấu hình OTel bằng siêu dữ liệu tài nguyên của môi trường Cloud Run
- Đo lường ứng dụng flask bằng các tính năng theo dõi tự động
- Triển khai chỉ số bộ đếm để theo dõi số lượng lệnh gọi mô hình thành công
- Liên kết tính năng theo dõi với nhật ký ứng dụng
Cấu trúc đề xuất cho các dịch vụ cấp sản phẩm là sử dụng Trình thu thập Otel để thu thập và nhập tất cả dữ liệu khả năng quan sát cho một hoặc nhiều dịch vụ. Để đơn giản, mã trong bước này không sử dụng trình thu thập. Thay vào đó, công cụ này sử dụng các tệp xuất OTel để ghi dữ liệu trực tiếp vào Google Cloud.
Thiết lập các thành phần OTel để theo dõi và giám sát chỉ số
- Quay lại cửa sổ (hoặc thẻ) "Cloud Shell" trong trình duyệt.
- Cài đặt các gói cần thiết để sử dụng tính năng tự động đo lường OpenTelemetry:
npm install @opentelemetry/sdk-node \ @opentelemetry/api \ @opentelemetry/auto-instrumentations-node \ @opentelemetry/instrumentation-express \ @opentelemetry/instrumentation-http \ @opentelemetry/sdk-metrics \ @opentelemetry/sdk-trace-node \ @google-cloud/opentelemetry-cloud-trace-exporter \ @google-cloud/opentelemetry-cloud-monitoring-exporter \ @google-cloud/opentelemetry-resource-util
- Trong dòng lệnh, hãy tạo một tệp
setup.js
mới:cloudshell edit ~/codelab-o11y/setup.js
- Sao chép và dán mã bên dưới vào trình chỉnh sửa để thiết lập tính năng theo dõi và giám sát OpenTelemetry.
const opentelemetry = require("@opentelemetry/api"); const { registerInstrumentations } = require('@opentelemetry/instrumentation'); const { NodeTracerProvider } = require('@opentelemetry/sdk-trace-node'); const { MeterProvider, PeriodicExportingMetricReader } = require("@opentelemetry/sdk-metrics"); const { AlwaysOnSampler, SimpleSpanProcessor } = require('@opentelemetry/sdk-trace-base'); const { Resource } = require('@opentelemetry/resources'); const { ATTR_SERVICE_NAME } = require('@opentelemetry/semantic-conventions'); const { FastifyInstrumentation } = require('@opentelemetry/instrumentation-fastify'); const { HttpInstrumentation } = require('@opentelemetry/instrumentation-http'); const { TraceExporter } = require("@google-cloud/opentelemetry-cloud-trace-exporter"); const { MetricExporter } = require("@google-cloud/opentelemetry-cloud-monitoring-exporter"); const { GcpDetectorSync } = require("@google-cloud/opentelemetry-resource-util"); module.exports = { setupTelemetry }; function setupTelemetry() { const gcpResource = new Resource({ [ATTR_SERVICE_NAME]: process.env.K_SERVICE, }).merge(new GcpDetectorSync().detect()) const tracerProvider = new NodeTracerProvider({ resource: gcpResource, sampler: new AlwaysOnSampler(), spanProcessors: [new SimpleSpanProcessor(new TraceExporter({ // will export all resource attributes that start with "service." resourceFilter: /^service\./ }))], }); registerInstrumentations({ tracerProvider: tracerProvider, instrumentations: [ // Express instrumentation expects HTTP layer to be instrumented new HttpInstrumentation(), new FastifyInstrumentation(), ], }); // Initialize the OpenTelemetry APIs to use the NodeTracerProvider bindings tracerProvider.register(); const meterProvider = new MeterProvider({ resource: gcpResource, readers: [new PeriodicExportingMetricReader({ // Export metrics every second (default quota is 30,000 time series ingestion requests per minute) exportIntervalMillis: 1_000, exporter: new MetricExporter(), })], }); opentelemetry.metrics.setGlobalMeterProvider(meterProvider); }
- Quay lại cửa sổ dòng lệnh và mở lại
index.js
:cloudshell edit ~/codelab-o11y/index.js
- Thay thế mã bằng phiên bản khởi chạy tính năng theo dõi và thu thập chỉ số OpenTelemetry, đồng thời cập nhật bộ đếm hiệu suất trên mỗi lần thực thi thành công. Để cập nhật mã, hãy xoá nội dung của tệp, sau đó sao chép và dán mã bên dưới:
const { VertexAI } = require('@google-cloud/vertexai'); const { GoogleAuth } = require('google-auth-library'); let generativeModel, traceIdPrefix; const auth = new GoogleAuth(); auth.getProjectId().then(result => { const vertex = new VertexAI({ project: result }); generativeModel = vertex.getGenerativeModel({ model: 'gemini-1.5-flash' }); traceIdPrefix = `projects/${result}/traces/`; }); // setup tracing and monitoring OTel providers const { setupTelemetry }= require('./setup'); setupTelemetry(); const { trace, context } = require('@opentelemetry/api'); function getCurrentSpan() { const current_span = trace.getSpan(context.active()); return { trace_id: current_span.spanContext().traceId, span_id: current_span.spanContext().spanId, flags: current_span.spanContext().traceFlags }; }; const opentelemetry = require("@opentelemetry/api"); const meter = opentelemetry.metrics.getMeter("genai-o11y/nodejs/workshop/example"); const counter = meter.createCounter("model_call_counter"); const fastify = require('fastify')(); const PORT = parseInt(process.env.PORT || '8080'); fastify.get('/', async function (request, reply) { const animal = request.query.animal || 'dog'; const prompt = `Give me 10 fun facts about ${animal}. Return this as html without backticks.` const resp = await generativeModel.generateContent(prompt) const span = getCurrentSpan(); console.log(JSON.stringify({ severity: 'DEBUG', message: 'Content is generated', animal: animal, prompt: prompt, response: resp.response, "logging.googleapis.com/trace": traceIdPrefix + span.trace_id, "logging.googleapis.com/spanId": span.span_id, })); counter.add(1, { animal: animal }); const html = resp.response.candidates[0].content.parts[0].text; reply.type('text/html').send(html); }); fastify.listen({ host: '0.0.0.0', port: PORT }, function (err, address) { if (err) { console.error(err); process.exit(1); } console.log(`codelab-genai: listening on ${address}`); });
Ứng dụng hiện sử dụng SDK OpenTelemetry để đo lường quá trình thực thi mã bằng tính năng theo dõi và triển khai tính năng đếm số lần thực thi thành công dưới dạng một chỉ số. Phương thức main()
được sửa đổi để thiết lập trình xuất OpenTelemetry cho các dấu vết và chỉ số để ghi trực tiếp vào tính năng Theo dõi và giám sát của Google Cloud. Công cụ này cũng thực hiện các cấu hình bổ sung để điền siêu dữ liệu liên quan đến môi trường Cloud Run vào các dấu vết và chỉ số đã thu thập. Hàm Handler()
được cập nhật để tăng bộ đếm chỉ số mỗi khi lệnh gọi API Vertex AI trả về kết quả hợp lệ.
Sau vài giây, Trình chỉnh sửa Cloud Shell sẽ tự động lưu các thay đổi của bạn.
Triển khai mã của ứng dụng Gen AI cho Cloud Run
- Trong cửa sổ dòng lệnh, hãy chạy lệnh để triển khai mã nguồn của ứng dụng lên Cloud Run.
Nếu bạn thấy lời nhắc như bên dưới, thông báo cho bạn rằng lệnh này sẽ tạo một kho lưu trữ mới. Nhấp vàogcloud run deploy codelab-o11y-service \ --source="${HOME}/codelab-o11y/" \ --region=us-central1 \ --allow-unauthenticated
Enter
. Quá trình triển khai có thể mất vài phút. Sau khi quá trình triển khai hoàn tất, bạn sẽ thấy kết quả như sau:Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [us-central1] will be created. Do you want to continue (Y/n)?
Service [codelab-o11y-service] revision [codelab-o11y-service-00001-t2q] has been deployed and is serving 100 percent of traffic. Service URL: https://codelab-o11y-service-12345678901.us-central1.run.app
- Sao chép URL dịch vụ Cloud Run hiển thị vào một thẻ hoặc cửa sổ riêng trong trình duyệt. Ngoài ra, hãy chạy lệnh sau trong cửa sổ dòng lệnh để in URL dịch vụ và nhấp vào URL hiển thị trong khi giữ phím Ctrl để mở URL:
Khi mở URL, bạn có thể gặp lỗi 500 hoặc thấy thông báo:gcloud run services list \ --format='value(URL)' \ --filter='SERVICE:"codelab-o11y-service"'
Điều này có nghĩa là các dịch vụ chưa hoàn tất quá trình triển khai. Đợi vài phút rồi làm mới trang. Ở cuối, bạn sẽ thấy một văn bản bắt đầu bằng Thông tin thú vị về chó và chứa 10 thông tin thú vị về chó.Sorry, this is just a placeholder...
Để tạo dữ liệu đo từ xa, hãy mở URL của dịch vụ. Làm mới trang trong khi thay đổi giá trị của thông số ?animal=
để nhận được kết quả khác.
Khám phá dấu vết ứng dụng
- Nhấp vào nút bên dưới để mở trang Trình khám phá dấu vết trong Cloud Console:
- Chọn một trong các dấu vết gần đây nhất. Bạn sẽ thấy 5 hoặc 6 span giống như trong ảnh chụp màn hình bên dưới.
- Tìm span theo dõi lệnh gọi đến trình xử lý sự kiện (phương thức
fun_facts
). Đây sẽ là span cuối cùng có tên/
. - Trong ngăn Trace details (Thông tin chi tiết về dấu vết), hãy chọn Logs & events (Nhật ký và sự kiện). Bạn sẽ thấy nhật ký ứng dụng tương quan với khoảng thời gian cụ thể này. Mối tương quan được phát hiện bằng cách sử dụng mã theo dõi và mã span trong dấu vết và trong nhật ký. Bạn sẽ thấy nhật ký ứng dụng đã ghi lời nhắc và phản hồi của Vertex API.
Khám phá chỉ số bộ đếm
- Nhấp vào nút bên dưới để mở trang Trình khám phá chỉ số trong Cloud Console:
- Trong thanh công cụ của ngăn trình tạo truy vấn, hãy chọn nút có tên là < > MQL hoặc < > PromQL. Xem hình ảnh bên dưới để biết vị trí của nút.
- Xác minh rằng bạn đã chọn PromQL trong nút bật/tắt Language (Ngôn ngữ). Nút bật/tắt ngôn ngữ nằm trong cùng một thanh công cụ cho phép bạn định dạng truy vấn.
- Nhập truy vấn của bạn vào trình chỉnh sửa Truy vấn:
sum(rate(workload_googleapis_com:model_call_counter{monitored_resource="generic_task"}[${__interval}]))
- Nhấp vào Run Query (Chạy truy vấn). Khi bạn bật nút chuyển Auto-run (Tự động chạy), nút Run Query (Chạy truy vấn) sẽ không xuất hiện.
11. (Không bắt buộc) Thông tin nhạy cảm đã làm rối mã nguồn trong nhật ký
Ở Bước 10, chúng ta đã ghi lại thông tin về hoạt động tương tác của ứng dụng với mô hình Gemini. Thông tin này bao gồm tên của động vật, câu lệnh thực tế và câu trả lời của mô hình. Mặc dù việc lưu trữ thông tin này trong nhật ký là an toàn, nhưng không nhất thiết phải đúng trong nhiều trường hợp khác. Lời nhắc có thể bao gồm một số thông tin cá nhân hoặc thông tin nhạy cảm khác mà người dùng không muốn lưu trữ. Để giải quyết vấn đề này, bạn có thể làm rối dữ liệu nhạy cảm được ghi vào Cloud Logging. Để giảm thiểu việc sửa đổi mã, bạn nên sử dụng giải pháp sau.
- Tạo một chủ đề Pub/Sub để lưu trữ các mục nhập nhật ký đến
- Tạo một vùng chứa nhật ký chuyển hướng nhật ký đã nhập vào chủ đề PubSub.
- Tạo quy trình Dataflow (Luồng dữ liệu) sửa đổi nhật ký được chuyển hướng đến chủ đề PubSub theo các bước sau:
- Đọc một mục nhập nhật ký từ chủ đề PubSub
- Kiểm tra trọng tải của mục nhập để tìm thông tin nhạy cảm bằng API kiểm tra DLP
- Xoá thông tin nhạy cảm trong tải trọng bằng một trong các phương thức loại bỏ của DLP
- Ghi mục nhập nhật ký đã làm rối mã nguồn vào Cloud Logging
- Triển khai quy trình
12. (Không bắt buộc) Dọn dẹp
Để tránh rủi ro phải trả phí cho các tài nguyên và API dùng trong lớp học lập trình, bạn nên dọn dẹp sau khi hoàn tất lớp học. Cách dễ nhất để loại bỏ tính năng thanh toán là xoá dự án mà bạn đã tạo cho lớp học lập trình này.
- Để xoá dự án, hãy chạy lệnh xoá dự án trong dòng lệnh:
Việc xoá dự án trên Google Cloud sẽ dừng tính phí cho tất cả tài nguyên và API được sử dụng trong dự án đó. Bạn sẽ thấy thông báo này, trong đóPROJECT_ID=$(gcloud config get-value project) gcloud projects delete ${PROJECT_ID} --quiet
PROJECT_ID
là mã dự án của bạn:Deleted [https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID]. You can undo this operation for a limited period by running the command below. $ gcloud projects undelete PROJECT_ID See https://cloud.google.com/resource-manager/docs/creating-managing-projects for information on shutting down projects.
- (Không bắt buộc) Nếu bạn gặp lỗi, hãy tham khảo Bước 5 để tìm mã dự án mà bạn đã sử dụng trong lớp học này. Thay thế giá trị này cho lệnh trong hướng dẫn đầu tiên. Ví dụ: nếu mã dự án của bạn là
lab-example-project
, thì lệnh sẽ là:gcloud projects delete lab-project-id-example --quiet
13. Xin chúc mừng
Trong lớp học này, bạn đã tạo một ứng dụng AI tạo sinh sử dụng mô hình Gemini để đưa ra dự đoán. Đồng thời, đo lường ứng dụng bằng các chức năng giám sát và ghi nhật ký thiết yếu. Bạn đã triển khai ứng dụng và các thay đổi từ mã nguồn sang Cloud Run. Sau đó, bạn có thể sử dụng các sản phẩm Google Cloud Observability để theo dõi hiệu suất của ứng dụng, nhờ đó có thể đảm bảo độ tin cậy của ứng dụng.
Nếu bạn muốn tham gia một nghiên cứu về trải nghiệm người dùng (UX) để cải thiện các sản phẩm mà bạn đã sử dụng hôm nay, hãy đăng ký tại đây.
Dưới đây là một số cách để bạn tiếp tục học tập:
- Lớp học lập trình Cách triển khai ứng dụng trò chuyện dựa trên Gemini trên Cloud Run
- Lớp học lập trình Cách sử dụng lệnh gọi hàm Gemini bằng Cloud Run
- Cách sử dụng API Video Intelligence của Cloud Run Jobs để xử lý từng cảnh trong Video
- Hội thảo theo yêu cầu Làm quen với Google Kubernetes Engine
- Tìm hiểu thêm về cách định cấu hình chỉ số bộ đếm và phân phối bằng nhật ký ứng dụng
- Viết chỉ số OTLP bằng cách sử dụng thiết bị phụ OpenTelemetry
- Tài liệu tham khảo về cách sử dụng Open Telemetry trong Google Cloud