1. Giới thiệu
Trong lớp học lập trình này, bạn sẽ sử dụng Gemini, một cộng tác viên dựa trên AI trong Google Cloud, để khắc phục sự cố về việc triển khai Cloud Function bằng cách phân tích nhật ký lỗi, xác định nguyên nhân gốc rễ của vấn đề và tìm cách khắc phục.
Bạn sẽ làm gì...
- Bạn sẽ sử dụng Cloud Shell Terminal và gcloud CLI để thiết lập môi trường, bao gồm cả việc bật các API có liên quan của Google và tạo Cloud Function từ mã được cung cấp
- Bạn sẽ sử dụng tính năng tóm tắt nhật ký của Cloud Logging để tạo bản tóm tắt nhật ký nhằm hiểu thông tin đã thu thập.
- Bạn sẽ trò chuyện với Gemini để nhận được sự hỗ trợ của Gemini trong việc khắc phục sự cố và giải quyết vấn đề.
Bạn sẽ học được gì...
- Cách sử dụng Gemini với Google Cloud Observability và để khắc phục sự cố.
- Cách tìm và hiểu nhật ký Cloud Function với sự trợ giúp của Gemini.
Những gì bạn cần...
- Trình duyệt web Chrome
- Một dự án Google Cloud đã bật tính năng thanh toán
- Một Tài khoản Google có quyền truy cập vào dự án, cho phép bạn bật API và thao tác với tài nguyên
Lớp học lập trình này nhắm đến các kỹ sư DevOps và nền tảng, cũng như nhà phát triển phần mềm ở mọi cấp độ, kể cả người mới bắt đầu. Chúng ta sẽ tập trung vào việc thực hành các tính năng của Gemini trong việc khắc phục sự cố.
2. Thiết lập
Phần này trình bày mọi việc bạn cần làm để bắt đầu với lớp học lập trình này.
Định cấu hình môi trường
1. Đăng nhập vào Cloud Console bằng cách mở https://console.cloud.google.com.
2. Chọn một dự án trên đám mây của Google mà bạn dự định sử dụng cho lớp học lập trình này.

3. Mở trang Cloud Functions trong Bảng điều khiển. Bạn có thể thực hiện việc này bằng cách chọn Cloud Functions trong trình đơn điều hướng (biểu tượng ☰ ở trên cùng bên trái trong cửa sổ Bảng điều khiển).

Ngoài ra, bạn có thể tìm kiếm "cloud functions" (hàm trên đám mây) trong khu vực tìm kiếm của bảng điều khiển:

Nhấp vào nút Create Function (Tạo hàm) ở đầu danh sách các hàm 
Nếu trước đây bạn chưa sử dụng Cloud Functions trong dự án này, thì để sử dụng, bạn sẽ được yêu cầu bật các API của Google.

Nhấp vào ENABLE (BẬT) để tiếp tục.
4. Xác định các thuộc tính cơ bản của Cloud Function mới.
- Đặt tên là "
codelab-cf" - Chọn tuỳ chọn Allow unauthenticated invocations (Cho phép lệnh gọi chưa xác thực)

Để hoàn tất bước này, hãy nhấp vào nút NEXT (TIẾP THEO) ở khu vực dưới cùng bên trái của cửa sổ:

Sau khi nhấp vào NEXT (TIẾP THEO), bạn có thể được nhắc bật (các) API bổ sung của Google. Giống như ở bước 4, hãy nhấp vào ENABLE (BẬT).

Thiết lập thời gian chạy và mã của Cloud Function
Lớp học lập trình này sử dụng Python làm ngôn ngữ lập trình. Đừng lo lắng nếu bạn không quen thuộc với Python. Để hoàn tất lớp học lập trình này, bạn không cần có kiến thức về Python.
5. Chọn Python 3.11 làm Thời gian chạy của hàm

