Share via


安裝 Azure Operator Insights 擷取代理程式,並將其設定為上傳數據

當您遵循本文時,您會在網路中虛擬機 (VM) 上設定 Azure Operator Insights 擷取代理程式 ,並將其設定為將數據上傳至數據產品。 此擷取代理程式支援上傳:

  • 儲存在 SFTP 伺服器上的檔案。
  • 確認的行動內容雲端 (MCC) 事件數據記錄 (EDR) 數據流。

如需擷取代理程式的概觀,請參閱 擷取代理程式概觀

必要條件

從資料產品的檔中,取得:

  • 您打算安裝 VM 代理程式的 VM 規格。
  • 擷取代理程式的範例組態。

VM 安全性建議

用於擷取代理程式的 VM 應該設定為安全性的最佳做法。 我們建議執行下列動作:

網路

使用 Azure VM 時:

  • 為 VM 提供私人 IP 位址。
  • 將網路安全組 (NSG) 設定為只允許執行代理程式和維護 VM 所需埠上的網路流量。
  • 除此之外,網路設定取決於資料產品上是否已設定受限制的存取權(您是否使用服務端點來存取數據產品的輸入記憶體帳戶)。 某些網路設定可能會產生額外的成本,例如 VM 與數據產品輸入記憶體帳戶之間的 Azure 虛擬網路。

使用內部部署 VM 時:

  • 將防火牆設定為只允許執行代理程式和維護 VM 所需埠上的網路流量。

磁碟加密

確定已啟用 Azure 磁碟加密(這是您建立 VM 時的預設值)。

作業系統版本

  • 讓OS版本保持最新狀態,以避免已知的弱點。
  • 將 VM 設定為定期檢查遺漏的系統更新。

存取

將 VM 的存取限制為最少的使用者集。 在 VM 上設定稽核記錄 ,例如,使用 Linux 稽核套件來記錄登入嘗試和登入使用者所採取的動作。

建議您限制下列類型的存取。

  • 管理員 VM 的存取權(例如,停止/啟動/安裝擷取代理程式)。
  • 存取儲存記錄的目錄: /var/log/az-aoi-ingestion/
  • 存取您在此程式期間所建立之服務主體的受控識別或憑證和私鑰。
  • 存取您在此程式期間在 VM 上建立的秘密目錄。

適用於雲端的 Microsoft Defender

使用 Azure VM 時,也請遵循來自 適用於雲端的 Microsoft Defender 的所有建議。 您可以流覽至 VM,然後選取 [安全性],在入口網站中找到這些建議。

將驗證設定為 Azure

擷取代理程式必須能夠向數據產品所建立的 Azure 金鑰保存庫 進行驗證,才能擷取記憶體認證。 驗證方法可以是:

  • 具有憑證認證的服務主體。 如果擷取代理程式是在 Azure 外部執行,例如在內部部署網路中,您必須使用此方法。
  • 受控識別。 如果擷取代理程式正在 Azure VM 上執行,建議您使用此方法。 它不需要處理任何認證(不同於服務主體)。

重要

您可能需要組織中的 Microsoft Entra 租使用者系統管理員,才能為您執行此設定。

使用受控識別進行驗證

如果擷取代理程式正在 Azure 中執行,我們建議使用受控識別。 如需詳細資訊,請參閱 受控識別的概觀

注意

Azure VM 上的擷取代理程式同時支援系統指派和使用者指派的受控識別。 針對多個代理程式,使用者指派的受控識別會比較簡單,因為您可以針對執行代理程式的所有 VM 授權數據產品 金鑰保存庫 身分識別。

  1. 依照管理使用者指派的受控識別中的 指示,建立或取得使用者指派的受控識別。 如果您打算使用系統指派的受控識別,請勿建立使用者指派的受控識別。
  2. 依照使用受控識別的類型,使用 Azure 入口網站 在 VM 上設定 Azure 資源的受控識別中的指示。
  3. 請注意受控識別的物件標識碼。 對象標識碼是xxxxxxxx-xxxx-xxxx-xxxx-xxxx格式的 UUID,其中每個字元都是十六進位數位。

