Sử dụng tính năng Ghi nhật ký Stackdriver và Dấu vết Stackdriver cho Cloud Functions

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 sử dụng các công cụ ghi nhật ký và giám sát có sẵn dành cho tất cả cá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 Chức năng đám mây 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 máy chủ.

5815064fec87444b.png.

Bạn sẽ sử dụng Hàm đám mây được kích hoạt bằng HTTP, nhưng mọi nội dung bạn đề cập cũng sẽ áp dụng cho các ngôn ngữ khác cũng như các Hàm đám mây do các sự kiện khác kích hoạt.

2. Thiết lập và yêu cầu

Thiết lập môi trường theo tiến độ riêng

  1. Đăng nhập vào Cloud Console rồi tạo dự án mới hoặc sử dụng lại 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.)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

Xin lưu ý rằng mã dự án là một tên riêng biệt trong tất cả dự án Google Cloud (tên ở trên đã được sử dụng nên sẽ không phù hợp với bạn!). Lớp này sẽ được đề cập sau trong lớp học lập trình này là PROJECT_ID.

  1. Tiếp theo, bạn sẽ cần bật tính năng thanh toán trong Cloud Console để sử dụng tài nguyên của Google Cloud.

Việc chạy qua lớp học lập trình này sẽ không tốn nhiều chi phí. Hãy nhớ làm theo mọi hướng dẫn trong phần "Dọn dẹp" sẽ tư vấn cho bạn cách tắt tài nguyên để bạn không phải chịu thanh toán ngoài 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í 300 USD.

Cloud Shell

Mặc dù bạn có thể sử dụng Cloud Functions cùng các tính năng ghi nhật ký và giám sát của tính năng 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 tải tất cả các công cụ phát triển mà bạn cần. Dịch vụ này cung cấp thư mục gốc 5 GB ổn định và chạy trong 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. Tức là tất cả những gì bạn cần để thực hiện lớp học lập trình này là một trình duyệt (vâng, trình duyệt này hoạt động trên Chromebook).

  1. Để kích hoạt Cloud Shell trong Cloud Console, bạn chỉ cần nhấp vào Kích hoạt Cloud Shell fEbHefbRynwXpq1vj2wJw6Dr17O0np8l-WOekxAZYlZQIORsWQE_xJl-cNhogjATLn-YxLVz8CgLvIW1Ncc0yXKJsfzJGMYgUeLsVB7zSwz7p6ItNgx4tXqQjag7BfWPcZN5kP-X3Q (chỉ mất vài phút để cấp phép và kết nối với môi trường).

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1CYaE11jdpSTYNNIYARe01A

Ảnh chụp màn hình lúc 10:13.43 chiều 14/6/2017.png

Sau khi kết nối với Cloud Shell, bạn sẽ thấy mình đã được xác thực và dự án đã được đặt thành PROJECT_ID.

gcloud auth list

Kết quả lệnh

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

Kết quả lệnh

[core]
project = <PROJECT_ID>

Nếu vì lý do nào đó mà dự án không được thiết lập, chỉ cần phát hành lệnh sau:

gcloud config set project <PROJECT_ID>

Bạn đang tìm PROJECT_ID? Hãy xem mã nhận dạng bạn đã sử dụng ở các bước thiết lập hoặc tra cứu trong trang tổng quan Cloud Console:

R7chO4PKQfLC3bvFBNZJALLTUiCgyLEq_67ECX7ohs_0ZnSjC7GxDNxWrJJUaoM53LnqABYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93Drxccyj2-5zz4AxL-G3hzxZ4PsM5HHQ

Cloud Shell cũng đặt một số biến môi trường theo mặc định. Điều này có thể hữu ích khi bạn chạy các lệnh sau này.

echo $GOOGLE_CLOUD_PROJECT

Kết quả lệnh

<PROJECT_ID>
  1. Cuối cùng, đặ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 vùng khác nhau. Để biết thêm thông tin, hãy xem Khu vực và Vùng.

3. Triển khai một hàm đám mây đơn giản

Để có nội dung cần giám sát, hãy tạo một thư "Hello, World" ("Xin chào thế giới") Chức năng đám mây. Trong trình đơn bên trái của Google Cloud Console, hãy nhấp vào Cloud Functions, sau đó nhấp vào Create Function.

3c13aa20af602aa7.pngS

Nhập "hello-monitor" là tên của Chức năng đám mây mới.

fa6816c96d6d5b94.png

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

7aadf164450484e.png.

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

dc74cd21000d6c91.png

Bạn sẽ thấy Chức năng đám mây của mình được đánh dấu kiểm màu xanh lục bên cạnh, nghĩa là chức năng này đã sẵn sàng được gọi.

5363a34eb001d5ed.png.

4. Kiểm thử hàm đám mây và gửi lưu lượng truy cập bằng trình tạo tải

Bây giờ, khi đã triển khai thành công Hàm đám mây, hãy kiểm thử hàm này từ dòng lệnh.

Trước tiên, 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ề Hàm đám mây, bao gồm cả URL của httpsTrigger, là điểm cuối HTTP(S) để gọi Hàm đám mây. Mã sẽ có dạng như sau: https://<region>-<project-id>.cloudfunctions.net/hello-monitor.

