首頁  >  文章  >  後端開發  >  超越 GUI 和 CLI 限制自動執行 MongoDB Atlas 觸發器日誌下載

超越 GUI 和 CLI 限制自動執行 MongoDB Atlas 觸發器日誌下載

Susan Sarandon
Susan Sarandon原創
2024-11-02 05:44:02247瀏覽

Automating MongoDB Atlas Trigger Log Downloads Beyond the GUI and CLI Limitations

我最近遇到一個場景,需要從本地 MongoDB Atlas 觸發器下載大量日誌。目前Atlas下載日誌的方式有3種:

  1. 使用 GUI
  2. 使用 CLI
  3. 使用應用程式服務管理 API

但是,GUI 和 CLI 選項對於可下載的日誌量有限制,特別是 10,000 條日誌的上限。

GUI 和 CLI 對日誌下載的限制

使用 GUI

透過 GUI,使用者可以按日期、類型、使用者 ID 或請求 ID 過濾日誌,但下載時的限制設定為 10,000 個日誌。

使用 CLI

使用 CLI,我們可以執行以下命令:

appservices logs list --project 5e208aa2d5ec1375ecd5*** --app triggers_realmapp-**** --type=trigger --start="2024-10-15T00:00:00.000+0000" -o log.logs

但是,這也有相同的下載限制,即 10,000 個日誌。

解決方案:帶有分頁的應用程式服務管理 API

為了克服這些下載限制,應用程式服務管理 API 提供了一種透過分頁存取日誌的方法。透過實作分頁,使用者可以獲得超出預設 10K 限制的日誌。

有關透過 API 使用分頁的詳細說明可以在 MongoDB 文件中找到:取得分頁日誌。

建議的解決方案:用於大型日誌下載的自動化腳本

為了簡化這個過程,我開發了一個使用分頁自動取得日誌的腳本。該腳本可在此處的公共儲存庫中找到:Atlas App Logs Aggregator。

腳本的主要特點

  • 自動日誌取得:從 MongoDB Atlas 應用服務取得日誌,並透過分頁支援大型日誌集。
  • 彈性的日期範圍過濾:允許使用 start_date 和 end_date 參數進行可選的日期過濾。
  • ISO 8601 驗證:驗證日期以確保它們遵循 ISO 8601 格式。
  • 安全性驗證:支援使用 MongoDB Atlas 公用和私有 API 金鑰進行驗證。
  • 可選的user_id,用於使用者ID過濾日誌。
  • 可選的co_id,用於相關ID過濾日誌。
  • 使用errors_only選項僅取得錯誤日誌。
  • 使用 --filter 選項按鍵值對過濾日誌。

該腳本僅使用 GET 端點並將日誌聚合到檔案中,而不修改任何資料。

如何使用

要求

  • Python 3.6 或更高版本。
  • requirements.txt 函式庫相依性。

安裝

建立虛擬環境

appservices logs list --project 5e208aa2d5ec1375ecd5*** --app triggers_realmapp-**** --type=trigger --start="2024-10-15T00:00:00.000+0000" -o log.logs

安裝依賴項

python3 -m venv venv
source venv/bin/activate  # On Windows use `venv\Scripts\activate`

用法

