使用 Canary 藍圖 - Amazon CloudWatch

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Canary 藍圖

本節提供有關每個 Canary 藍圖以及每個藍圖最適合工作的詳細資訊。提供的藍圖適用於下列 Canary 類型:

  • 活動訊號監控

  • API Canary

  • 中斷的連結檢查程式

  • 視覺化監控

  • Canary 記錄器

  • GUI 工作流程

當您使用藍圖來建立 Canary 時,當您填寫主控台中的 CloudWatch欄位時,頁面的指令碼編輯器區域會顯示您要建立為 Node.js 指令碼的 Canary。您也可以在此區域編輯您的 Canary 以進一步自訂。

活動訊號監控

活動訊號指令碼會載入指定的 ,URL並儲存頁面的螢幕擷取畫面和HTTP封存檔案 (HAR 檔案)。它們也會儲存已存取 的日誌URLs。

您可以使用 HAR 檔案來檢視網頁的詳細效能資料。您可以分析 Web 請求的清單,並掌握效能問題,例如項目載入的時間。

如果您的 Canary 使用 syn-nodejs-puppeteer-3.1或更新版本的執行時間版本,您可以使用活動訊號監控藍圖來監控多個 ,URLs並在 Canary 執行報告的步驟摘要URL中查看每個 的狀態、持續時間、相關聯的螢幕擷取畫面和失敗原因。

API Canary

API Canary 可以測試 REST 的基本讀取和寫入函數API。REST 表示表示式狀態傳輸,是開發人員在建立 時遵循的一組規則API。其中一個規則指出特定 的連結URL應傳回一段資料。

Canary 可以使用任何 APIs並測試所有類型的功能。每個 Canary 都可以進行多次API呼叫。

在使用執行期版本 syn-nodejs-2.2或更新版本的 Canary 中,APICanary 藍圖支援多步驟 Canary,以監控您的 APIs作為HTTP步驟。您可以在單一 Canary APIs中測試多個 。每個步驟都是單獨的請求,可以存取不同的 URL、使用不同的標頭,以及使用不同的規則來擷取標頭和回應主體。藉由不擷取標頭和回應內文,您可以防止記錄敏感資料。

API Canary 中的每個請求都包含下列資訊:

  • 端點 ,這是您請求URL的 。

  • 方法,這是傳送到伺服器的請求類型。REST APIs 支援 GET (讀取)、 POST (寫入)、 PUT (更新)、 PATCH (更新) 和 DELETE(刪除) 操作。

  • 標頭,同時提供資訊給用戶端和伺服器。它們用於身分驗證並提供內文內容的相關資訊。如需有效標頭的清單,請參閱HTTP標頭

  • 資料 (或內文),包含要傳送到伺服器的資訊。這僅用於 POST、PUT、 PATCH或 DELETE請求。

API Canary 藍圖支援 GET和 POST 方法。當您使用此藍圖時,必須指定標頭。例如,您可以指定 Authorization 作為 Key (鍵),並將必要的授權資料指定為該鍵的 Value (值)

如果您正在測試POST請求,也可以指定要在資料欄位中發佈的內容。

與 API Gateway 整合

API 藍圖已與 Amazon API Gateway 整合。這可讓您從與 Canary 相同的 AWS 帳戶和區域選取API閘道API和階段,或從 API Gateway 上傳 Swagger 範本以進行跨帳戶和跨區域API監控。然後,您可以在主控台中選擇其餘的詳細資訊來建立 Canary,而不是從頭開始輸入。如需API閘道的詳細資訊,請參閱什麼是 Amazon API Gateway?

使用私有 API

您可以在 Amazon API Gateway API中建立使用私有的 Canary。如需詳細資訊,請參閱在 Amazon API Gateway API中建立私有?

中斷的連結檢查程式會使用 收集URL您正在測試的 內的所有連結document.getElementsByTagName('a')。它最多只會測試您指定的連結數目,而且 URL本身會視為第一個連結。例如,如果您想要檢查包含五個連結之頁面上的所有連結,您必須指定要讓 Canary 跟隨六個連結。

中斷連結檢查程式 Canary 使用 syn-nodejs-2.0-beta 執行時間或更新版本支援下列額外的功能:

  • 提供一份報告,其中包含已檢查的連結、狀態碼、失敗原因 (如果有的話),以及來源和目的地頁面螢幕擷取畫面。

  • 檢視 Canary 結果時,您可以篩選僅查看中斷的連結,然後根據失敗的原因修正連結。

  • 此版本會擷取每個連結的附註來源頁面螢幕擷取畫面,並反白顯示找到連結的錨點。不會對隱藏的元件對象標註。

  • 您可以將此版本設定為擷取來源和目的地頁面、僅來源頁面或僅目的地頁面的螢幕擷取畫面。

  • 此版本修正了舊版中的問題,亦即,即使從第一頁湊集了更多連結,Canary 指令碼也會在第一個中斷的連結後停止。

如果您想使用 syn-1.0 更新現有 Canary,以使用新的執行時間,您必須刪除並重新建立 Canary。將現有的 Canary 更新到新的執行時間不會使這些功能可用。

中斷連結檢查程式 Canary 會偵測下列類型的連結錯誤:

  • 404 找不到網頁

  • 無效的主機名稱

  • 錯誤 URL。例如, URL 缺少括號、有額外的斜線,或使用錯誤的通訊協定。

  • 無效的HTTP回應代碼。

  • 主機伺服器傳回沒有內容也沒有回應代碼的空回應。

  • 在 Canary 執行期間,HTTP請求會持續逾時。

  • 主機持續中斷連線,因為它設定錯誤或太忙碌。