您現在可以授與數據產品 金鑰保存庫 的許可權。

使用服務主體進行驗證

如果擷取代理程式是在 Azure 外部執行,例如內部部署網路,則您無法使用受控識別,而必須改為使用具有憑證認證的服務主體向數據產品 金鑰保存庫 進行驗證。 每個代理程式也必須有儲存在虛擬機上的憑證複本。

建立服務主體

  1. 建立或取得 Microsoft Entra ID 服務主體。 遵循在入口網站中建立 Microsoft Entra 應用程式和服務主體中 詳述的指示。 將 [ 重新導向 URI] 字段保留空白。
  2. 請注意應用程式 (用戶端) 識別符,以及您的 Microsoft Entra Directory (tenant) 標識符(這些標識符是 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 格式的 UUID,其中每個字元都是十六進位數位)。

準備服務主體的憑證

擷取代理程式僅支援服務主體的憑證認證。 無論您針對每個 VM 使用相同的憑證和金鑰,還是針對每個 VM 使用唯一的憑證和密鑰,都是由您決定的。 每個 VM 使用憑證可提供更佳的安全性,而且如果金鑰流失或憑證過期,則影響較小。 不過,此方法會增加更高的可維護性和操作複雜度。

  1. 取得一或多個憑證。 強烈建議您從證書頒發機構單位使用受信任的憑證。 您可以從 Azure 金鑰保存庫 產生憑證:請參閱使用 Azure 入口網站 從 金鑰保存庫 設定和擷取憑證。 這麼做可讓您設定到期警示,並讓您有時間重新產生新的憑證,並在擷取代理程式到期之前將其套用至您的擷取代理程式。 憑證到期后,代理程式就無法向 Azure 進行驗證,且不再上傳數據。 如需此方法的詳細資訊,請參閱更新 Azure 金鑰保存庫 憑證。 如果您選擇使用 Azure 金鑰保存庫,請:
    • 此 Azure 金鑰保存庫 必須是與 Data Product 金鑰保存庫 不同的實例,可能是您已經控制的實例,或是新的實例。
    • 您需要此 Azure 金鑰保存庫 的「金鑰保存庫 憑證官員」角色,才能將憑證新增至 金鑰保存庫。 如需如何在 Azure 中指派角色的詳細資訊,請參閱使用 Azure 入口網站 指派 Azure 角色。
  2. 在入口網站中建立 Microsoft Entra 應用程式和服務主體之後 ,將憑證或憑證新增為服務主體的認證。
  3. 請確定憑證以 PKCS#12 (P12) 格式提供,且沒有保護憑證的複雜密碼。
    • 如果憑證儲存在 Azure 金鑰保存庫,請以 PFX 格式下載憑證。 PFX 與 P12 相同。
    • 在 Linux 上,您可以使用 OpenSSL 轉換憑證和私鑰。 當系統提示您輸入匯出密碼時,請按 Enter 來提供空的複雜密碼。 然後,這可以儲存在 Azure 金鑰保存庫,如步驟 1 中所述。
    openssl pkcs12 -nodes -export -in <certificate.pem> -inkey <key.pem> -out <certificate.p12>
    

重要

P12 檔案不得以複雜密碼保護。

  1. 驗證 P12 檔案。 這會顯示 P12 檔案的相關信息,包括憑證和私鑰。

    openssl pkcs12 -nodes -in <certificate.p12> -info
    
  2. 確定 P12 檔案是以base64編碼。 在 Linux 上,您可以使用 命令,將 P12 憑證 base64 編碼為 base64。

    base64 -w 0 <certificate.p12> > <base64-encoded-certificate.p12>
    