Xin lưu ý rằng việc thay đổi thời gian chạy sẽ thay đổi mã nguồn hiển thị trong Trình chỉnh sửa nội tuyến.
6. Sao chép mã bên dưới vào Trình chỉnh sửa nội tuyến để sửa đổi ví dụ về hướng dẫn bắt đầu nhanh được tạo tự động.
from google.cloud import storage
import json
import re
client = storage.Client()
def get_object_list(request):
if request.args and 'path' in request.args:
path = request.args['path']
else:
return '{}'
parsed = re.search('gs:\/\/([a-zA-Z0-9_-]{3,63})\/([-a-zA-Z0-9_\+.\/]*)', path)
bucket, prefix = parsed.group(1), parsed.group(2)
blobs = client.list_blobs(bucket, prefix=prefix, delimiter='/')
objects = []
if (blobs):
for blob in blobs:
objects.append(blob.name)
return json.dumps(objects)
Mã này đọc thuộc tính path từ yêu cầu GET, phân tích cú pháp đường dẫn để chọn tên bộ chứa và gọi API Google Cloud Storage để lấy danh sách các đối tượng được lưu trữ tại đường dẫn này. Hàm (get_object_list) chấp nhận một yêu cầu là đối tượng Flask làm đối số đầu vào và trả về tên của các đối tượng dưới dạng mảng JSON.
7. Chọn tệp requirements.txt trong danh sách các tệp còn lại trong Trình chỉnh sửa nội tuyến. Thay thế danh sách phần phụ thuộc hiện tại bằng danh sách mới bằng cách sao chép mã bên dưới vào Trình chỉnh sửa nội tuyến.
google-cloud-storage
8. Để triển khai Cloud Function, hãy nhấp vào DEPLOY (TRIỂN KHAI) ở dưới cùng bên trái.

Bạn có thể phải đợi vài phút cho đến khi quá trình triển khai hoàn tất. Nếu làm theo sát hướng dẫn thiết lập, bạn sẽ thấy quá trình triển khai được báo cáo là không thành công.
3. Tìm và giải quyết vấn đề
Trong phần này, bạn sẽ sử dụng tính năng Giải thích nhật ký và các tính năng hỗ trợ khác của Gemini để xác định vấn đề và cách giải quyết.
1. Quá trình triển khai không thành công. Bạn sẽ thấy một thông báo lỗi cho biết về vấn đề này kèm theo thông tin bổ sung và một tuỳ chọn để xem nhật ký triển khai. Nhấp vào VIEW LOGS (XEM NHẬT KÝ) để xem nhật ký của quá trình triển khai.

LƯU Ý rằng nhật ký triển khai sẽ được mở trong một thẻ riêng biệt trong cùng một trình duyệt. Bạn sẽ cần di chuyển giữa các thẻ để hoàn tất lớp học lập trình này.
LƯU Ý rằng bạn có thể không thấy các dòng nhật ký khi nhấp vào VIEW LOGS (XEM NHẬT KÝ) hoặc chỉ thấy một vài dòng. Trong trường hợp như vậy, hãy sử dụng bộ chọn phạm vi thời gian trong ngăn truy vấn của Trình khám phá nhật ký và chọn Last 30 minutes (30 phút qua).

2. Xem lại nhật ký trong thẻ đã mở. Xin lưu ý rằng bản tóm tắt nhật ký trông giống như nhiều dòng của ngăn xếp lệnh gọi ngoại lệ. Đó là vì Cloud Function ghi lại văn bản được in vào stdout hoặc stderr và ghi mỗi dòng dưới dạng một mục nhập nhật ký riêng biệt. Các dòng nhật ký khác tóm tắt thông tin về mã lỗi thoát cũng như thông tin bổ sung do API Cloud Functions và Cloud Run báo cáo.

Bạn có thể nhấp vào bất kỳ dòng nào để xem thêm thông tin về một nhật ký cụ thể. Nhật ký đã mở rộng có các phần tử trên giao diện người dùng bổ sung. Khi nhấp vào các phần tử này, bạn có thể sao chép tất cả thông tin về nhật ký, mở rộng tất cả các trường để hiển thị tất cả dữ liệu của mục nhập nhật ký và giải thích mục nhập nhật ký bằng Gemini.
4. Ngăn xếp lệnh gọi ngoại lệ không cung cấp nhiều thông tin. Xem qua nhật ký để tìm phần cuối của nhật ký theo dõi dấu vết ngăn xếp ngoại lệ. Đó là dòng có nội dung "Container called exit(1)". Bản tóm tắt nhật ký sau đây cho biết:
functions_framework.exceptions.MissingTargetException: File /workspace/main.py is expected to contain...
Có vẻ như đây là một ứng cử viên tốt để điều tra. Nhấp vào dòng này để mở rộng mục nhập nhật ký. Sau đó, nhấp vào nút "Explain this log entry" (Giải thích mục nhập nhật ký này) để xem thêm thông tin về mục nhập nhật ký đã chọn.

Nếu trước đây bạn chưa sử dụng Gemini trong dự án này, thì bạn sẽ được nhắc bật một API bắt buộc. Nếu bạn được nhắc bật API, hãy nhấp vào ENABLE (BẬT) để tiếp tục.

