1. Giới thiệu
Trong lớp học lập trình này, bạn sẽ tìm hiểu cách tận dụng các công cụ ghi nhật ký và giám sát dành cho tất cả nhà phát triển làm việc với Cloud Functions. Các công cụ này đi kèm với mọi Cloud Function mà bạn triển khai trên tất cả các ngôn ngữ được hỗ trợ và sẽ giúp bạn làm việc hiệu quả hơn khi viết và vận hành mã không có máy chủ.

Bạn sẽ sử dụng Cloud Functions được kích hoạt bằng HTTP, nhưng mọi thứ bạn tìm hiểu cũng áp dụng cho các ngôn ngữ khác và cho Cloud Functions được kích hoạt bằng các sự kiện khác.
2. Thiết lập và yêu cầu
Thiết lập môi trường theo tốc độ của riêng bạn
- Đăng nhập vào Cloud Console rồi tạo một dự án mới hoặc sử dụng lại một dự án hiện có. (Nếu chưa có tài khoản Gmail hoặc G Suite, bạn phải tạo một tài khoản.)
Hãy nhớ mã dự án, một tên duy nhất trên tất cả các dự án trên Google Cloud (tên ở trên đã được sử dụng và sẽ không hoạt động đối với bạn, xin lỗi!). Sau này trong lớp học lập trình này, chúng ta sẽ gọi nó là PROJECT_ID.
- Tiếp theo, bạn cần bật tính năng thanh toán trong Cloud Console để sử dụng các tài nguyên của Google Cloud.
Việc thực hiện lớp học lập trình này sẽ không tốn nhiều chi phí, nếu có. Hãy nhớ làm theo mọi hướng dẫn trong phần "Dọn dẹp" để biết cách tắt các tài nguyên nhằm tránh bị tính phí ngoài phạm vi hướng dẫn này. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí trị giá 300 USD.
Cloud Shell
Mặc dù có thể sử dụng Cloud Functions cũng như các chức năng ghi nhật ký và giám sát của dịch vụ này từ xa trên máy tính xách tay, nhưng bạn sẽ sử dụng Cloud Shell, một môi trường dòng lệnh chạy trong Google Cloud.
Máy ảo dựa trên Debian này được trang bị tất cả các công cụ phát triển mà bạn cần. Nền tảng này cung cấp một thư mục chính có dung lượng 5 GB và chạy trong Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và hoạt động xác thực. Điều này có nghĩa là bạn chỉ cần một trình duyệt (có, trình duyệt này hoạt động trên Chromebook) cho lớp học lập trình này.
- Để kích hoạt Cloud Shell từ Bảng điều khiển Cloud, bạn chỉ cần nhấp vào Kích hoạt Cloud Shell
(mất vài phút để cung cấp và kết nối với môi trường).
Sau khi kết nối với Cloud Shell, bạn sẽ thấy rằng mình đã được xác thực và dự án đã được đặt thành PROJECT_ID.
gcloud auth list
Đầu ra của lệnh
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Đầu ra của lệnh
[core] project = <PROJECT_ID>
Nếu vì lý do nào đó mà dự án chưa được thiết lập, bạn chỉ cần đưa ra lệnh sau:
gcloud config set project <PROJECT_ID>
Bạn đang tìm PROJECT_ID? Kiểm tra mã nhận dạng bạn đã dùng trong các bước thiết lập hoặc tìm mã nhận dạng đó trong trang tổng quan của Cloud Console:
Cloud Shell cũng đặt một số biến môi trường theo mặc định, có thể hữu ích khi bạn chạy các lệnh trong tương lai.
echo $GOOGLE_CLOUD_PROJECT
Đầu ra của lệnh
<PROJECT_ID>
- Cuối cùng, hãy đặt cấu hình dự án và vùng mặc định.
gcloud config set compute/zone us-central1-f
Bạn có thể chọn nhiều múi giờ khác nhau. Để biết thêm thông tin, hãy xem phần Khu vực và vùng.
3. Triển khai một Cloud Function đơn giản
Để có nội dung cần theo dõi, hãy tạo một Cloud Function "Hello, World". Trong trình đơn bên trái của Google Cloud Console, hãy nhấp vào Cloud Functions (Hàm trên đám mây), rồi nhấp vào Create Function (Tạo hàm).

