查看 Apigee Edge 說明文件。
前往
Apigee X說明文件。 資訊
結果
在 API 執行階段環境中追蹤問題的最佳方式之一,就是記錄訊息。 您可以在 API 中附加並設定 MessageLogging 政策,以便記錄自訂訊息 (僅限 Private Cloud) 或 syslog。
範例
系統記錄檔
<MessageLogging name="LogToSyslog"> <Syslog> <Message>[3f509b58 tag="{organization.name}.{apiproxy.name}.{environment.name}"] Weather request for WOEID {request.queryparam.w}.</Message> <Host>logs-01.loggly.com</Host> <Port>514</Port> <Protocol>TCP</Protocol> <FormatMessage>true</FormatMessage> <DateFormat>yyyy-MM-dd'T'HH:mm:ss.SSSZ</DateFormat> </Syslog> <logLevel>ALERT</logLevel> </MessageLogging>
MessageLogging 政策類型的常見用法是登入系統記錄帳戶。時間 針對 syslog 設定,API Proxy 會將記錄訊息從 Apigee Edge 轉送至遠端 系統記錄伺服器您必須已有系統記錄伺服器可用。如果沒有,則管理公開記錄 以及 Splunk、Sumo Logic 和 Loggly 等。請參閱設定第三方記錄管理服務。
舉例來說,假設您要針對
API 會從消費者應用程式接收資料。3f509b58
值代表鍵/值
專屬於 Loggly 服務如果您擁有 Loggly 帳戶,請換個 loggly 鍵。
產生的記錄訊息將填入以下四個值:organization、API
Proxy 和環境名稱,以及查詢的值
參數。
如果有 Edge for Private Cloud 部署作業,也能將記錄訊息寫入 檔案。
傳輸層安全標準 (TLS)/安全資料傳輸層 (SSL) 的系統記錄檔
<MessageLogging name="LogToSyslog"> <Syslog> <Message>[3f509b58 tag="{organization.name}.{apiproxy.name}.{environment.name}"] Weather request for WOEID {request.queryparam.w}.</Message> <Host>logs-01.loggly.com</Host> <Port>6514</Port> <Protocol>TCP</Protocol> <FormatMessage>true</FormatMessage> <SSLInfo> <Enabled>true</Enabled> </SSLInfo> <DateFormat>yyMMdd-HH:mm:ss.SSS</DateFormat> </Syslog> <logLevel>WARN</logLevel> </MessageLogging>
您只要在用戶端後方新增
<SSLInfo>
區塊。
檔案旋轉:大小
<MessageLogging name="LogPolicy"> <File> <Message>This is a test message. Message id : {request.header.messageid}</Message> <FileName>test.log</FileName> <FileRotationOptions rotateFileOnStartup="true"> <FileRotationType>SIZE</FileRotationType> <MaxFileSizeInMB>10</MaxFileSizeInMB> <MaxFilesToRetain>10</MaxFilesToRetain> </FileRotationOptions> </File> <logLevel>ERROR</logLevel> </MessageLogging>
根據檔案大小旋轉檔案。
檔案旋轉時間:時間
<MessageLogging name="LogPolicy"> <File> <Message>This is a test message. Message id : {request.header.messageid}</Message> <FileName>test.log</FileName> <FileRotationOptions rotateFileOnStartup="true"> <FileRotationType>TIME</FileRotationType> <RotationFrequency unit="minute">10</RotationFrequency> <MaxFilesToRetain>10</MaxFilesToRetain> </FileRotationOptions> </File> <logLevel>ERROR</logLevel> </MessageLogging>
檔案旋轉是以時間為基礎。
檔案旋轉:時間與大小
<MessageLogging name="LogPolicy"> <File> <Message>This is a test message. Message id : {request.header.messageid}</Message> <FileName>test.log</FileName> <FileRotationOptions rotateFileOnStartup="true"> <FileRotationType>TIME_SIZE</FileRotationType> <MaxFileSizeInMB>10</MaxFileSizeInMB> <MaxFilesToRetain>10</MaxFilesToRetain> <RotationFrequency unit="minute">10</RotationFrequency> </FileRotationOptions> </File> <logLevel>ERROR</logLevel> </MessageLogging>
根據時間和大小旋轉檔案。
支援直播功能
<MessageLogging name="LogPolicy"> <File> .... .... </File> <BufferMessage>true</BufferMessage> </MessageLogging>
支援串流的訊息記錄功能
元素參照
請使用下列元素設定 MessageLogging 政策類型。
欄位名稱 | 欄位說明 | |
---|---|---|
本機檔案目的地。(只有 Private Cloud 適用的 Edge 支援檔案記錄功能 deployments.)如需瞭解檔案的儲存位置,請參閱記錄檔 做為私有雲的 Edge 位置 |
Message |
建立要傳送至記錄檔的訊息,合併 藉此擷取您需要的資訊請參閱範例。 |
FileName |
記錄訊息的記錄檔名稱。 | |
FileRotationOptions |
||
rotateFileOnStartup |
屬性。有效值: 如果設為 True,則每次傳訊引擎都會輪替記錄檔 就會重新啟動。 |
|
FileRotationType |
指定旋轉政策 (size 或
time )。 |
|
MaxFileSizeInMB |
(選取「size 」做為輪播類型時)
指定記錄檔的大小,以觸發伺服器將記錄訊息移到
獨立檔案在記錄檔達到指定大小後,伺服器會重新命名
目前的記錄檔。 |
|
RotationFrequency |
(選取「time 」做為輪播類型時)
指定時間 (以分鐘為單位),觸發伺服器將記錄訊息移至獨立位置的時間
檔案。指定的時間間隔結束後,目前的記錄檔就會重新命名。 |
|
MaxFilesToRetain |
指定輪替時要保留的檔案數量上限 可以管理叢集設定,像是節點 資源調度、安全性和其他預先設定項目預設值為 8。 如果指定「0」(0) 的值,系統會無限期保留記錄檔,但會受到您的檔案影響 旋轉設定,但不會刪除或重新命名任何檔案。因此,為了避免 將磁碟完整錯誤設為大於 0 的值,或將一般 自動化系統清除或封存先前保留的記錄檔。 |
|
BufferMessage |
如果 HTTP 串流是 已啟用 Proxy,要求/回應訊息不會緩衝處理。如果您想 然後將 BufferMessage 設為 true。 查看「已啟用串流功能」範例分頁。預設值:false |
|
系統記錄檔目的地。將系統記錄傳送至 Splunk、Sumo Logic 或 Loggly: 請參閱設定第三方記錄管理服務。 |
Message |
建立要傳送至 Syslog 的訊息,結合文字與要擷取的變數 這些資訊請參閱範例。 注意: 回應變數會 不適用於 PostClientFlow。使用訊息變數 ,記錄錯誤和成功情況下的回應資訊。另請參閱使用注意事項。 |
Host |
系統記錄的伺服器主機名稱或 IP 位址 。如果您未包含此元素,會預設為 localhost。 | |
Port |
執行系統記錄檔的通訊埠。如果沒有 此元素的預設值是 514 | |
Protocol |
TCP 或 UDP (預設)。雖然 UDP 的效能較高, TCP 通訊協定保證訊息記錄可傳送至系統記錄伺服器。用於傳送系統記錄檔 訊息,但僅支援 TCP。 | |
FormatMessage |
選填,但必須提供 這個元素可讓您控制 Apigee 產生內容在 撰寫新的電子郵件訊息如果設為 true,Syslog 訊息的前面就會加上固定數量的字元。 這項功能,就能從郵件中篩除這些資訊。下方為修正後的 格式:
Apigee 產生的資訊包括:
如果設為 False (預設),訊息的前面不會加上這些固定值 字元。 |
|
PayloadOnly |
這個元素可將 Apigee 產生的訊息格式設為只包含 系統記錄訊息,不含 FormatMessage 指定的前置字元。 如果您不要納入這個元素或將元素留空,則預設值為 請參閱 FormatMessage。 |
|
DateFormat |
選填。 用於設定每則記錄訊息時間戳記的格式範本字串。
根據預設,Apigee 會使用 |
|
SSLInfo |
讓您透過 SSL/TLS 記錄訊息。與以下項目搭配使用:
子元素 如果您未包含這個元素或將元素留空,則預設值為 false (否) TLS/SSL)。 <SSLInfo> <Enabled>true</Enabled> </SSLInfo> 您可以像設定 <SSLInfo> 標記一樣 皆須部署在 TargetEndpoint 上,包括啟用雙向 TLS/SSL API Proxy 設定參考資料。只有 TCP 通訊協定 支援。 |
|
logLevel |
選填。 有效值: 設定要納入訊息記錄的特定資訊層級。 如果您使用 |
結構定義
使用須知
將 MessageLogging 政策附加至 API Proxy 流程時,請考慮將其置於 ProxyEndpoint 回應,在名為 PostClientFlow 的特殊流程中。PostClientFlow 會執行 能確保所有指標都可供使用 。如要進一步瞭解如何使用 PostClientFlow,請參閱 API Proxy 設定參考資料。
PostClientFlow 具有以下特點:
- 此類別只會在回應流程中執行。
- 這是 Proxy 進入錯誤狀態後所執行的唯一流程。
由於 Proxy 會執行,無論 Proxy 成功還是失敗,您都可以將 PostClientFlow 中的 MessageLogging 政策,並保證這類政策一律會執行。
下列 Trace 圖片顯示,MessageLogging 政策在 PostClientFlow,在 DefaultFaultRule 執行後:
在本例中,因「驗證 API 金鑰」政策無效而導致錯誤 鍵。
以下為包含 PostClientFlow 的 ProxyEndpoint 定義:
<ProxyEndpoint name="default"> ... <PostClientFlow> <Response> <Step> <Name>Message-Logging-1</Name> </Step> </Response> </PostClientFlow> ... </ProxyEndpoint>
Edge 會將訊息記錄為簡單的文字,您可以調整記錄設定來納入變數,例如 收到要求或回應的日期和時間、要求中的使用者身分、 傳送要求的來源 IP 位址等邊緣記錄訊息 這表示不會因為封鎖呼叫而造成延遲 至 API
MessageLogging 政策會將記錄的訊息寫入記憶體內的緩衝區。訊息記錄器 會從緩衝區讀取訊息,再寫入您設定的目的地。每項 目的地具有專屬的緩衝區。
如果緩衝區的寫入率增加超過讀取率,則緩衝區溢位和 。如果發生這種情況,您可能會在記錄中看到包含下列內容的訊息: 檔案:
Log message size exceeded. Increase the max message size setting
如果您在 Edge for Private Cloud 4.15.07 以下版本中遇到這個問題,請找出
message-logging.properties
檔案,並使用以下解決方案:
將 max.log.message.size.in.kb
屬性 (預設值 = 128 KB) 調高
message-logging.properties
檔案。
如果是 Private Cloud 4.16.01 以上版本,請在 /opt/apigee/customer/application/message-processor.properties 檔案內設定 conf/message-logging.properties+max.
log.message.size.in.kb
屬性,然後重新啟動訊息處理器。請注意,這個屬性一開始預設為已加上註解。
注意:回應訊息 錯誤流程不支援 Edge 中的變數。這些變數 如果上述流程是錯誤流程,則適用於 PostClientFlow。記錄回應 從 PostClientFlow 取得資訊,請使用 message 物件。你可以 不論是否不存在,都會使用這個物件,從回應取得標頭和其他資訊 發生錯誤。請參閱訊息 變數。
控管記錄訊息 Edge 私有雲中的時間戳記
根據預設,所有記錄訊息中的時間戳記格式如下:
yyyy-MM-dd'T'HH:mm:ss.SSSZ
可使用
DateFormat
元素。如要瞭解此範本的行為,請參閱
Java 的 SimpleDateFormat 類別說明文件。根據這項定義,將會取代 yyyy
帶有 4 位數的年份,MM
將替換為 2 位數的月份,以此類推。
上述格式會產生這個格式的字串:
2022-09-28T22:38:11.721+0000
您可以使用 conf_system_apigee.syslogger.dateFormat 屬性控制該格式。例如變更訊息 轉換為:
yy/MM/dd'T'HH:mm:ss.SSSZ
..將破折號取代為正斜線,並將破折號縮短為 2 位數年份,記錄在下列格式的時間戳記:
22/09/28T22:38:11.721+0000
如何變更格式:
- 開啟 message-processor.properties
編輯。如果檔案不存在,請建立檔案:
>V 罩杯 /opt/apigee/customer/application/message-processor.properties - 視需要設定屬性:
conf_system_apigee.syslogger.dateFormat=yy/MM/dd'T'HH:mm:ss.SSSZ - 儲存變更。
- 請確定屬性檔案的擁有者為「apigee」使用者:
> chown Apigee:apigee /opt/apigee/customer/application/message-processor.properties - 重新啟動邊緣訊息處理器:
> /opt/apigee/apigee-service/bin/apigee-service Edge-message-processor restart 設為
Edge for Private Cloud 中的記錄檔位置
Edge for Private Cloud 4.16.01 以上版本
根據預設,Private Cloud 訊息記錄位於 Message 的下列目錄 處理器節點:
/opt/apigee/var/log/edge-message-processor/messagelogging/org_name/environment/api_proxy_name/revision/logging_policy_name/
如要變更預設記錄位置,您可以修改 訊息處理器上的 message-logging.properties 檔案:
- bin_setenv_data_dir:
設定記錄檔儲存空間的根路徑。例如:
bin_setenv_data_dir=/opt/apigee/var/log
- conf_message-logging_log.root.dir - 如果
您將其設為相對路徑,例如
conf/message-logging.properties+log.root.dir=custom/folder/
, the path is appended to the bin_setenv_data_dir location.
如果您將這個參數設為絕對路徑,例如conf/message-logging.properties+log.root.dir=/opt/apigee/var/log/messages
,訊息 記錄檔會儲存在/opt/apigee/var/log/messages/messagelog/
中絕對路徑 的優先順序高於bin_setenv_data_dir
。
請注意,您必須將屬性參照為 conf/message-logging.properties+log.root.dir,因為 註解預設為停用如需設定範例,請參閱設定 已加註的符記
如何以一般檔案結構儲存記錄檔,讓所有的記錄檔都放在
相同的目錄,請將 conf/message-logging.properties+enable.flat.directory.structure 設為
true。訊息會儲存在
屬性,而檔案名稱的格式為
{org}_{environment}_{api_proxy_name}_{revision}_{logging_policy_name}_{filename}
。
如何設定這些屬性:
- 開啟 message-processor.properties
編輯。如果檔案不存在,請建立檔案:
>V 罩杯 /opt/apigee/customer/application/message-processor.properties - 視需要設定屬性:
conf/message-logging.properties+log.root.dir=/opt/apigee/var/log/messages - 儲存變更。
- 請確定屬性檔案的擁有者為「apigee」使用者:
> chown Apigee:apigee /opt/apigee/customer/application/message-processor.properties - 重新啟動 Edge 元件:
> /opt/apigee/apigee-service/bin/apigee-service Edge-message-processor restart 設為
Edge for Private Cloud 4.15.07 以下版本
根據預設,訊息記錄位於郵件記錄的下列位置 處理器:
/opt/apigee4/var/log/apigee/message-processor/messagelog/{org}/{environment}/{api_proxy_name}/{revision}/{logging_policy_name}/
如要變更預設記錄檔位置,您可以修改 message-logging.properties 檔案:
- data.dir - 設定根目錄 記錄檔儲存空間的路徑例如:data.dir=/opt/apigee4/var/log
- log.root.dir - 如果已設定 相對於相對路徑,例如 log.root.dir=custom/folder/,該路徑會附加至 data.dir 位置,
例如,如果結合使用兩個屬性,記錄目錄就會設為 /opt/apigee4/var/log/custom/folder/messagelog/ (請注意,已新增 /messagelog) 自動啟動)。
如果將此參數設為絕對路徑,例如 log.root.dir=/opt/apigee4/var/log/messages, 訊息記錄檔會儲存在 /opt/apigee4/var/log/messages/messagelog/。這個絕對路徑 log.root.dir 優先於 data.dir。
如何以一般檔案結構儲存記錄檔,讓所有的記錄檔都放在 相同目錄,請將 enable.flat.directory.structure 屬性設為 在訊息上的 message-logging.properties 檔案中 處理器:訊息會儲存在上述屬性指定的目錄中,以及 名稱的格式為 {org}_{environment}_{api_proxy_name}_{revision}_{logging_policy_name}_{filename}。
以下變數中的變數預設值 訊息範本
您可以分別為訊息範本中的每個變數指定預設值,例如:
如果無法解析變數 request.header.id
,則其值會取代
值為 unknown
。
<Message>This is a test message. id = {request.header.id:unknown}</Message>
您可以設定
Message
元素的 defaultVariableValue
屬性:
<Message defaultVariableValue="unknown">This is a test message. id = {request.header.id}</Message>
設定第三方記錄管理服務
MessageLogging 政策可讓您將系統記錄訊息傳送至第三方記錄管理 例如 Splunk、Sumo Logic 和 Loggly。如果您想將系統記錄傳送給其中一個 請參閱該服務的說明文件,瞭解如何設定服務的主機、通訊埠和通訊協定 然後據此設定這項政策的 Syslog 元素。
請參閱下列第三方記錄管理設定說明文件:
- Splunk (選取產品版本)
另請參閱這篇 Apigee 社群貼文:https://community.apigee.com/content/kbentry/13298/log-messages-into-splunk.html -
Sumo
邏輯
- 另請參閱這篇 Apigee 社群貼文: https://community.apigee.com/questions/5226/setting-up-logging-with-sumo-logic-which-host-shou.html
- 如需使用 Sumo Logic 做為記錄服務的完整範例,請參閱 Apigee 社群貼文。這項解決方案會使用單一 JavaScript 政策建立 HTTP POST 向 Sumo Logic HTTP 來源收集器提出要求:https://community.apigee.com/articles/32286/logging-to-sumo-logic-using-javascript-and-http.html
- Loggly
使用 Loggly 時,必須訂閱<FormatMessage>true</FormatMessage>
做為<Syslog>
元素的子項。
您也可以參閱這篇 Apigee 社群貼文,進一步瞭解記錄到 Loggly 的訊息: https://community.apigee.com/content/kbentry/14798/log-messages-into-loggly.html
錯誤參考資料
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
Fault code | HTTP status | Cause |
---|---|---|
steps.messagelogging.StepDefinitionExecutionFailed |
500 | See fault string. |
Deployment errors
These errors can occur when you deploy a proxy containing this policy.
Error name | Cause | Fix |
---|---|---|
InvalidProtocol |
The deployment of the MessageLogging policy can fail with this error if the protocol
specified within the <Protocol> element is not valid. The valid protocols are TCP and UDP.
For sending syslog messages over TLS/SSL, only TCP is supported. |
build |
InvalidPort |
The deployment of the MessageLogging policy can fail with this error if the port number
is not specified within the <Port> element or if it is not valid. The port number must be
an integer greater than zero. |
build |
Fault variables
These variables are set when a runtime error occurs. For more information, see What you need to know about policy errors.
Variables | Where | Example |
---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name Matches "StepDefinitionExecutionFailed" |
messagelogging.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | messagelogging.ML-LogMessages.failed = true |
Example error response
{ "fault":{ "detail":{ "errorcode":"steps.messagelogging.StepDefinitionExecutionFailed" }, "faultstring":"Execution failed" } }
Example fault rule
<FaultRule name="MessageLogging"> <Step> <Name>ML-LogMessages</Name> <Condition>(fault.name Matches "StepDefinitionExecutionFailed") </Condition> </Step> <Condition>(messagelogging.ML-LogMessages.failed = true) </Condition> </FaultRule>
流程變數
系統會在發生政策錯誤時填入下列變數。
messagelogging.failed
messagelogging.{stepdefinition-name}.failed
相關主題
- 由 Edge 公開的變數:變數參考資料