[譯] 如何將 Stackdriver 連線到智慧家居伺服器以進行錯誤記錄

Android_開發者發表於2019-02-25

你的智慧家居裝置與 Google Assistant 整合時,你可能會遇到以下錯誤:“無法更新設定,請檢查你的連線。”

[譯] 如何將 Stackdriver 連線到智慧家居伺服器以進行錯誤記錄

Google Assistant 設定中報告的常見錯誤

這個錯誤可能源於賬號連線和 SYNC 同步過程的許多原因。

為了更好地瞭解這些錯誤,你可以使用 Stackdriver,Google Cloud 的日誌系統。當賬戶連線或隨後的 SYNC 事件發生錯誤時,它會自動記錄錯誤並向你提供資訊。

[譯] 如何將 Stackdriver 連線到智慧家居伺服器以進行錯誤記錄

可能來自堆疊驅動程式的錯誤報告訊息的螢幕截圖

你收到的日誌會自動清除並移除任何個人可識別資訊(PII),而且不會包含詳細的追蹤。

啟動時,你可以導航到專案的 Google Cloud 控制檯,在抽屜導航的 Stackdriver 部分中選擇 Logging 選項:

[譯] 如何將 Stackdriver 連線到智慧家居伺服器以進行錯誤記錄

你可以通過 Google Assistant Action > All version_id 來檢視專門為你的智慧家居實現而出現的錯誤:

[譯] 如何將 Stackdriver 連線到智慧家居伺服器以進行錯誤記錄

儘管很方便,但必須轉到單獨的頁面去檢視錯誤可能不適合你的開發流,而且它可能不會為你提供易於訪問的資料,例如,包含在每週統計報表中的資料。讓我們看看如何將你的日誌從 Stackdriver 匯出到你的基礎設施中,讓你在這些資料之上構建額外的整合。

使用 Stackdriver,你可以設定包含帶有特定過濾器的日誌接收裝置。這個接收裝置中的日誌可以通過 Cloud 釋出/訂閱傳送到你擁有的端點。

域名驗證

在將訊息推送到端點之前,你需要驗證你自己的域名。你可以通過 Google Cloud 控制檯的 APIs & Services 部分進行註冊。

[譯] 如何將 Stackdriver 連線到智慧家居伺服器以進行錯誤記錄

Credentials > Domain Verification 下,新增一個域名。在新增完你自己的域名之後,你將被帶到 Google 搜尋控制。在繼續操作之前,按照說明完成對你完整的驗證:

[譯] 如何將 Stackdriver 連線到智慧家居伺服器以進行錯誤記錄

配置釋出/訂閱

使用Google Cloud 釋出/訂閱,你可以靜任務配置為在某些事件上執行,例如,當新日誌出現在 Stackdriver 中時,通過新增過濾器你可以限制觸發事件的日誌型別。你也可以配置伺服器端點來訂閱這些事件。

要開始匯出 SYNC 錯誤,請輸入過濾器 “text:SYNC”,點選 CREATE EXPORT 按鈕。在這裡,你可以建立一個連線到 Google Cloud 釋出/訂閱的主題接收器。這將是你能夠在每次出現日誌條目時處理事件:

[譯] 如何將 Stackdriver 連線到智慧家居伺服器以進行錯誤記錄

在抽屜導航中,開啟發布/訂閱概述,建立一個新的訂閱:

[譯] 如何將 Stackdriver 連線到智慧家居伺服器以進行錯誤記錄

這裡,你可以新建一個訂閱。對於交付型別,輸入用於接收訂閱的的 URL。為了進行驗證域名驗證,你必須擁有自己的伺服器:

[譯] 如何將 Stackdriver 連線到智慧家居伺服器以進行錯誤記錄

在你的伺服器上,為了接受端點,你需要新增一個處理器。在這個示例中,它是 /alerts/stackdriver。這是你伺服器上的一個鉤子。Cloud 釋出/訂閱會向 URL 傳送一個在請求體重包含日誌資料的 POST 請求。下面的程式碼片段顯示了使用 Node.js 的實現:

app.post('/alerts/stackdriver', (req, res) => {
  console.log('post stackdriver called', req.body);
  res.status(204).send('success');
  if (!!req.body.message && !!req.body.message.data) {
    const data = Buffer.from(req.body.message.data, 'base64')
      .toString('utf8');
    console.log('data: ', data);
    // optionally use regexp here to find request id and failure reason
  }
});
複製程式碼

我們現在可以測試這個釋出/訂閱主題是否有效。在你的智慧家居整合中,設定你的 SYNC 回覆返回一個無效的裝置型別,例如 LART。以下程式碼片段是這個響應示例:

const app = smarthome();
app.onSync(body => {
  return {
    requestId: body.requestId,
    payload: {
      agentUserId: '123',
      devices: [{
        type: 'action.devices.types.LART' 
        // More metadata
      }]
    }
  }
})
複製程式碼

當你嘗試連線你的賬戶時,你會在 Google Assistant 設定中看到一個錯誤,然後在 StackDriver 中看到與之對應的錯誤:

[譯] 如何將 Stackdriver 連線到智慧家居伺服器以進行錯誤記錄

[譯] 如何將 Stackdriver 連線到智慧家居伺服器以進行錯誤記錄

在你的伺服器中,你也會看到此錯誤正在被記錄。當你遇到此錯誤時,你可以檢視已傳送的 SYNC,並確定該錯誤來自裝置型別的錯誤。你可以通過修復返回此裝置資訊的字串來修復 webhook 中的錯誤。你可以在以下程式碼片段中看到更正的內容:

const app = smarthome();
  app.onSync(body => {
    return {
      requestId: body.requestId,
      payload: {
        agentUserId: '123',
        devices: [{
          type: 'action.devices.types.LIGHT'
          // More metadata
        }]
      }
   }
})
複製程式碼

一旦你開始獲取這些錯誤,你可以做許多事情來提高你的智慧家居整合的可靠性,例如新增電子郵件警告或建立常見問題的儀表盤。通過及時發現這些問題並獲取正在發生的事件的詳細資訊,你可以更快、更有信心地進行更正。

如果發現譯文存在錯誤或其他需要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可獲得相應獎勵積分。文章開頭的 本文永久連結 即為本文在 GitHub 上的 MarkDown 連結。


掘金翻譯計劃 是一個翻譯優質網際網路技術文章的社群,文章來源為 掘金 上的英文分享文章。內容覆蓋 AndroidiOS前端後端區塊鏈產品設計人工智慧等領域,想要檢視更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章