Lớp học lập trình và theo dõi chức năng đám mây

Mục tiêu của lớp học lập trình này là để bạn hiểu được cách tận dụng các công cụ ghi nhật ký và giám sát được cung cấp cho tất cả các nhà phát triển Chức năng đám mây. 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ợ, đồng thời 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ủ.

Chúng tôi sẽ sử dụng hàm kích hoạt HTTP ở đây nhưng mọi chức năng trong phạm vi cũng áp dụng cho các ngôn ngữ khác và cho các hàm được kích hoạt bởi các sự kiện khác (bộ chứa lưu trữ, quán rượu/phụ, v.v.)

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

Nếu chưa có Tài khoản Google (Gmail hoặc Google Apps), thì bạn phải tạo một tài khoản. Đăng nhập vào bảng điều khiển của Google Cloud Platform (console.cloud.google.com) và tạo một dự án mới:

Ảnh chụp màn hình từ 2016-02-10 12:45:26.png

Hãy ghi nhớ mã dự án, một tên duy nhất trên tất cả các dự án Google Cloud (tên ở trên đã được sử dụng và sẽ không hoạt động cho bạn!). Lớp học này sẽ được gọi sau này trong lớp học lập trình này là PROJECT_ID.

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.

Nếu tham gia lớp học lập trình này, bạn sẽ không mất quá vài đô la, nhưng có thể sẽ hiệu quả hơn nếu bạn quyết định sử dụng nhiều tài nguyên hơn hoặc nếu bạn để các tài nguyên đó hoạt động (xem "cleanup" ở cuối tài liệu này).

Người dùng mới của Google Cloud Platform đủ điều kiện dùng thử 300 đô la dùng thử miễn phí.

Google Cloud Shell

Mặc dù bạn có thể dùng các chức năng của Google Cloud cùng các tính năng ghi nhật ký và theo dõi từ xa máy tính xách tay, nhưng trong lớp học lập trình này, chúng ta sẽ dùng Google Cloud Shell, một môi trường dòng lệnh chạy trong Cloud.

Máy ảo dựa trên Debian này được tải bằng tất cả công cụ phát triển mà bạn cần. cung cấp một thư mục gốc 5GB cố định và chạy trên Google Cloud, qua đó nâng cao đáng kể hiệu suất và khả năng xác thực mạng. Điều này có nghĩa là tất cả những gì bạn cần cho lớp học lập trình này là trình duyệt (có, nó hoạt động trên Chromebook).

Để kích hoạt Google Cloud Shell, từ bảng điều khiển dành cho nhà phát triển, bạn chỉ cần nhấp vào nút ở phía trên cùng bên phải (chỉ mất vài phút để cấp phép và kết nối với môi trường):

ActivateCloudShell.png.

Nhấp vào nút "Start Cloud Shell":

Ảnh chụp màn hình lúc 10:13,43 chiều ngày 14/6/2017

Sau khi kết nối với shell Cloud, bạn sẽ thấy rằng bạn đã được xác thực và dự án này đã được đặt thành PROJECT_ID của bạn :

gcloud auth list

Đầu ra lệnh

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

Đầu ra lệnh

[core]
project = <PROJECT_ID>

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

echo $GOOGLE_CLOUD_PROJECT

Đầu ra lệnh

<PROJECT_ID>

Nếu vì lý do nào đó mà dự án chưa được đặt, bạn chỉ cần đưa ra lệnh sau :

gcloud config set project <PROJECT_ID>

Bạn đang tìm kiếm PROJECT_ID của mình? Kiểm tra mã nhận dạng mà bạn đã sử dụng trong các bước thiết lập hoặc tìm kiếm mã đó trong trang tổng quan bảng điều khiển:

Project_ID.png.

LƯU Ý QUAN TRỌNG: 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 khu vực khác nhau. Tìm hiểu thêm trong Tài liệu về khu vực và amp; khu vực.

Để có nội dung cần theo dõi, hãy tạo một chức năng đám mây trong Hello World. Trong trình đơn bên trái của Bảng điều khiển, hãy nhấp vào Chức năng đám mây, sau đó "Create function" :

Đặt tên cho hàm mới "hello-monitor" :

... và giữ 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 tạo hàm bằng nút "Create" nút :

Sau giây lát, bạn sẽ thấy hàm của bạn được liệt kê là sẵn sàng để được gọi (như được biểu thị bằng dấu kiểm màu xanh lục) :

Bây giờ, chức năng đám mây đã được triển khai thành công, chúng ta sẽ kiểm tra chức năng đó từ dòng lệnh.

Trước tiên, bằng cách sử dụng Cloud Shell, hãy phát lệnh sau :

$ gcloud functions describe hello-monitor

URL này sẽ trả về nội dung mô tả về hàm, bao gồm cả URL cho httpsTrigger, là điểm cuối HTTP(S) để gọi hàm này. Giá trị này phải có dạng : https://<region>-<project-id>.cloudfunctions.net/hello-monitor

Giờ đây, việc kích hoạt hàm sẽ đơn giản như curl\39;ing url này :

$ curl https://<region>-<project-id>.cloudfunctions.net/hello-monitor
Hello World!

Giờ đây, chúng tôi sẽ sử dụng Vegeta, một công cụ kiểm tra tải HTTP đơn giản. Để cài đặt tính năng này, từ 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 hàm trên đá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