視覺化監控藍圖

視覺化監控藍圖包含可比較在 Canary 執行期間擷取的螢幕擷取畫面與基準 Canary 執行期間擷取的螢幕擷取畫面的程式碼。如果兩個螢幕擷取畫面之間的差異超過閾值百分比,則 Canary 失敗。執行 syn-puppeteer-node-3.2 和更新版本的 Canary 支援視覺化監控。目前,執行 Python 和 Selenium 的 Canary 不支援它。

視覺化監控藍圖在預設藍圖 Canary 指令碼中包含下列程式碼行,可啟用視覺化監控。

syntheticsConfiguration.withVisualCompareWithBaseRun(true);

將此行新增至指令碼之後,Canary 第一次成功執行時,它會使用該執行期間擷取的螢幕擷取畫面作為比較基準。在第一次 Canary 執行之後,您可以使用 CloudWatch 主控台編輯 Canary,以執行下列任何動作:

  • 將 Canary 的下一個執行設定為新基準。

  • 在目前的基準螢幕擷取畫面上繪製邊界,以指定要在視覺化比較期間忽略的螢幕擷取畫面區域。

  • 移除用於視覺化監控的螢幕擷取畫面。

如需使用 CloudWatch 主控台編輯 Canary 的詳細資訊,請參閱 編輯或刪除 Canary

您也可以使用 nextrunlastrun 參數,或在 中指定 Canary Run ID,來變更用作基準的 Canary RunUpdateCanaryAPI。

使用視覺化監控藍圖時,請輸入您要擷取螢幕擷取畫面URL所在的 ,並以百分比來指定差異閾值。執行基準後,未來執行 Canary 可偵測大於該閾值的視覺化差異,進而觸發 Canary 失敗。執行基線後,您也可以編輯 Canary,在基線螢幕擷取畫面上「繪製」邊界,這些邊界要在視覺化監控期間忽略。

視覺化監控功能由 ImageMagick 開放原始碼軟體工具組提供支援。如需詳細資訊,請參閱 ImageMagick

Canary 記錄器

透過 Canary Recorder 藍圖,您可以使用 CloudWatch Synthetics Recorder 在網站上記錄您的點擊和輸入動作,並自動產生 Node.js 指令碼,可用於建立遵循相同步驟的 Canary。Synthetics Recorder CloudWatch是由 Amazon 提供的 Google Chrome 擴充功能。

額度 : CloudWatch Synthetics 記錄器是以無周邊記錄器 為基礎。

如需詳細資訊,請參閱使用適用於 Google Chrome 的 CloudWatch Synthetics Recorder

GUI 工作流程建置器

GUI Workflow Builder 藍圖會驗證是否可以在您的網頁上採取動作。例如,如果您有一個包含登入表單的網頁,Canary 可以填入使用者和密碼欄位並提交表單,以確認網頁是否正常運作。

當您使用藍圖建立此類型的 Canary 時,請指定希望 Canary 在網頁上採取的動作。您可以使用的動作如下:

  • 按一下— 選取您指定的元素,並模擬使用者按一下或選擇元素。

    若要指定 Node.js 指令碼中的元素,請使用 [id=]a[class=]

    若要指定 Python 指令碼中的元素,請使用 xpath //*[@id=]//*[@class=]

  • 驗證選擇器— 驗證指定的元素是否存在於網頁上。此測試有助於驗證先前的動作是否導致正確的元素填入頁面。

    若要指定要在 Node.js 指令碼中驗證的元素,請使用 [id=]a[class=]

    若要指定要在 Python 指令碼中驗證的元素,請使用 xpath //*[@id=]//*[class=]

  • 驗證文字— 驗證指定的字串是否包含在目標元素中。此測試有助於驗證先前的動作是否導致顯示正確的文字。

    若要指定 Node.js 指令碼中的元素,請使用 div[@id=]//h1 之類的格式,因為此動作使用 Puppeteer 中的 waitForXPath 函數。

    若要指定 Python 指令碼中的元素,請使用 //*[@id=] 或 //*[@class=] 之類的 xpath 格式,因為此動作使用 Selenium 中的 implicitly_wait 函數。

  • 輸入文字— 在目標元素中寫入指定的文字。

    若要指定要在 Node.js 指令碼中驗證的元素,請使用 [id=]a[class=]

    若要指定要在 Python 指令碼中驗證的元素,請使用 xpath //*[@id=]//*[@class=]

  • 按一下並導覽— 選擇指定的元素後等待整個頁面載入。這很適合用於需要重新載入頁面時。

    若要指定 Node.js 指令碼中的元素,請使用 [id=]a[class=]

    若要指定 Python 指令碼中的元素,請使用 xpath //*[@id=]//*[@class=]

例如,以下藍圖使用 Node.js。它會按一下指定 firstButton上的 URL,驗證是否顯示具有預期文字的預期選取器,在Test_Customer名稱欄位中輸入名稱,按一下登入按鈕,然後檢查下一頁的歡迎文字,以確認登入是否成功。

主控台中的建立 Canary 頁面,其中包含為GUI工作流程藍圖填寫的欄位。

GUI 使用下列執行時間的工作流程 Canary 也提供每個 Canary 執行步驟的摘要。您可以使用與每個步驟相關聯的螢幕擷取畫面和錯誤訊息,以尋找失敗的根本原因。

  • syn-nodejs-2.0 或更新版本

  • syn-python-selenium-1.0 或更新版本