Nhập "hello-monitor" làm tên cho Cloud Function mới.

Giữ nguyên tất cả các giá trị mặc định cho mã nguồn. (Tuy nhiên, bạn có thể chọn một ngôn ngữ/thời gian chạy khác nếu muốn.)

Cuối cùng, hãy nhấp vào Tạo.

Bạn sẽ thấy Cloud Functions của mình xuất hiện cùng với một dấu kiểm màu xanh lục bên cạnh. Điều này có nghĩa là Cloud Functions đã sẵn sàng được gọi.

4. Kiểm thử Cloud Function và gửi lưu lượng truy cập bằng trình tạo tải
Giờ đây, khi Cloud Functions đã được triển khai thành công, hãy kiểm thử Cloud Functions đó qua dòng lệnh.
Trước tiên, hãy sử dụng Cloud Shell để phát lệnh sau:
$ gcloud functions describe hello-monitor
Thao tác này sẽ trả về nội dung mô tả về Cloud Function, bao gồm cả URL cho httpsTrigger. Đây là điểm cuối HTTP(S) để gọi Cloud Function. URL này sẽ có dạng như sau: https://<region>-<project-id>.cloudfunctions.net/hello-monitor.
Giờ đây, bạn chỉ cần dùng lệnh curl trên URL đó là có thể kích hoạt Cloud Functions.
$ curl https://<region>-<project-id>.cloudfunctions.net/hello-monitor Hello World!
Bây giờ, hãy sử dụng Vegeta, một công cụ kiểm thử tải HTTP đơn giản. Để cài đặt, trong Cloud Shell, bạn chỉ cần nhập lệnh sau :
$ go get -u github.com/tsenart/vegeta
Để gửi một số lưu lượng truy cập đến Cloud Function (5 yêu cầu mỗi giây trong vài phút), hãy dùng lệnh sau:
$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \ | vegeta attack -rate=5 -duration=120s \ > results.bin
5. Di chuyển qua nhật ký
Trong chế độ xem chi tiết Cloud Functions, hãy nhấp vào Xem nhật ký.

Thao tác đó sẽ đưa bạn đến phần Stackdriver Logging của dự án, chỉ cho bạn thấy nhật ký Cloud Functions.

Tất cả các yêu cầu đến Cloud Functions của bạn đều phải trả về mã trạng thái 200.
Khi xem nhật ký, bạn có thể làm những việc sau:
- Lọc theo cấp độ nhật ký (trong trường hợp của bạn, tất cả nhật ký đều ở cấp độ
debug). - Chọn một khung thời gian cụ thể (tương đối hoặc tuyệt đối).
- Bật tính năng truyền trực tiếp nhật ký (với Play
ở đầu màn hình). - Sao chép đường liên kết đến mục nhập nhật ký (để chia sẻ với các thành viên trong nhóm).
- Hiện một mục nhập nhật ký trong ngữ cảnh tài nguyên.
- Ghim một mục nhập nhật ký (dưới dạng tín hiệu trực quan).
- Xuất nhật ký sang BigQuery, Cloud Storage hoặc Pub/Sub (hoặc chỉ cần tải nhật ký xuống dưới dạng tệp JSON hoặc CSV).
6. Cập nhật hàm
Bằng Cloud Console, hãy chuyển đến chế độ xem Thông tin chi tiết về hàm và quan sát mức tăng đột biến mà bạn đã tạo bằng trình kiểm thử tải trong số lượt gọi mỗi giây và thời gian thực thi của các lượt gọi đó.

Stackdriver Trace là một công cụ khác chi tiết hơn để theo dõi độ trễ và các lệnh gọi RPC. Tuy nhiên, trước khi có thể sử dụng công cụ này, bạn cần thực hiện một số thay đổi đối với Cloud Functions. Hãy thực hiện như sau:
- Thêm gói
node-emojicứu sinh làm phần phụ thuộc. - Cập nhật mã hàm để sử dụng mô-đun node-emoji và thêm một số độ trễ.
- Thêm một biến môi trường để bật Stackdriver Trace cho Cloud Functions.
Trong phần Thông tin chi tiết về hàm, hãy nhấp vào Chỉnh sửa để sửa đổi hàm.