Từ chế độ xem chi tiết hàm, nhấp vào "Xem nhật ký" trình đơn bên phải :

Thao tác này sẽ đưa bạn đến phần Stackman Logging của dự án, chỉ hiển thị cho bạn những nhật ký chức năng đám mây :

Hy vọng rằng tất cả yêu cầu đối với hàm của bạn sẽ trả về mã trạng thái 200.

Khi sử dụng trình xem nhật ký này, bạn có thể :

  • lọc theo cấp nhật ký (trong trường hợp này, 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 phát trực tuyến nhật ký ("play" nút ở đầ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ột mục nhật ký trong ngữ cảnh tài nguyên
  • ghim mục nhập nhật ký (dưới dạng gợi ý hình ảnh)
  • xuất nhật ký sang BigQuery, Cloud Storage hoặc Cloud Pub/Sub (hoặc chỉ cần tải xuống nhật ký ở định dạng JSON hoặc CSV)

Ngoài ra, hãy lưu ý rằng bộ chọn phía trên cùng bên trái có thể lọc nhật ký theo hàm. Bạn cũng có thể tìm nhãn hoặc tìm kiếm toàn bộ văn bản trong thanh tìm kiếm ở đầu cửa sổ. Trong trường hợp của chúng ta, các nhãn là hello-monitor (tên của hàm) cũng như giá trị nhận dạng thực thi cho mỗi yêu cầu.

Bạn cũng có thể sao chép bộ lọc để chia sẻ (xem trình đơn thả xuống trong hộp tìm kiếm) :

Bằng cách sử dụng bảng điều khiển, hãy chuyển đến &hlt; thông tin chi tiết về hàm" xem và quan sát mức tăng đột biến mà chúng tôi đã tạo bằng trình kiểm tra tải, cả về số lượng lệnh gọi mỗi giây và về thời gian thực thi :

Một công cụ chi tiết hơn để quan sát độ trễ và lệnh gọi RPC là tính năng Stackdriver Trace, nhưng trước khi có thể sử dụng tính năng này, chúng ta cần thực hiện một vài thay đổi đối với các hàm của mình, cụ thể là:

  1. Thêm gói node-emoji cứu người làm phần phụ thuộc
  2. Cập nhật mã hàm để sử dụng mô-đun nút biểu tượng cảm xúc và gây ra một số độ trễ
  3. Thêm một biến môi trường để bật Stackdriver Trace cho các chức năng đám mây

Từ trang "Function hiển thị chi tiết" 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 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 tin nhắn mà hàm trả về sau khi tạm dừng trong 300 mili giây.

Cuối cùng, hãy thêm biến môi trường Hàm Cloud có tên là GOOGLE_CLOUD_TRACE_ENABLED và đặt thành true như sau:

Đừng quên nhấp vào Lưu!

Bây giờ, hãy quay lại Cloud Shell và gọi lại lệnh để tạo một số lượt tải cho hàm mới được triển khai :

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

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

Bằng cách sử dụng trình đơn bên trái, hãy chuyển đến danh sách Trace (trong Stackdriver Trace) :

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

Điều này phải thể hiện rõ ràng rằng độ trễ được giới thiệu trong hàm của chúng ta thực sự được đo lường ở mức 300 mili giây.

Mỗi dấu chấm trên biểu đồ này 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 HTTP, trạng thái, nhãn, đường liên kết quay trở lại mục nhập nhật ký tương ứng và bất kỳ lệnh gọi RPC nào tiếp theo mà hàm 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 đồ :Chọn một khoảng thời gian tùy chỉnh trong biểu đồ theo dõi

Để thu nhỏ, nhấp vào nút "Hủy thu phóng" ở đầu trang.

Vì chúng ta đã triển khai một hàm 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 cách sử dụng bộ lọc yêu cầu.

Hãy chuyển đến phần Dấu vết "Tổng quan" trên trình đơn bên trái :

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

... cũng như khả năng tạo báo cáo tuỳ chỉnh dựa trên sự kế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ị đã tạo với đường cơ sở theo thời gian :

Nếu quản lý để thiết lập phạm vi thời gian chính xác và có đủ điểm dữ liệu, bạn có thể tạo báo cáo cho thấy độ trễ quan trọng giữa hàm ban đầu và hàm mới :

Bạn có thể sử dụng một báo cáo tùy chỉnh như vậy để tìm thời điểm một vấn đề về hiệu suất được áp dụng cũng như để 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.

Chúng tôi kết thúc lớp học lập trình của chúng tôi về việc triển khai chức năng đám mây mới, điều hướng qua nhật ký và quan sát yêu cầu của Google.

Mặc dù các công cụ Chức năng đám mây và Công cụ xếp chồng là các nền tảng không máy chủ, sẽ không phải chịu chi phí khi không được sử dụng, nhưng để trở thành một công dân đám mây tốt, hãy để chức năng của chúng tôi bị xóa.

Bạn chỉ cần chọn hàm hello-monitor trong trang tổng quan về Chức năng đám mây rồi nhấp "delete".

Thao tác này sẽ kết thúc lớp học lập trình đơn giản này bằng tính năng ghi nhật ký và theo dõi chức năng đám mây!

Dưới đây là một số bài viết tiếp theo :

/