測試目錄文檔檢查

 
Updated 2026 年 2 月 4 日
PDF
Is this helpful? 意見

    簡介

    本文檔介紹對APIC GUI體驗緩慢進行故障排除的一般方法。

    快速入門

    人們經常發現,APIC GUI問題緩慢是由於來自指令碼、整合或應用程式的API請求速率過高造成的。APIC的access.log會記錄每個已處理的API請求。可以使用Github資料中心組aci-tac-scripts專案中的訪問日誌分析器指令碼快速分析APIC的access.log。

    背景資訊

    APIC作為Web伺服器 — NGINX

    NGINX是負責每個APIC上可用的API終端的DME。如果NGINX關閉,則無法處理API請求。如果NGINX擁塞,則API擁塞。每個APIC都運行自己的NGINX進程,因此如果任何主動式查詢器僅針對APIC,則可能只有一個APIC會出現NGINX問題。

    APIC UI執行多個API請求以填充每個頁面。類似地,所有APIC show命令(NXOS樣式CLI)都是執行多個API請求、處理響應然後提供給使用者的python指令碼的包裝。

    相關日誌

    日誌檔名

    位置

    它位於哪一技術支援中

    備註

    access.log

    /var/log/dme/log

    APIC 3of3

    與ACI無關,每個API請求提供1行

    error.log

    /var/log/dme/log

    APIC 3of3

    ACI不可知,顯示nginx錯誤(包括限制)

    nginx.bin.log

    /var/log/dme/log

    APIC 3of3

    特定於ACI,記錄DME事務

    nginx.bin.warnplus.log

    /var/log/dme/log

    APIC 3of3

    ACI特定包含警告+嚴重性的日誌

    方法

    隔離初始觸發器

    什麼受到影響?

    • 哪些APIC受到影響;一個、多個或所有APIC?
    • 哪裡可以看到遲緩;通過UI和/或CLI命令?
    • 哪些特定UI頁面或命令速度較慢?

    這種緩慢的感受如何?

    • 對於單個使用者而言,是否會在多個瀏覽器中看到這種情況?
    • 多個使用者是否報告速度緩慢?還是僅報告單個/子集使用者?
    • 受影響的使用者是否共用從瀏覽器到APIC的相似地理位置或網路路徑?

    遲緩是何時被首次注意到的?

    • 最近是否新增了ACI整合或指令碼?
    • 最近是否啟用了瀏覽器擴展?
    • ACI配置最近有變化嗎?

    檢查NGINX使用情況和運行狀況

    Access.log條目格式

    access.log是NGINX的一項功能,因此與APIC無關。每行代表APIC收到的1個HTTP請求。參考此日誌,瞭解APIC的NGINX使用情況。

    ACI 5.2+版上的預設access.log格式:

    log_format proxy_ip '$remote_addr ($http_x_real_ip) - $remote_user [$time_local]'
    '"$request" $status $body_bytes_sent '
    '"$http_referer" "$http_user_agent"';

    此行表示執行moquery -c fvTenant時的access.log條目:

    127.0.0.1 (-) - - [07/Apr/2022:20:10:59 +0000]"GET /api/class/fvTenant.xml HTTP/1.1" 200 15863 "-" "Python-urllib"

    示例access.log條目對映到log_format:

    log_format欄位

    示例內容

    備註

    $remote_addr

    127.0.0.1

    傳送此請求的主機的IP

    $http_x_real_ip

    -

    使用代理時最後一個請求者的IP

    $remote_user

    -

    一般不使用。選中nginx.bin.log以跟蹤登入執行請求的使用者

    $time_local

    2022年4月07日:20:10:59 +0000

    處理請求的時間

    $request

    獲取/api/class/fvTenant.xml HTTP/1.1

    Http方法(GET、POST、DELETE)和URI

    $status

    200

    HTTP響應狀態代碼

    $body_bytes_sent

    1586

    響應負載大小

    $http_referer

    -

    -

    $http_user_agent

    Python-urllib

    傳送請求的客戶端型別

    Access.log行為

    在一段較長的時間內發生高速請求突發:

    • 每秒40多個請求的連續突發會導致使用者介面速度變慢
    • 確定負責查詢的主機
    • 減少或禁用查詢源,檢視這是否提高了APIC響應時間。

    一致的4xx或5xx響應:

    • 如果找到,請識別來自nginx.bin.log的錯誤消息

    可以使用Github資料中心組aci-tac-scripts專案中的訪問日誌分析器指令碼快速分析APIC的access.log。

    檢查NGINX資源使用情況

    可以使用APIC中的top命令檢查NGINX CPU和記憶體使用情況:

    top - 13:19:47 up 29 days, 2:08, 11 users, load average: 12.24, 11.79, 12.72
    Tasks: 785 total, 1 running, 383 sleeping, 0 stopped, 0 zombie
    %Cpu(s): 3.5 us, 2.0 sy, 0.0 ni, 94.2 id, 0.1 wa, 0.0 hi, 0.1 si, 0.0 st
    KiB Mem : 13141363+total, 50360320 free, 31109680 used, 49943636 buff/cache
    KiB Swap: 0 total, 0 free, 0 used. 98279904 avail Mem

    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
    21495 root 20 0 4393916 3.5g 217624 S 2.6 2.8 759:05.78 nginx.bin

    高NGINX資源使用率直接與高處理請求率相關。

    檢查核心

    NGINX崩潰不常用於慢速APIC GUI問題。但是,如果找到NGINX核心,請將其連線到TAC SR進行分析。有關檢查核心的步驟,請參閱ACI技術支援指南

    檢查客戶端到伺服器的延遲

    如果找不到快速請求,但使用者繼續表現出UI緩慢,則問題可能是客戶端(瀏覽器)到伺服器(APIC)延遲。

    在這些情況下,驗證從瀏覽器到APIC的資料路徑(地理距離、VPN等)。 如果可能,請部署並測試從與APIC位於同一地理區域或資料中心內的跳轉伺服器進行的訪問。驗證其他使用者是否顯示類似的延遲量。

    瀏覽器開發工具網路頁籤

    所有瀏覽器都能夠通過其Browser Development Toolkit(通常在Network(網路)頁籤中)驗證HTTP請求和響應。

    此工具可用於驗證來自瀏覽器的請求的每個階段所需的時間,如下圖所示。

    Example of the Browser Waiting 1.1 minutes for the APIC to Respond等待1.1分鐘以供APIC響應的瀏覽器示例

    特定UI頁面的增強功能

    「策略組」頁:

    思科漏洞ID CSCvx14621 - APIC GUI在交換矩陣頁籤中的IPG策略上緩慢載入。

    Inventory頁面下的介面:

    思科錯誤ID CSCvx90048 — 「Layer 1 Physical Interface Configuration」(第1層物理介面配置)Operational(操作)頁籤的初始載入為長/導致「凍結」。

    客戶端>伺服器延遲的一般建議

    預設情況下,某些瀏覽器(如Firefox)允許每個主機擁有更多的Web連線。

    • 檢查此設定是否可以在使用的瀏覽器版本上配置
    • 對於多查詢頁(如「策略組」頁),這一點更為重要

    VPN和與APIC的距離會根據客戶端瀏覽器請求和APIC響應旅行時間增加整體UI延遲。在APIC上本地的跳轉框可顯著減少瀏覽器到APIC的旅行時間。

    檢查Long-Web請求

    如果Web伺服器(APIC上的NGINX)處理大量的長Web請求,這可能會影響並行接收的其他請求的效能。

    對於具有分散式資料庫的系統(如APIC)尤其如此。單個API請求可能需要向結構中的其他節點傳送額外的請求和查詢,這可能會導致預期的更長的響應時間。這些長Web請求在短時間幀內突發,會增加所需的資源量,導致意外的更長的響應時間。此外,接收的請求隨後會超時(90秒),導致從使用者角度而言出現意外的系統行為。

    系統響應時間 — 啟用伺服器響應時間的計算

    在4.2(1)+中,使用者可以啟用「系統效能計算」,跟蹤並突出顯示花費時間處理的API請求。

    Calculation can be enabled from System - System Settings - System Performance可以從系統 — 系統設定 — 系統效能啟用計算

    啟用「計算」後,使用者可以導航到控制器下的特定APIC,檢視最近300秒內最慢的API請求。

    System - Controllers - Controllers Folder - APIC x - Server Response TimeSystem - Controllers - Controllers資料夾 — APIC x — 伺服器響應時間

    APIC API使用注意事項

    確保指令碼不會損害Nginx的一般指標

    • 每個APIC運行自己的NGINX DME。
      • 只有APIC 1的NGINX處理對APIC 1的請求。APIC 2和3的NGINX不處理這些請求。
    • 一般來說,在很長一段時間內每秒40個以上的API請求會使NGINX衰弱。
      • 如果找到,則減少請求的攻擊性。
      • 如果無法修改請求主機,請考慮對APIC執行NGINX速率限制

    解決指令碼效率低下問題

    NGINX請求限制

    4.2(1)+版本中提供,使用者可以獨立啟用針對HTTP和HTTPS的請求限制。

    :從ACI 6.1(2)版本開始,此功能支援的最大速率從10,000 r/m降低到每秒40個請求(r/s)每分鐘2400個請求(r/m)

    Fabric - Fabric Policies - Policies Folder - Management Access Folder - default交換矩陣 — 交換矩陣策略 — 策略資料夾 — 管理訪問資料夾 — 預設

    啟用時:

    • 重新啟動NGINX以應用配置檔案更改
      • 新區域httpsClientTagZone將寫入nginx config
    • 限制速率可以設定為每分鐘請求數(r/m)或每秒請求數(r/s)。
    • 請求限制依賴於NGINX中包括的速率限制實施
      • 針對/api/URI的API請求使用使用者定義的限制速率+突發=(限制速率x 2)+無延遲
        • /api/aaaLogin/api/aaaRefresh有一個不可配置的限制(zone aaaApiHttps),速率限製為2r/s + burst=4 + nodelay
      • 基於每個客戶端IP地址跟蹤請求限制
      • 源自APIC自身IP(UI + CLI)的API請求繞過限制
      • 任何超過使用者定義的限制速率+突發閾值的客戶端IP地址都會收到來自APIC的503響應
      • 這些503可在訪問日誌中關聯
      • error.log具有指示何時啟用限制(區域httpsClientTagZone)以及針對哪些客戶端主機的條目
    apic# less /var/log/dme/log/error.log
    ...
    2023/04/17 20:19:14 [error] ... limiting requests, excess: 40.292 by zone "httpsClientTagZone", client: h.o.s.t, ... request: "GET /api/class/...", host: "a.p.i.c"
    2023/04/17 20:19:14 [error] ... limiting requests, excess: 40.292 by zone "httpsClientTagZone", client: h.o.s.t, ... request: "GET /api/node/...", host: "a.p.i.c"

    通常,Request Throttle僅用於保護伺服器(APIC)免受查詢激進型客戶端引起的類似DDOS的症狀。在應用/指令碼邏輯中瞭解並隔離請求攻擊型客戶端,以獲得最終解決方案。

    建議

    這些建議旨在幫助降低APIC的負載和運營壓力,尤其是在沒有單一來源負責大量API呼叫的情況下。通過實施這些最佳實踐,您可以最大限度地減少交換矩陣中不必要的處理、日誌記錄和事件生成,從而提高系統穩定性和效能。這些建議在聚合行為而不是孤立事件導致APIC緊張的環境中尤其重要。

    禁用ACL日誌記錄


    確保在正常操作期間關閉ACL日誌記錄。僅在計畫維護時段啟用該功能,以便進行故障排除或調試。連續記錄可能會生成過多資訊性消息,尤其是當多台交換機上的大量流量丟棄時,會增加APIC工作負載。


    有關詳細資訊,請參閱《思科APIC安全配置指南》(5.2.x指南的連結):
    https://www.cisco.com/c/en/us/td/docs/dcn/aci/apic/5x/security-configuration/cisco-apic-security-configuration-guide-release-52x/security-policies-52x.html

    將系統日誌轉換為嚴重事件


    配置系統,以便僅將嚴重性為ALERT的系統日誌消息轉換為eventRecords。避免轉換INFORMATION級別(包括ACL.logging),以防止噪音事件淹沒APIC:

    1.導航到Fabric → Fabric Policies → Policies → Monitoring → Common Policy → Syslog Message Policies → Default。
    2.調整設施過濾器,將系統日誌嚴重性設定為警報。

    靜音非必需事件代碼


    抑制(抑制)與監控無關的事件代碼需要降低噪音。
    要壓制事件代碼E4204939,請在任何APIC CLI上使用以下命令:

    bash
    icurl -k -sX POST -d '<fabricInst><monCommonPol><eventSevAsnP code="E4204939" sev="squelched"/></monCommonPol></fabricInst>' 'https://localhost/api/node/mo/uni/.xml’

    要驗證:

    bash
    icurl -k -sX GET 'https://localhost/api/node/class/eventSevAsnP.xml' | xmllint --format -

    或者,通過UI檢查:
    Fabric > Fabric Policies > Policies > Monitoring > Common Policy > Event嚴重性分配策略

    最佳化ND訂用刷新


    對於由3.2.2m或4.1.1g之前的ND版本管理的交換矩陣,請升級到其中一個版本或更高版本以最佳化訂閱刷新間隔。早期版本每45秒刷新一次MO,這樣在規模上每天可以產生300,000多個APIC請求。更新的版本將訂閱超時增加至3600秒(1小時),將刷新減少到每天約5,000次。

    監視Intersight相關查詢


    支援Intersight的交換矩陣從DC聯結器生成定期的topsystem查詢(每15秒),從而增加APIC負載。
    在6.1.2及更高版本中,此查詢已針對減少的開銷進行了最佳化。

    調整記錄的保留策略


    將eventRecord 、 faultRecord和healthRecord的保留策略設定為1,000以防止記錄過度累積。當您針對任何特定操作活動定期提取這些記錄時,此功能尤其有用。請始終根據您的操作和故障排除要求評估降低監控粒度帶來的影響。