Chỉnh sửa tệp package.json để thêm phần phụ thuộc cho gói node-emoji.
{
"name": "sample-http",
"version": "0.0.1",
"dependencies": {
"node-emoji": "^1.8.1"
}
}
Chỉnh sửa hàm thực tế bằng cách thay đổi nội dung của index.js thành nội dung sau:
const emoji = require('node-emoji');
exports.helloWorld = (req, res) => {
let message = req.query.message || req.body.message || 'Hello World!';
// add some latency, functions are too quick!
setTimeout(function() {
message += emoji.random().emoji;
res.status(200).send(message);
}, (3 * 100)); // 300ms
};
Thao tác này sẽ thêm một biểu tượng cảm xúc ngẫu nhiên vào thông báo do Cloud Functions trả về sau khi tạm dừng trong 300 mili giây.
Cuối cùng, hãy thêm một biến môi trường Cloud Functions có tên là GOOGLE_CLOUD_TRACE_ENABLED và đặt thành true như sau:

Nhấp vào Lưu.
Quay lại Cloud Shell và gọi lại lệnh để tạo một số tải trên Cloud Functions mới triển khai:
$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \ | vegeta attack -rate=5 -duration=120s \ > results.bin
Giờ đây, bạn có thể quan sát danh sách các dấu vết được tạo mà không cần thiết lập thêm và không cần thư viện theo dõi cụ thể trong mã của bạn!
7. Theo dõi Cloud Function đã cập nhật
Sử dụng trình đơn bên trái để chuyển đến Danh sách dấu vết (trong mục Stackdriver Trace).

Bạn sẽ thấy nội dung tương tự như ảnh chụp màn hình sau:

Điều đó sẽ cho thấy rõ rằng độ trễ được giới thiệu trong Cloud Functions thực sự được đo ở mức 300 mili giây.
Mỗi dấu chấm trên biểu đồ là một yêu cầu mà bạn có thể xem thông tin chi tiết, chẳng hạn như dấu thời gian, phương thức và trạng thái HTTP, nhãn, đường liên kết đến mục nhập nhật ký tương ứng và mọi lệnh gọi RPC tiếp theo mà Cloud Functions thực hiện.

Nếu bạn muốn phóng to, chỉ cần nhấp và kéo trên biểu đồ. 
Để thu nhỏ, hãy nhấp vào Thu nhỏ ở đầu trang.
Vì bạn đã triển khai một Cloud Function duy nhất, nên biểu đồ chỉ cho thấy các yêu cầu GET trên URI hello-monitor, nhưng bạn có thể lọc dấu vết theo phương thức HTTP (GET, POST, DELETE) theo trạng thái HTTP (2XX, 3XX) hoặc bằng cách sử dụng bộ lọc yêu cầu.
Chuyển đến mục Tổng quan trong trình đơn bên trái:

Trên trang tổng quan này, bạn có thể tìm thấy các dấu vết gần đây và thông tin chi tiết khác.

Bạn cũng có thể tạo báo cáo tuỳ chỉnh dựa trên tổ hợp bộ lọc yêu cầu URI, phương thức HTTP, trạng thái HTTP và phạm vi thời gian. Thậm chí, bạn có thể so sánh các giá trị được tạo với đường cơ sở thời gian.

Nếu thiết lập được các phạm vi thời gian chính xác với đủ điểm dữ liệu, bạn có thể tạo một báo cáo cho thấy sự thay đổi quan trọng về độ trễ giữa Cloud Function ban đầu và Cloud Function mới.


Bạn có thể dùng báo cáo tuỳ chỉnh như vậy để biết thời điểm xảy ra vấn đề về hiệu suất và theo dõi chỉ báo cấp độ dịch vụ (SLI), chẳng hạn như độ trễ yêu cầu của người dùng cuối.
8. Đã đến lúc dọn dẹp các tài nguyên
Lớp học lập trình đến đây là hết!
Mặc dù Cloud Functions và các công cụ Stackdriver là những nền tảng không máy chủ và không phát sinh chi phí khi không sử dụng, nhưng bạn nên xoá Cloud Function để tiết kiệm tài nguyên trên đám mây. Bạn chỉ cần chọn hello-monitor trong phần Tổng quan của Cloud Functions rồi nhấp vào Xoá.

9. Tiếp theo là gì?
Sau đây là một số tài liệu tham khảo:
/