命令列參數

  • project_id (必填):Atlas 專案 ID(十六進位字串)。 app_id (必填):應用程式 ID(字串)。
  • public_api_key(必需):Atlas 公用 API 金鑰(字串)。
  • private_api_key(必需):Atlas 私有 API 金鑰(帶連字符的字串)。
  • --start_date(可選):ISO 8601 格式的開始日期 (YYYY-MM-DDTHH:MM:SS.MMMZ)。
  • --end_date(可選):ISO 8601 格式的結束日期 (YYYY-MM-DDTHH:MM:SS.MMMZ)。
  • --type(可選):支援的日誌類型的逗號分隔清單。目前,可用的類型有:TRIGGER_FAILURE、TRIGGER_ERROR_HANDLER、DB_TRIGGER、AUTH_TRIGGER、SCHEDULED_TRIGGER、FUNCTION、SERVICE_FUNCTION、STREAM_FUNCTION、SERVICE_STREAM_FUNCTION、AUTH、WEBH.PfTH、WEJID、XXPSY_XPDAL、UINT_RFU4_UU​​S4U樣SYNC_SESSION_START、SYNC_SESSION_END、SYNC_CLIENT_WRITE、SYNC_ERROR 、SYNC_OTHER 、SCHEMA_ADDITIVE_CHANGE、SCHEMA_GENERATION、SCHEMA_VALIDATION、LOG_FORWARDER
  • --user_id(可選):僅傳回與給定 user_id 關聯的日誌訊息。
  • --co_id(可選):僅傳回與給定請求相關 ID 關聯的日誌訊息。
  • --filter(可選):按鍵值對過濾日誌(例如,--filter event_subscription_name=,function_name=)。
  • --errors_only(可選):僅傳回錯誤日誌訊息。
  • --verbose (可選):啟用詳細日誌資訊。

例子

pip install -r requirements.txt

帶有可選參數

python main.py <project_id> <app_id> <public_api_key> <private_api_key> --start_date 2024-10-05T14:30:00.000Z --end_date 2024-10-06T14:30:00.000Z --type TRIGGER_FAILURE,SCHEMA_GENERATION

如果未提供 start_date 和 end_date,腳本將預設 start_date 為距離目前時間最近 24 小時。

 過濾日誌

--filter 選項可讓您按鍵值對過濾日誌。此選項接受多個以空格分隔的鍵值對。每個鍵值對的格式應為 key=value。

鍵值對必須是端點傳回的值。這樣它將使用它們來過濾並僅保留那些匹配的。例如,對於“type”:“SCHEDULED_TRIGGER”,響應鍵值將類似於:

python main.py <project_id> <app_id> <public_api_key> <private_api_key> --start_date 2024-10-05T14:30:00.000Z --type TRIGGER_FAILURE,SCHEMA_GENERATION --user_id 671d2e2010733ecbaa2bab8f --filter event_subscription_name=getUnpausedClustersMetrics

我們可以在 --filter 選項中使用其中任何一個(例如,--filter event_subscription_name=getUnpausedClustersMetrics)

記錄

該腳本支援記錄到控制台和日誌檔案。預設情況下,日誌檔案儲存在logs資料夾中。日誌檔案名稱包含時間戳,以確保每次運行的唯一性。

--verbose:使用此標誌時,日誌等級設定為 DEBUG,提供詳細的日誌記錄資訊。如果沒有此標誌,日誌等級將設定為 INFO。

日誌檔案位置

日誌檔案儲存在logs資料夾中。每個日誌檔案都以時間戳命名,以確保來自不同運行的日誌不會相互覆蓋。

日誌檔案名稱範例

appservices logs list --project 5e208aa2d5ec1375ecd5*** --app triggers_realmapp-**** --type=trigger --start="2024-10-15T00:00:00.000+0000" -o log.logs

好處

  • 自動日誌檢索:輕鬆從 MongoDB Atlas 應用服務取得日誌,無需手動幹預。
  • 日期範圍過濾:按日期範圍過濾日誌以關注特定時期。
  • 分頁支援:使用分頁有效處理大量日誌。
  • 驗證:確保日期輸入的格式正確,以避免錯誤。

免責聲明

請注意:此儲存庫「按原樣」發布,不提供任何形式的保證,包括但不限於其安裝、使用或效能。我們不承擔任何及所有明示或暗示的保證,包括但不限於對非侵權、適銷性和/或特定用途適用性的任何保證。我們不保證該技術能夠滿足您的要求,不保證其運作不會中斷或沒有錯誤,也不保證任何錯誤都會被修正。

使用這些腳本和工具的任何風險均由您自行承擔。無法保證它們已在類似環境中經過徹底測試,並且我們對其使用過程中發生的任何損壞或資料遺失不承擔任何責任。

您有責任在任何非測試環境中使用之前徹底檢查和測試您正在執行的任何腳本。

以上是超越 GUI 和 CLI 限制自動執行 MongoDB Atlas 觸發器日誌下載的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn