1. Giới thiệu
Trong phòng thí nghiệm 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ố khi triển khai Cloud Functions 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.
Những việc bạn sẽ làm...
- 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 liên quan của Google và tạo một 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 rõ thông tin đã thu thập.
- Bạn sẽ trò chuyện với Gemini để được Gemini trợ giúp khắc phục và giải quyết vấn đề.
Kiến thức bạn sẽ học được...
- 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 Functions nhờ sự trợ giúp của Gemini.
Những thứ bạn cần...
- Trình duyệt web Chrome
- Một dự án trê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 các tài nguyên
Phòng thực hành này dành cho 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 trải nghiệm thực tế các khả 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 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 Google Cloud mà bạn dự định sử dụng cho phòng thí nghiệm 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 vùng tìm kiếm của bảng điều khiển:

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

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

Để hoàn tất bước này, hãy nhấp vào nút 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 TIẾP THEO, bạn có thể được nhắc bật(các) Google API khác. Giống như ở bước 4, hãy nhấp vào BẬT.

Thiết lập thời gian chạy và mã của Cloud Functions
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 thành 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 xuất hiện 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 dòng để sửa đổi ví dụ về chế độ khởi động 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ột mảng JSON.
7. Chọn tệp requirements.txt trong danh sách 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 dòng.
google-cloud-storage
8. Để triển khai Cloud Functions, hãy nhấp vào TRIỂN KHAI ở dưới cùng bên trái.

Bạn có thể cần đợ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à sự trợ giúp khác của Gemini để xác định vấn đề và cách giải quyết vấn đề đó.
1. Không triển khai được. Bạn sẽ thấy một thông báo lỗi cho bạn biết về vấn đề này kèm theo thông tin bổ sung và lựa chọn xem nhật ký triển khai. Nhấp vào XEM NHẬT KÝ để xem nhật ký triển khai.

LƯU Ý rằng nhật ký triển khai sẽ mở trong một thẻ riêng biệt trong cùng một trình duyệt. Bạn sẽ cần chuyển đổi 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 dòng nhật ký khi nhấp vào XEM NHẬT KÝ hoặc chỉ thấy một vài dòng. Trong trường hợp đó, 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ý rồi chọn 30 phút qua.

2. Xem nhật ký trong thẻ vừa mở. 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ý do là vì Cloud Functions ghi lại văn bản được in vào stdout hoặc stderr và ghi từng 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 khi thoát cũng như thông tin bổ sung do Cloud Functions và Cloud Run API 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ó thêm các phần tử trên giao diện người dùng. 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ị mọi 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. Callstack ngoại lệ không cung cấp nhiều thông tin. Xem xét 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)". Nội dung tóm tắt nhật ký sau đây cho biết:
functions_framework.exceptions.MissingTargetException: File /workspace/main.py is expected to contain...
Đây có vẻ là một vấn đề đáng điều tra. Nhấp vào dòng này để mở rộng mục nhập nhật ký. Sau đó, hãy nhấp vào nút "Giải thích mục nhập nhật ký này" để xem thêm thông tin về nhật ký đã chọn.

Nếu trước đây chưa từng sử dụng Gemini trong dự án này, 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 BẬT để tiếp tục.

LƯU Ý rằng đôi khi bạn có thể gặp lỗi khi đưa ra câu lệnh cho Gemini. Trong trường hợp đó, hãy lặp lại thao tác nhập câu lệnh thêm một lần nữa để nhận được câu trả lời. Ví dụ: nhấp lại vào nút "Giải thích mục nhập nhật ký này".
5. Xem lời giải thích do Gemini cung cấp. Nếu lời giải thích được đưa ra không đầy đủ hoặc không rõ ràng, hãy yêu cầu 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 tự soạn câu hỏi
Bạn có thể cung cấp thêm thông tin về nhật ký này không?
Bạn có thể cung cấp thêm thông tin về lỗi này không?
6. Sau đó, hãy yêu cầu Gemini đưa ra đề xuất để giải quyết vấn đề. Ví dụ: hỏi Gemini
Làm cách nào để giải quyết vấn đề này?
Đề xuất giải pháp để khắc phục lỗi này
Đề xuất cách khắc phục lỗi này
Câu trả lời của Gemini có thể khác nhau tuỳ thuộc vào ngữ 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 mã nguồn của Cloud Functions 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 đó cho thấy trang triển khai Cloud Functions có lỗi rồi nhấp vào CHỈNH SỬA.

8. Xác nhận rằng chế độ xác thực vẫn được đặt thành Cho phép lệnh gọi chưa được 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 nội 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 TRIỂN KHAI.
Bạn có thể cần đợ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 Console có thể tiếp tục cho bạn thấy thông báo lỗi gần đây nhất 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 cách sử dụng curl. Bạn có thể sử dụng Cloud Shell hoặc thực hiện từ bất kỳ thiết bị đầu cuối nào đã cài đặt CLI curl và gcloud bằng cách thực thi lệnh sau từ Thiết bị đầu cuối Cloud Shell.
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ừ một thiết bị đầu cuối, bạn sẽ phải xác thực bằng giao diện dòng lệnh gcloud và đặt giá trị mã dự án của bạ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 Functions đượ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ế 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á phiên bản Cloud Functions. Bạn có thể xoá Cloud Functions bằng Console 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ới ứng dụng của mình và hiện đã hiểu cách Gemini có thể hỗ trợ bạn hiểu nhật ký và nhận được câu trả lời cho các câu hỏi về Google Cloud.