LƯU Ý rằng đôi khi bạn có thể gặp lỗi khi nhắc Gemini. Trong trường hợp như vậy, hãy lặp lại thao tác nhắc một lần nữa để nhận được phản hồi. Ví dụ: nhấp lại vào nút "Explain this log entry" (Giải thích mục nhập nhật ký này).
5. Xem lại phần giải thích do Gemini cung cấp. Nếu phần giải thích được cung cấp không đủ hoặc không rõ ràng, hãy nhắc Gemini cung cấp thêm thông tin bằng cách sử dụng một trong các câu lệnh sau hoặc soạn câu hỏi của riêng bạn
Can you provide more information about this log?
Can you provide more information about the error?
6. Sau đó, hãy nhắc Gemini đưa ra các đề xuất để giải quyết vấn đề. Ví dụ: hỏi Gemini
How to solve this problem?
Suggest a solution to resolve this error
Suggest how I can fix this error
Phản hồi của Gemini có thể khác nhau tuỳ thuộc vào bối cảnh hiện tại cũng như cách diễn đạt và định dạng của câu lệnh. Gemini dự kiến sẽ đề xuất đảm bảo rằng mã nguồn của Cloud Function có một hàm có tên là hello_http.
7. Bạn hiện đang thấy thẻ hiển thị nhật ký Cloud Functions. Chọn thẻ trước đó hiển thị trang triển khai Cloud Function có lỗi và nhấp vào EDIT (CHỈNH SỬA).

8. Xác nhận rằng tính năng xác thực vẫn được đặt thành Allow unauthenticated invocations (Cho phép lệnh gọi chưa xác thực) và cập nhật lựa chọn nếu cần.

9. Nhấp vào TIẾP THEO ở dưới cùng để xem Trình chỉnh sửa cùng dòng. Làm theo đề xuất của Gemini và thay đổi tên hàm từ get_order_list thành hello_http.
Sau khi chỉnh sửa xong, hãy nhấp vào DEPLOY (TRIỂN KHAI).
Bạn có thể phải đợi vài phút cho đến khi quá trình triển khai hoàn tất. Xác nhận rằng quá trình triển khai hoàn tất thành công và không có thông báo lỗi nào xuất hiện.
LƯU Ý rằng Bảng điều khiển có thể tiếp tục hiển thị thông báo lỗi cuối cùng cho đến khi quá trình triển khai hoàn tất.
10. Kiểm tra xem Cloud Function có hoạt động hay không bằng cách gửi yêu cầu HTTPS sau đây bằng curl. Bạn có thể sử dụng Cloud Shell hoặc thực hiện việc này từ bất kỳ thiết bị đầu cuối nào đã cài đặt curl và gcloud CLI.Thực thi lệnh sau từ Cloud Shell Terminal.
curl -m 70 -X GET \
https://us-central1-${GOOGLE_CLOUD_PROJECT}.cloudfunctions.net/\
codelab-cf?path=gs://cloud-samples-data/generative-ai/image/ \
-H "Authorization: bearer $(gcloud auth print-identity-token)"
LƯU Ý rằng để chạy lệnh này từ thiết bị đầu cuối, bạn sẽ phải xác thực bằng gcloud CLI và đặt giá trị của mã dự án thành biến môi trường GOOGLE_CLOUD_PROJECT.
Phần thưởng
Tên của hàm hello_http được xác định là điểm truy cập mặc định cho Cloud Function được kích hoạt bằng HTTP khi bạn chọn thời gian chạy Python. Giải pháp thay thế có thể là giữ get_order_list làm tên của hàm trong mã nguồn và cập nhật trường điểm truy cập của Cloud Functions nằm phía trên Trình chỉnh sửa nội tuyến ở bên phải trường Thời gian chạy:

Việc thay đổi điểm truy cập từ hello_http thành get_order_list sẽ giải quyết vấn đề về việc triển khai.
4. Dọn dẹp
Để dọn dẹp, bạn có thể tắt dự án hoặc xoá thực thể Cloud Function. Bạn có thể xoá Cloud Functions bằng Bảng điều khiển hoặc bằng lệnh CLI như sau:
gcloud functions delete codelab-cf --region=us-central1
5. Xin chúc mừng!
Xin chúc mừng! Bạn đã sử dụng thành công Gemini để khắc phục sự cố và giải quyết vấn đề với ứng dụng của mình, đồng thời hiện đã hiểu cách Gemini có thể hỗ trợ hiểu nhật ký và nhận câu trả lời cho các câu hỏi về Google Cloud.