授與數據產品 金鑰保存庫 的許可權

  1. 尋找保留輸入記憶體帳戶記憶體認證的 Azure 金鑰保存庫。 此 金鑰保存庫 位於名為 <data-product-name>-HostedResources-<unique-id>的資源群組中。
  2. 將此 金鑰保存庫 上的「金鑰保存庫 秘密使用者」角色授與服務主體。 您需要 Azure 訂用帳戶的擁有者層級許可權。 如需如何在 Azure 中指派角色的詳細資訊,請參閱使用 Azure 入口網站 指派 Azure 角色。
  3. 請注意 金鑰保存庫 的名稱。

準備 SFTP 伺服器

只有 SFTP 提取來源才需要這個區段。

在 SFTP 伺服器上:

  1. 確定 VM 的埠 22/TCP 已開啟。
  2. 建立新的使用者,或判斷 SFTP 伺服器上的現有使用者,擷取代理程式應該用來連線到 SFTP 伺服器。
    • 根據預設,擷取代理程式會在基底路徑下搜尋每個目錄,因此此使用者必須能夠讀取所有目錄。 任何用戶沒有訪問許可權的目錄都必須使用 組 exclude_pattern 態來排除。

    注意

    在包含模式中未指定目錄,以隱含方式排除目錄不足以停止搜尋這些目錄的代理程式。 如需排除目錄的詳細資訊,請參閱 組態參考

  3. 判斷擷取代理程式應該用來連線到 SFTP 伺服器的驗證方法。 代理程式支援:
    • 密碼驗證
    • SSH 金鑰驗證
  4. 設定SFTP 伺服器,以在一段時間後移除檔案( 保留期間)。 請確定保留期間夠長,代理程式應該在 SFTP 伺服器刪除檔案之前處理這些檔案。 範例組態檔包含每五分鐘檢查新檔案的組態。

重要

您的 SFTP 伺服器必須在適當的保留期間之後移除檔案,使其不會用盡磁碟空間。 擷取代理程式不會自動移除檔案。

較短的保留時間可減少磁碟使用量、提高代理程式的速度,並減少重複上傳的風險。 不過,較短的保留期間會增加代理程式無法擷取數據或上傳至 Azure Operator Insights 時遺失的風險。

準備 VM

針對您要安裝代理程式的每個 VM 重複這些步驟。

  1. 請確定您已對 VM 開啟 SSH 工作階段,而且您具有 sudo 許可權。

  2. 如果尚未存在,請在 VM 上安裝 systemd、logrotate 和 zip。 例如:

    sudo dnf install systemd logrotate zip
    
  3. 如果您使用服務主體,請將base64編碼的 P12 憑證(在準備憑證步驟中建立)複製到 VM,位於擷取代理程式可存取的位置。

  4. 根據擷取來源的類型設定代理程式 VM。

    1. 確認 VM 已開啟下列埠。 這些埠必須在雲端網路安全組和 VM 本身上執行的任何防火牆中開啟(例如防火牆或 iptables)。
      • 埠 443/TCP 輸出至 Azure
      • SFTP 伺服器的埠 22/TCP 輸出
    2. 建立用來儲存代理程式秘密的目錄。 我們會將此目錄 稱為秘密目錄。 請注意其路徑。
    3. 在秘密目錄中建立檔案,其中包含 SFTP 伺服器的密碼或私鑰。
      • 檔案不能有擴展名。
      • 為此檔案選擇適當的名稱,並記下它以供稍後使用。 代理程式組態中會參考此名稱。
      • 檔案必須只包含秘密值(密碼或 SSH 金鑰),沒有額外的空格符。
    4. 如果您使用具有複雜密碼的 SSH 金鑰進行驗證,請使用相同的方法來建立包含複雜密碼的個別檔案。
    5. 確定 SFTP 伺服器的公用 SSH 金鑰列在位於 /etc/ssh/ssh_known_hosts 的 VM 全域known_hosts檔案上。

    提示

    使用 Linux 命令 ssh-keyscan ,手動將伺服器的 SSH 公鑰新增至 VM 的 known_hosts 檔案。 例如: ssh-keyscan -H <server-ip> | sudo tee -a /etc/ssh/ssh_known_hosts

