記錄檔是排解 Apigee Hybrid 安裝問題的好方法。詳情請參閱「記錄」。
您可以使用kubectl logs 指令查看 Apigee 同步器記錄。例如:
kubectl logs -n apigee apigee-synchronizer-apigee-example-test
同步處理工具記錄項目
下表說明您會在 Synchronizer 記錄檔中看到的欄位。
| 欄位 | 意義 |
|---|---|
org: |
機構名稱 |
env: |
環境名稱 |
target: |
記錄項目代表的實體路徑 |
action: |
動作 SYNC=上游同步動作
REPLICATE=複製/下載動作 |
context-id: |
合約版本 (如適用) |
例如:
2019-02-05 00:00:59,098 org:hybrid env:test target: action:SYNC context-id: mode: Apigee-Timer-5 INFO CONFIG-CHANGE - SyncContext.syncUpStream() : Upstream sync started with https://apigee.googleapis.com
瞭解同步處理工具記錄
如要排解 Synchronizer 問題,請查看記錄檔。下表有助於排解同步器記錄中可能出現的錯誤。另請參閱「記錄」。
| 記錄項目 | 代表意義 |
|---|---|
org:test env:dev target: action:SYNC context-id: mode:
Apigee-Timer-0 INFO CONFIG-CHANGE - SyncContext.syncUpStream() :
Upstream sync
started with http://localhost:8080 |
已為機構和環境啟動上游輪詢,並提供管理平面網址 |
2019-01-21 16:58:02,275 org:test env:qa target:
action:SYNC context-id: mode: Apigee-Timer-1 INFO CONFIG-CHANGE -
ManagementServerBasedReplicationContext.getContract() :
Upstream contract poll returned 200 |
已成功收到合約 |
2019-01-21 16:58:02,536 org:test env:dev target:
action:SYNC context-id: mode: Apigee-Timer-0 INFO CONFIG-CHANGE -
ManagementServerBasedReplicationContext.getContract() :
Received a new
contract version 20190121.090851.339 |
已收到合約版本 |
2019-01-21 17:58:56,530 org:test env:qa
target:/organizations/test/environments/qa action:REPLICATE
context-id:20190121.090859.699 mode: Apigee-Timer-1 INFO
CONFIG-CHANGE - ConfigReplicator.startReplication() :
Replication
started |
指出複製作業的開始時間。MDC 欄位會指出要複製的詳細資料 |
2019-01-21 17:58:56,654 org:test env:qa
target:/organizations/test/environments/qa/resourcefiles/js/JavaScriptCallout.js
action:REPLICATE context-id:20190121.090859.699 mode:
Apigee-Timer-1 INFO CONFIG-CHANGE -
ConfigReplicator.startReplication() : Replication
complete |
指出複製作業已完成。MDC 欄位會指出要複製的詳細資料 |
2019-01-21 17:58:56,654 org:test env:qa
target:/organizations/test/environments/qa action:REPLICATE
context-id:20190121.090859.699 mode: Apigee-Timer-1
ERROR
CONFIG-CHANGE - ConfigReplicator.startReplication() : Replication
failed |
表示複製錯誤 |
2019-01-21 17:59:00,246 org:test env:qa target:
action:SYNC context-id: mode: Apigee-Timer-1 INFO CONFIG-CHANGE -
SyncContext.syncUpStream() : Upstream sync finished in 4
seconds |
指出同步週期結束,並提供同步處理所花費的時間 |
2019-01-21 18:00:00,249 org:test env:dev target:
action:SYNC context-id: mode: Apigee-Timer-1 INFO CONFIG-CHANGE -
ManagementServerBasedReplicationContext.getContract() :
Upstream contract
poll returned 304 |
表示沒有較新的合約 |
2019-01-21 18:21:39,128 org:test env:qa target:
action:SYNC context-id: mode: Apigee-Timer-1 ERROR CONFIG-CHANGE -
ManagementServerBasedReplicationContext.getContract() :
Upstream contract
poll returned error 0 |
表示無法連線至管理平面 |
2019-01-21 18:21:39,128 org:test env:qa target:
action:SYNC context-id: mode: Apigee-Timer-1 ERROR CONFIG-CHANGE -
ManagementServerBasedReplicationContext.getContract() :
Upstream contract
poll returned error 404 |
表示管理平面針對合約傳回 404 回應 |
2019-01-21 18:22:39,217 org:test1 env:dev target:
action:SYNC context-id: mode: Apigee-Timer-2 ERROR CONFIG-CHANGE -
ManagementServerBasedReplicationContext.getContract() :
Upstream contract
poll returned error 403 |
表示輪詢的環境未啟用混合式功能 |
2019-01-21 18:22:39,217 org:test1 env:dev target:
action:SYNC context-id: mode: Apigee-Timer-2 ERROR CONFIG-CHANGE -
ManagementServerBasedReplicationContext.getContract() :
Upstream contract
poll returned error 401 |
提供的憑證有些問題 |
排解錯誤
記錄檔有助於排解安裝問題。詳情請參閱「記錄」。
同步器無法啟動
以下說明幾個錯誤和補救措施。每個錯誤訊息開頭都是 ErrorCode,類型為 sync.xxxxx。以下是可能的錯誤代碼
sync.NullOrEmptyConfig
訊息:透過 com.apigee.sync.config 提供的設定為空值或空白
原因:如果未正確提供 Synchronizer 的設定屬性,就會看到這則錯誤訊息。
解決方法:請確保所有設定屬性都填入適當的值。
sync.ConfigFileNotFound
原因:Synchronizer 設為從檔案讀取設定屬性,但無法載入該檔案
解決方法:請確保檔案在 Synchronizer 啟動時可用且可存取
sync.IncorrectSettings
原因:同步器設定缺少一或多個必要設定屬性,或屬性值超出預期範圍。錯誤訊息應會提供更多詳細資料,說明導致問題的確切屬性。這些錯誤內建於剖析器中,可確保在服務啟動前就發現設定錯誤。
下表列出一些可能的 IncorrectSettings 錯誤:
| 錯誤 | 問題發生原因 |
|---|---|
configuration.json.IncorrectSettings:
[com.apigee.sync.config.json] Error:/controlPlane/retries numeric
instance is greater than the required maximum (maximum: 3, found:
20) |
controlPlane 區段中提供給 retries 欄位的值已超過允許的上限 |
configuration.json.IncorrectSettings:
[com.apigee.sync.config.json] Error:/controlPlane/connectionTimeout
numeric instance is lower than the required minimum (minimum: 10,
found: 1) |
controlPlane 區段中 connectionTimeout 欄位的值低於允許值 |
configuration.json.IncorrectSettings:
[com.apigee.sync.config.json] Error:/controlPlane object has
missing required properties
([\"contractProvider\"]) |
controlPlane 區段缺少必填欄位 contractProvider |
configuration.json.IncorrectSettings:
[com.apigee.sync.config.json] Error:/controlPlane/contractProvider
string \"http://\\uapi.apigee.com\" is not a valid
URI |
合約提供者 URI 無效 |
configuration.json.IncorrectSettings:
[com.apigee.sync.config.json] Error:/environments array is too
short: must have at least 1 elements but instance has 0
elements |
環境陣列至少要有一個環境 |
configuration.json.IncorrectSettings:
[com.apigee.sync.config.json] Error:/environments/0 object has
missing required properties
([\"environmentName\"]) |
索引 0 的環境缺少必填欄位「environmentName」 |
configuration.json.IncorrectSettings:
[com.apigee.sync.config.json] Error:/environments/0 object has
missing required properties
([\"organizationName\"]) |
索引 0 的環境缺少必要欄位「organizationName」 |
configuration.json.IncorrectSettings:
[com.apigee.sync.config.json] Error:/environments/0/pollInterval
numeric instance is lower than the required minimum (minimum: 60,
found: 6) |
索引 0 的環境輪詢間隔低於允許的 60 秒上限 |
解決方法:修正設定,加入必要區塊
sync.ReplicationRootDoesNotExist
原因:同步器提供的複製根目錄不存在
解決方法:確認提供的根資料夾存在且可寫入
sync.ReadOnlyReplicationRoot
原因:Synchronizer 提供的複寫根目錄沒有寫入權限
解決方法:確認提供的根資料夾存在且可寫入
sync.ReplicationRootNotADir
原因:同步器收到的複製根目錄可能是檔案
解決方法:確認提供的根資料夾存在且可寫入
sync.InvalidControlPlaneURL
原因:同步器收到的設定網址為空白
解決方法:確認提供的根資料夾存在且可寫入
sync.InvalidControlPlaneSubscriptionURL
原因:建立訂閱項目時,同步器收到的設定網址有誤、不完整或留空。
解決方法:將網址修正為有效的設定網址,以便建立 Pub/Sub 訂閱項目,處理來自控制層的信號。
sync.InvalidControlPlaneUnsubscriptionURL
原因:系統提供給 Synchronizer 的訂閱項目刪除設定網址有誤、不完整或留空。
解決方法:將網址修正為有效的 Pub/Sub 訂閱項目刪除設定網址,以處理控制層的信號。
sync.CannotCreateEnvironmentFolder
原因:同步器嘗試為複製環境 qa 建立資料夾,但無法建立必要資料夾
解決方法:請確認複製根目錄沒有名稱相同的衝突路徑,且該路徑為檔案的唯讀路徑
sync.DuplicateEnvironmentEntries
原因:設定中多次新增相同環境。
解決方法:每個環境只能指定一次。
sync.DiskExceedsAllowedCapacity
原因:透過設定屬性提供的儲存磁碟已達到容量上限。
解決方法:確認磁碟空間是否足夠,或檢查是否可以調整儲存空間設定,以增加磁碟空間。
sync.OwnershipClaimFailed
原因:同步器嘗試聲明環境資料夾的所有權,但失敗
解決方法:每個同步器都會先嘗試確保自己是檔案系統的唯一寫入器。錯誤訊息會指出路徑和失敗原因。解決根本原因
執行階段的同步器錯誤
執行階段可能會發生下列 Synchronizer 錯誤。
sync.replicators.PollReturnedError
相關聯的訊息會包含上游狀態。以下是錯誤狀態
狀態 0
原因:表示連線發生問題。無法連線至管理平面
解決方法:請確認管理平面詳細資料正確無誤,且合約 API 可連線
狀態 404
原因:伺服器上可能找不到機構/環境名稱
解決方法:請確認管理平面詳細資料正確無誤,且合約 API 可連線
狀態 401
原因:提供的憑證很可能沒有機構管理員權限。
解決方法:確認管理平台憑證正確無誤,且合約 API 可連線
狀態 403
原因:表示輪詢的環境未設為混合式環境
解決方法:確認機構已設定必要旗標「features.hybrid.enabled=true」
sync.OwnershipClaimedByOther
原因:作業期間,Synchronizer 發現檔案根目錄正由另一個 Synchronizer 執行個體存取。(如果檔案系統在同步器之間共用,就可能發生這種情況)。
解決方法:找出根本問題並加以解決,確保沒有兩個 Synchronizer 執行個體共用同一個檔案系統。同步器會標示自身狀態為停機,且處於無法復原的狀態。這也會確保存取相同檔案根目錄的其他 Synchronizer 會透過其擁有權檔案收到通知
sync.DiskExceedsAllowedCapacity
原因:作業期間,同步器發現磁碟使用量已超過允許的限制。
解決方法:此時,同步器會中止所有下載作業,並嘗試清除過時的檔案。不過,這可能成為週期性狀況,確保 Synchronizer 有足夠的磁碟記憶體運作,是完全復原的唯一方法。
診斷合約下載失敗問題
如果錯誤訊息中顯示「upstream contract poll」,請嘗試呼叫合約 API 並檢查詳細資料,其中使用者名稱是您的 Apigee 使用者名稱 (電子郵件地址)。合約代表 Synchronizer 從管理平面下載的完整資料集合。
curl https://apigee.googleapis.com/v1/organizations/org/environments/env/contracts/1.0 -u username