Giờ đây, bạn có thể kích hoạt Chức năng đám mây bằng cách sử dụng lệnh curl trên URL đó.

$ 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 tra tải HTTP đơn giản. Để cài đặt ứng dụng này, từ Cloud Shell, 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 Chức năng đám mây của bạn (5 yêu cầu mỗi giây trong vài phút), hãy sử 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 về Hàm đám mây, hãy nhấp vào Xem nhật ký.

b24157fd3376e6a8.png

Thao tác này sẽ đưa bạn đến phần Ghi nhật ký Stackdriver trong dự án của bạn. Phần này chỉ cho bạn thấy nhật ký Cloud Function của bạn.

5a36fa75d2fb0165.pngS

Tất cả các yêu cầu gửi đến Chức năng đám mây của bạn phải trả về mã trạng thái 200.

Khi xem nhật ký, bạn có thể thực hiện các thao tá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 khung thời gian cụ thể (tương đối hoặc tuyệt đối).
  • Bật tính năng truyền trực tuyến nhật ký (bằng tính năng Phát 751a4600016f34a7.pngSở đầu màn hình).
  • Sao chép một đường liên kết vào mục nhập nhật ký (để chia sẻ với các thành viên trong nhóm).
  • Hiển thị 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 hình ảnh).
  • Xuất nhật ký sang BigQuery, Cloud Storage hoặc Pub/Sub (hoặc chỉ cần tải xuống dưới dạng tệp JSON hoặc CSV).

6. Cập nhật hàm

Khi sử dụ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 với trình kiểm thử tải về số lệnh gọi mỗi giây và thời gian thực thi các lệnh gọi đó.

aaee3159bbe395d3.png 7ed347101da5eca0.pngS

Một công cụ chi tiết khác để quan sát độ trễ và lệnh gọi RPC là Stackdriver Trace, nhưng trước khi có thể sử dụng công cụ này, bạn cần thực hiện một vài thay đổi đối với Cloud Functions. Hãy thực hiện như sau:

  1. Thêm gói node-emoji cứu hộ làm phần phụ thuộc.
  2. Cập nhật mã hàm để sử dụng mô-đun nút-emoji và tạo ra độ trễ.
  3. Thêm một biến môi trường để bật tính năng Dấu vết ngăn xếp 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 đó.

39b0f8f98b18a6c0.pngS

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 như 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 Hàm đám mây trả về sau khi tạm dừng 300 mili giây.

Cuối cùng, hãy thêm một biến môi trường của Hàm đám mây có tên là GOOGLE_CLOUD_TRACE_ENABLED rồi thiết lập thành true như sau:

9205bd277b76aa21.pngs

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 cho Hàm đám mây mới triển khai:

$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \
   | vegeta attack -rate=5 -duration=120s \
   > results.bin

Bây giờ, bạn đã sẵn sàng quan sát danh sách các dấu vết được tạo mà không có yêu cầu thiết lập nào khác cũng như không có thư viện theo dõi cụ thể nào trong mã của mình!

7. Theo dõi hàm đám mây đã cập nhật

Sử dụng trình đơn bên trái, chuyển đến Danh sách theo dõi (trong phần Stackdriver Trace).

576373f38cad6f8.pngS

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

44a36b758b49f88f.png.

Điều đó sẽ làm rõ ràng rằng độ trễ được giới thiệu trong Hàm đám mây thực sự được đo ở 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à Hàm đám mây thực hiện.

5815064fec87444b.png.

Nếu bạn muốn phóng to, chỉ cần nhấp và kéo trên biểu đồ. Chọn một khoảng thời gian tuỳ chỉnh trong biểu đồ theo dõi

Để thu nhỏ, hãy nhấp vào Huỷ thu phóng ở đầu trang.

Vì bạn đã triển khai một Hàm đám mây duy nhất, nên biểu đồ chỉ hiển thị 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 bộ lọc yêu cầu.

Chuyển đến mục Tổng quan trong trình đơn bên trái:

e920cfca2a50899e.png

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à các thông tin chi tiết khác.

ef5a45647967d275.png

Bạn cũng có thể tìm thấy khả năng tạo báo cáo tuỳ chỉnh dựa trên sự kết hợp giữa 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. Tính năng này thậm chí còn cho phép bạn so sánh các giá trị đã tạo với một đường cơ sở thời gian.

5bd34e9d13b47fb6.pngs

Nếu có thể thiết lập khoảng 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 Hàm đám mây ban đầu và hàm mới.

2cc0e9a3212b91bb.pngS

2e7b1ebf2f0a2b4f.png.

Loại báo cáo tuỳ chỉnh này có thể dùng để tìm thời điểm xảy ra vấn đề về hiệu suất và để theo dõi chỉ báo mức 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 tài nguyên

Lớp học lập trình đã kết thúc!

Mặc dù các công cụ Cloud Functions và Stackdriver là những nền tảng không máy chủ và không phát sinh chi phí khi không được sử dụng, nhưng hãy sử dụng dịch vụ đám mây tốt và xoá Hàm đám mây của bạn. Chỉ cần chọn hello-monitor trong mục Overview (Tổng quan) trong Cloud Functions rồi nhấp vào Delete (Xoá).

aceb633cf70a4a27.png

9. Tiếp theo là gì?

Sau đây là một số thông tin mà bạn cần đọc tiếp:

/