確定 VM 可以解析 Microsoft 主機名

檢查 VM 是否可以將公用主機名解析為 IP 位址。 例如,開啟 SSH 工作階段,並使用 dig login.microsoftonline.com 來檢查 VM 是否可以解析 login.microsoftonline.com 為 IP 位址。

如果 VM 無法使用 DNS 將公用 Microsoft 主機名解析為 IP 位址, 請將所需的主機名對應至 IP 位址。 當您完成設定時,請返回此程式。

安裝代理程序軟體

代理程式軟體套件裝載於 「適用於 Microsoft 產品的 Linux 軟體存放庫」 https://packages.microsoft.com

擷取代理程式封裝的名稱為 az-aoi-ingestion

若要從軟體存放庫下載並安裝套件,請遵循如何使用 Linux 存放庫安裝 Microsoft 軟體套件中 VM Linux 發行版的相關步驟。

例如,如果您要在執行 Red Hat Enterprise Linux (RHEL) 8 的 VM 上安裝 ,請遵循 Red Hat 型 Linux 發行版標題底下的指示,取代下列參數:

  • 分佈: rhel
  • 版本: 8
  • package-name: az-aoi-ingestion

設定代理程序軟體

您需要的組態是來源類型和 Data Product 的特定設定。 請確定您可以存取資料產品的檔,以查看所需的值。 例如:

  1. 連線 透過 SSH 連線至 VM。

  2. 變更為組態目錄。

    cd /etc/az-aoi-ingestion
    
  3. 製作預設組態檔的複本。

    sudo cp example_config.yaml config.yaml
    
  4. agent_id 欄位設定為代理程式實例的唯一識別碼, 例如 london-sftp-1。 此名稱會在 Operator Insights 中成為可搜尋的元數據,以取得此代理程式所內嵌的所有數據。 保留的 URL 字元必須以百分比編碼。

  5. 設定區 secret_providers 段。

    SFTP 來源需要兩種類型的秘密提供者。

    • 類型的key_vault秘密提供者,其中包含連線至數據產品 Azure 金鑰保存庫 並允許連線至數據產品輸入記憶體帳戶所需的詳細數據。
    • 類型的 file_system秘密提供者,指定 VM 上的目錄來儲存連線到 SFTP 伺服器的認證。
    1. 針對類型 key_vault 及名稱 data_product_keyvault為 的秘密提供者,請設定下列欄位。
      • vault_name必須是數據產品 金鑰保存庫 的名稱。 您在授與資料產品 金鑰保存庫 的許可權中識別出此名稱。
      • 依您在將驗證設定為 Azure 中選擇的驗證類型,設定 managed_identityservice_principal
        • 針對受控識別:設定object_id為您在使用受控識別進行驗證中所建立受控識別的物件識別碼。
        • 針對服務主體:將 設定 tenant_id 為 Microsoft Entra ID 租使用者、 client_id 在建立服務主體中 建立之服務主體的應用程式(用戶端)標識符,以及 cert_path VM 上 base64 編碼 P12 憑證的檔案路徑。
    2. 針對類型 file_system 及名稱 local_file_system為 的秘密提供者,請設定下列欄位。
      • secrets_directory至代理程式 VM 上秘密目錄的絕對路徑,這是在準備 VM 步驟中建立的。

    您可以新增更多秘密提供者(例如,如果您想要上傳至多個數據產品),或變更預設秘密提供者的名稱。

  6. pipelines使用範例組態和 Data Product 的文件來設定區段。 每個 pipeline 區段都有三個組態區段。

    • id. 標識符會識別管線,而且不得與這個擷取代理程式的任何其他管線標識符相同。 任何 URL 保留字元都必須以百分比編碼。 如需任何建議,請參閱數據產品的檔。

    • source. 來源組態控制要擷取的檔案。 您可以設定多個來源。

      刪除範例中的所有管線,但包含來源組態的sftp_pull範例除外contoso-logs

      更新範例以符合您的需求。 每個來源都需要下列欄位。

      • host:SFTP 伺服器的主機名或IP位址。
      • filtering.base_path:SFTP 伺服器上檔案將上傳至 Azure Operator Insights 的資料夾路徑。
      • known_hosts_file:位於 之全域known_hosts檔案 /etc/ssh/ssh_known_hosts的 VM 路徑。 此檔案應包含 SFTP 主機伺服器的公用 SSH 金鑰,如準備 VM 中所述
      • user:代理程式應該用來連線之 SFTP 伺服器上的用戶名稱。
      • 依您在準備 VM 中選擇的驗證方法, 設定 passwordprivate_key
        • 針對密碼驗證,請將 設定 secret_name 為資料夾中包含密碼的 secrets_directory 檔名。
        • 針對 SSH 金鑰驗證,將設定 key_secret_name 為資料夾中包含 SSH 金鑰的 secrets_directory 檔案名。 如果私鑰受到複雜密碼的保護,請將 設定 passphrase_secret_name 為包含資料夾中複雜密碼的 secrets_directory 檔名。
        • 所有秘密檔案都應該具有 (rw-------) 的許可權600,以及擁有az-aoi-ingestion者,因此只有擷取代理程式和具特殊許可權的使用者才能讀取它們。
        sudo chmod 600 <secrets_directory>/*
        sudo chown az-aoi-ingestion <secrets_directory>/*
        

      如需其他欄位的必要或建議值,請參閱數據產品的檔。

      提示

      代理程式支援下列其他選擇性設定:

      • 指定將上傳之資料夾中的檔案 base_path 模式(預設會上傳資料夾中的所有檔案)。
      • 指定不應上傳之資料夾中的檔案 base_path 模式。
      • 不會上傳資料夾中檔案的時間 base_path 和日期。
      • 擷取代理程式上傳檔案的頻率(範例組態檔中提供的值會對應至每小時)。
      • 定點時間,這是上次修改檔案之後的一段時間,代理程式會在上傳之前等候(範例組態檔中提供的值是 5 分鐘)。

      如需這些組態選項的詳細資訊,請參閱 Azure Operator Insights 擷取代理程式的設定參考。

    • sink. 接收組態控制將數據上傳至數據產品的輸入記憶體帳戶。

      • 在區 sas_token 段中,將 設定 secret_provider 為 Data Product 的適當 key_vault 秘密提供者,或者如果您稍早使用預設名稱,請使用預設值 data_product_keyvault 。 保留 secret_name 不變。
      • 如需其他參數所需值的相關信息,請參閱數據產品的檔。

        重要

        欄位 container_name 必須完全符合數據產品的檔所指定。

啟動代理程序軟體

  1. 啟動代理程式。
    sudo systemctl start az-aoi-ingestion
    
  2. 檢查代理程式是否正在執行。
    sudo systemctl status az-aoi-ingestion
    
    1. 如果您看到 以外的active (running)任何狀態,請查看記錄,如監視和針對 Azure Operator Insights 的擷取代理程式進行疑難解答中所述,以了解錯誤。 某些設定可能不正確。
    2. 一旦您解決問題,請再次嘗試啟動代理程式。
    3. 如果問題持續發生,請提出支援票證。
  3. 代理程式執行之後,請確定它會在重新啟動後自動啟動。
    sudo systemctl enable az-aoi-ingestion.service
    

[選擇性]設定記錄收集以透過 Azure 監視器存取

如果您要在 Azure VM 或 Azure Arc 所連線的內部部署 VM 上執行擷取代理程式,您可以使用 Azure 監視器代理程式將擷取代理程式記錄傳送至 Azure 監視器。 使用 Azure 監視器來存取記錄比直接在 VM 上存取記錄更簡單。

若要收集擷取代理程序記錄,請遵循 Azure 監視器檔來安裝 Azure 監視器代理程式並設定記錄收集

  • 這些檔會使用 Az PowerShell 模組來建立記錄數據表。 請先遵循 Az PowerShell 模組安裝檔
    • YourOptionalColumn範例 JSON 中的 $tableParams 區段對於擷取代理程式而言是不必要的,而且可以移除。
  • 將數據源新增至數據收集規則時,請使用檔案模式/var/log/az-aoi-ingestion/stdout.log新增Custom Text Logs來源類型。
  • 我們也建議您遵循檔,將數據源新增Linux Syslog至數據收集規則,以允許稽核 VM 上執行的所有進程。
  • 新增資料收集規則之後,您可以透過Log Analytics工作區查詢擷取代理程序記錄。 使用下列查詢,讓它們更容易使用:
    <CustomTableName>
    | extend RawData = replace_regex(RawData, '\\x1b\\[\\d{1,4}m', '')  // Remove any color tags
    | parse RawData with TimeGenerated: datetime '  ' Level ' ' Message  // Parse the log lines into the TimeGenerated, Level and Message columns for easy filtering
    | order by TimeGenerated desc
    

    注意

    此查詢無法當做數據源轉換使用,因為 replace_regex 數據源轉換中無法使用。

範例記錄

[2m2024-04-30T17:16:00.000544Z[0m [32m INFO[0m [1msftp_pull[0m[1m{[0m[3mpipeline_id[0m[2m=[0m"test-files"[1m}[0m[2m:[0m[1mexecute_run[0m[1m{[0m[3mstart_time[0m[2m=[0m"2024-04-30 17:16:00.000524 UTC"[1m}[0m[2m:[0m [2maz_ingestion_sftp_pull_source::sftp::source[0m[2m:[0m Starting run with 'last checkpoint' timestamp: None
[2m2024-04-30T17:16:00.000689Z[0m [32m INFO[0m [1msftp_pull[0m[1m{[0m[3mpipeline_id[0m[2m=[0m"test-files"[1m}[0m[2m:[0m[1mexecute_run[0m[1m{[0m[3mstart_time[0m[2m=[0m"2024-04-30 17:16:00.000524 UTC"[1m}[0m[2m:[0m [2maz_ingestion_sftp_pull_source::sftp::source[0m[2m:[0m Starting Completion Handler task
[2m2024-04-30T17:16:00.073495Z[0m [32m INFO[0m [1msftp_pull[0m[1m{[0m[3mpipeline_id[0m[2m=[0m"test-files"[1m}[0m[2m:[0m[1mexecute_run[0m[1m{[0m[3mstart_time[0m[2m=[0m"2024-04-30 17:16:00.000524 UTC"[1m}[0m[2m:[0m [2maz_ingestion_sftp_pull_source::sftp::sftp_file_tree_explorer[0m[2m:[0m Start traversing files with base path "/"
[2m2024-04-30T17:16:00.086427Z[0m [32m INFO[0m [1msftp_pull[0m[1m{[0m[3mpipeline_id[0m[2m=[0m"test-files"[1m}[0m[2m:[0m[1mexecute_run[0m[1m{[0m[3mstart_time[0m[2m=[0m"2024-04-30 17:16:00.000524 UTC"[1m}[0m[2m:[0m [2maz_ingestion_sftp_pull_source::sftp::sftp_file_tree_explorer[0m[2m:[0m Finished traversing files
[2m2024-04-30T17:16:00.086698Z[0m [32m INFO[0m [1msftp_pull[0m[1m{[0m[3mpipeline_id[0m[2m=[0m"test-files"[1m}[0m[2m:[0m[1mexecute_run[0m[1m{[0m[3mstart_time[0m[2m=[0m"2024-04-30 17:16:00.000524 UTC"[1m}[0m[2m:[0m [2maz_ingestion_sftp_pull_source::sftp::source[0m[2m:[0m File explorer task is complete, with result Ok(())
[2m2024-04-30T17:16:00.086874Z[0m [32m INFO[0m [1msftp_pull[0m[1m{[0m[3mpipeline_id[0m[2m=[0m"test-files"[1m}[0m[2m:[0m[1mexecute_run[0m[1m{[0m[3mstart_time[0m[2m=[0m"2024-04-30 17:16:00.000524 UTC"[1m}[0m[2m:[0m [2maz_ingestion_sftp_pull_source::sftp::source[0m[2m:[0m Send files to sink task is complete
[2m2024-04-30T17:16:00.087041Z[0m [32m INFO[0m [1msftp_pull[0m[1m{[0m[3mpipeline_id[0m[2m=[0m"test-files"[1m}[0m[2m:[0m[1mexecute_run[0m[1m{[0m[3mstart_time[0m[2m=[0m"2024-04-30 17:16:00.000524 UTC"[1m}[0m[2m:[0m [2maz_ingestion_sftp_pull_source::sftp::source[0m[2m:[0m Processed all completion notifications for run
[2m2024-04-30T17:16:00.087221Z[0m [32m INFO[0m [1msftp_pull[0m[1m{[0m[3mpipeline_id[0m[2m=[0m"test-files"[1m}[0m[2m:[0m[1mexecute_run[0m[1m{[0m[3mstart_time[0m[2m=[0m"2024-04-30 17:16:00.000524 UTC"[1m}[0m[2m:[0m [2maz_ingestion_sftp_pull_source::sftp::source[0m[2m:[0m Run complete with no retryable errors - updating last checkpoint timestamp
[2m2024-04-30T17:16:00.087351Z[0m [32m INFO[0m [1msftp_pull[0m[1m{[0m[3mpipeline_id[0m[2m=[0m"test-files"[1m}[0m[2m:[0m[1mexecute_run[0m[1m{[0m[3mstart_time[0m[2m=[0m"2024-04-30 17:16:00.000524 UTC"[1m}[0m[2m:[0m [2maz_ingestion_sftp_pull_source::sftp::source[0m[2m:[0m Run lasted 0 minutes and 0 seconds with result: RunStats { successful_uploads: 0, retryable_errors: 0, non_retryable_errors: 0, blob_already_exists: 0 }
[2m2024-04-30T17:16:00.087421Z[0m [32m INFO[0m [1msftp_pull[0m[1m{[0m[3mpipeline_id[0m[2m=[0m"test-files"[1m}[0m[2m:[0m[1mexecute_run[0m[1m{[0m[3mstart_time[0m[2m=[0m"2024-04-30 17:16:00.000524 UTC"[1m}[0m[2m:[0m [2maz_ingestion_sftp_pull_source::sftp::file[0m[2m:[0m Closing 1 active SFTP connections
[2m2024-04-30T17:16:00.087966Z[0m [32m INFO[0m [1msftp_pull[0m[1m{[0m[3mpipeline_id[0m[2m=[0m"test-files"[1m}[0m[2m:[0m[1mexecute_run[0m[1m{[0m[3mstart_time[0m[2m=[0m"2024-04-30 17:16:00.000524 UTC"[1m}[0m[2m:[0m [2maz_ingestion_common::scheduler[0m[2m:[0m Run completed successfully. Update the 'last checkpoint' time to 2024-04-30T17:15:30.000543200Z
[2m2024-04-30T17:16:00.088122Z[0m [32m INFO[0m [1msftp_pull[0m[1m{[0m[3mpipeline_id[0m[2m=[0m"test-files"[1m}[0m[2m:[0m [2maz_ingestion_common::scheduler[0m[2m:[0m Schedule next run at 2024-04-30T17:17:00Z

了解如何: