MessageLogging 政策

查看 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 政策類型。

欄位名稱 欄位說明

File

本機檔案目的地。(只有 Private Cloud 適用的 Edge 支援檔案記錄功能 deployments.)如需瞭解檔案的儲存位置,請參閱記錄檔 做為私有雲的 Edge 位置

Message 建立要傳送至記錄檔的訊息,合併 藉此擷取您需要的資訊請參閱範例
FileName 記錄訊息的記錄檔名稱。
FileRotationOptions
rotateFileOnStartup

屬性。有效值:true/false

如果設為 True,則每次傳訊引擎都會輪替記錄檔 就會重新啟動。

FileRotationType 指定旋轉政策 (sizetime)。
MaxFileSizeInMB (選取「size」做為輪播類型時) 指定記錄檔的大小,以觸發伺服器將記錄訊息移到 獨立檔案在記錄檔達到指定大小後,伺服器會重新命名 目前的記錄檔。
RotationFrequency (選取「time」做為輪播類型時) 指定時間 (以分鐘為單位),觸發伺服器將記錄訊息移至獨立位置的時間 檔案。指定的時間間隔結束後,目前的記錄檔就會重新命名。
MaxFilesToRetain

指定輪替時要保留的檔案數量上限 可以管理叢集設定,像是節點 資源調度、安全性和其他預先設定項目預設值為 8

如果指定「0」(0) 的值,系統會無限期保留記錄檔,但會受到您的檔案影響 旋轉設定,但不會刪除或重新命名任何檔案。因此,為了避免 將磁碟完整錯誤設為大於 0 的值,或將一般 自動化系統清除或封存先前保留的記錄檔。

BufferMessage

如果 HTTP 串流是 已啟用 Proxy,要求/回應訊息不會緩衝處理。如果您想 然後將 BufferMessage 設為 true。 查看「已啟用串流功能」範例分頁。預設值:false

Syslog

系統記錄檔目的地。將系統記錄傳送至 Splunk、Sumo Logic 或 Loggly: 請參閱設定第三方記錄管理服務

Message

建立要傳送至 Syslog 的訊息,結合文字與要擷取的變數 這些資訊請參閱範例

注意: 回應變數會 不適用於 PostClientFlow。使用訊息變數 ,記錄錯誤和成功情況下的回應資訊。另請參閱使用注意事項

Host 系統記錄的伺服器主機名稱或 IP 位址 。如果您未包含此元素,會預設為 localhost。
Port 執行系統記錄檔的通訊埠。如果沒有 此元素的預設值是 514
Protocol TCP 或 UDP (預設)。雖然 UDP 的效能較高, TCP 通訊協定保證訊息記錄可傳送至系統記錄伺服器。用於傳送系統記錄檔 訊息,但僅支援 TCP。
FormatMessage

truefalse (預設)

選填,但必須提供 <FormatMessage>true</FormatMessage> 與 Loggly 搭配使用

這個元素可讓您控制 Apigee 產生內容在 撰寫新的電子郵件訊息如果設為 true,Syslog 訊息的前面就會加上固定數量的字元。 這項功能,就能從郵件中篩除這些資訊。下方為修正後的 格式:

<14>1 2023-03-20T09:24:39.039+0000 e49cd3a9-4cf6-48a7-abb9-7ftfe4d97d00 Apigee-Edge - - - Message starts here

Apigee 產生的資訊包括:

  • <14>- 優先順序分數 (請參閱 Syslog 通訊協定),根據 記錄等級和設施層級
  • 1 - 目前的系統記錄版本。
  • 含有世界標準時間偏移值的日期 (UTC = +0000)。
  • 訊息處理器 UUID。
  • 「Apigee-Edge - -」

如果設為 False (預設),訊息的前面不會加上這些固定值 字元。

PayloadOnly

truefalse (預設)

這個元素可將 Apigee 產生的訊息格式設為只包含 系統記錄訊息,不含 FormatMessage 指定的前置字元。

如果您不要納入這個元素或將元素留空,則預設值為 false

請參閱 FormatMessage

DateFormat

選填。

用於設定每則記錄訊息時間戳記的格式範本字串。 根據預設,Apigee 會使用 yyyy-MM-dd'T'HH:mm:ss.SSSZ。行為 如要瞭解此範本,請參閱 Java 的 SimpleDateFormat 類別

SSLInfo

讓您透過 SSL/TLS 記錄訊息。與以下項目搭配使用: 子元素 <Enabled>true</Enabled>

如果您未包含這個元素或將元素留空,則預設值為 false (否) TLS/SSL)。

<SSLInfo>
    <Enabled>true</Enabled>
</SSLInfo>

您可以像設定 &lt;SSLInfo&gt; 標記一樣 皆須部署在 TargetEndpoint 上,包括啟用雙向 TLS/SSL API Proxy 設定參考資料。只有 TCP 通訊協定 支援。

logLevel

選填。

有效值:INFO (預設)、ALERTWARNERROR

設定要納入訊息記錄的特定資訊層級。

如果您使用 FormatMessage 元素 (設為 true), logLevel 設定會影響系統計算出的優先分數 ( 。

結構定義


使用須知

將 MessageLogging 政策附加至 API Proxy 流程時,請考慮將其置於 ProxyEndpoint 回應,在名為 PostClientFlow 的特殊流程中。PostClientFlow 會執行 能確保所有指標都可供使用 。如要進一步瞭解如何使用 PostClientFlow,請參閱 API Proxy 設定參考資料

PostClientFlow 具有以下特點:

  1. 此類別只會在回應流程中執行。
  2. 這是 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

如何變更格式:

  1. 開啟 message-processor.properties 編輯。如果檔案不存在,請建立檔案:
    &gt;V 罩杯 /opt/apigee/customer/application/message-processor.properties
  2. 視需要設定屬性:
    conf_system_apigee.syslogger.dateFormat=yy/MM/dd&#39;T&#39;HH:mm:ss.SSSZ
  3. 儲存變更。
  4. 請確定屬性檔案的擁有者為「apigee」使用者:
    &gt; chown Apigee:apigee /opt/apigee/customer/application/message-processor.properties
  5. 重新啟動邊緣訊息處理器:
    &gt; /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}

如何設定這些屬性:

  1. 開啟 message-processor.properties 編輯。如果檔案不存在,請建立檔案:
    &gt;V 罩杯 /opt/apigee/customer/application/message-processor.properties
  2. 視需要設定屬性:
    conf/message-logging.properties+log.root.dir=/opt/apigee/var/log/messages
  3. 儲存變更。
  4. 請確定屬性檔案的擁有者為「apigee」使用者:
    &gt; chown Apigee:apigee /opt/apigee/customer/application/message-processor.properties
  5. 重新啟動 Edge 元件:
    &gt; /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 元素。

請參閱下列第三方記錄管理設定說明文件:

錯誤參考資料

本節說明在這項政策觸發錯誤時,所傳回的錯誤代碼和錯誤訊息,以及 Edge 所設定的錯誤變數。 請務必瞭解這份資訊,以便瞭解您是否要擬定錯誤規則, 處理錯誤詳情請參閱這篇文章 瞭解政策錯誤處理方式 發生錯誤

執行階段錯誤

執行政策時,可能會發生這些錯誤。

錯誤程式碼 HTTP 狀態 原因
steps.messagelogging.StepDefinitionExecutionFailed 500 請參閱「錯誤字串」一節。

部署錯誤

當您部署含有這項政策的 Proxy 時,可能會發生這些錯誤。

錯誤名稱 原因 修正
InvalidProtocol 如果通訊協定為「通訊協定」或 <Protocol> 元素中指定的值無效。有效的通訊協定為 TCP 和 UDP。 如果是透過 TLS/SSL 傳送系統記錄訊息,僅支援 TCP。
InvalidPort 如果通訊埠編號,MessageLogging 政策的部署作業可能會失敗,並出現這個錯誤 未在 <Port> 元素中指定,或是無效。通訊埠編號必須 大於零的整數

錯誤變數

系統會在發生執行階段錯誤時設定這些變數。詳情請參閱重要須知 政策錯誤。

變數 地點 範例
fault.name="fault_name" fault_name 是錯誤的名稱,如上方「執行階段錯誤」表格所列。錯誤名稱是錯誤程式碼的最後部分。 fault.name Matches "StepDefinitionExecutionFailed"
messagelogging.policy_name.failed policy_name 是使用者指定錯誤的政策名稱。 messagelogging.ML-LogMessages.failed = true

錯誤回應範例

{  
   "fault":{  
      "detail":{  
         "errorcode":"steps.messagelogging.StepDefinitionExecutionFailed"
      },
      "faultstring":"Execution failed"
   }
}

錯誤規則範例

<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
,瞭解如何調查及移除這項存取權。

相關主題