使用「取代」規則來修正日誌資料

在 IBM® Cloud Logs中,您可以使用 取代 規則來變更日誌結構、修復格式不正確的日誌、變更日誌嚴重性或遮罩資訊。

開始之前

剖析規則組織在 規則群組內。 每一個群組都有一個名稱及一組規則,它們之間具有邏輯關係。 會根據規則群組的順序 (從開始到結束) 來處理日誌。 然後由規則群組內的規則順序,並根據它們之間的邏輯運算子 (AND/OR) 來處理它們。規則可協助您處理、剖析及重組日誌資料,以準備監視及分析。 如需相關資訊,請參閱 使用規則群組。

配置取代規則

請完成下列步驟:

  1. 按一下 資料管線 圖示 資料管線圖示 > 剖析規則,然後按一下 新建規則群組。

  2. 在 詳細資料 區段中,輸入 規則群組名稱 和 規則群組說明。

  3. 在 規則比對器 區段中,配置應用程式、子系統及嚴重性,以定義要套用規則群組所包含之規則的日誌。

  4. 在 規則 區段中,選取 取代 「取代剖析規則」圖示。

    1. 輸入名稱。

    2. 選擇性地輸入說明。

    3. 選取來源欄位。 這是套用 RegEx 的欄位。

    4. 選擇目的地欄位。 這是將移入套用 RegEx 表示式之結果的欄位。

    5. 輸入 正規表示式 (RegEx)。

    6. 輸入將取代相符 RegEx的取代字串。

    7. 如果您想要啟用規則,請將狀態切換為 ACTIVE。

  5. 按一下 新增規則 並選取所需的規則類型,以新增其他規則群組。 切換 AND/OR 以選取您要如何處理其他規則。

  6. 按一下建立規則群組。

範例: 修復格式不正確的 JSON 日誌

取代規則的一般使用案例是修復格式不正確的 JSON 日誌。

在下列範例中,傳送的 JSON 日誌具有日期字首,會岔斷 JSON 格式,並將它們轉換成非結構化日誌。

RegEx 會識別子字串,並移除日誌中不正確的字串。

原始日誌為:

2020-08-07 {“status”:”OK”, “user”:John Smith”, “ops”:”J1”}

RegEx:

.*{

用來取代評估 RegEx 表示式之結果的字串為:

{

產生的日誌:

{"status":"OK", "user":"John Smith", "ops":"J1"}

範例: 使用巢狀欄位重新建置日誌

下列範例顯示如何使用取代規則來重建具有巢狀欄位的日誌。 巢狀欄位是擷取及剖析規則中的限制項。

原始日誌:

{"ops":"G1","user":"John Smith-2125 Sierra Ventura Dr.-Sunnyvale-CA-94054","status":"305"}

RegEx:

(.*user"):"([^-]*)-([^-]*)-([^-]*)-([^-]*)-([^-]*)",([^$]*)

每一個括弧都代表一個可由 $n n=1..7 處理的擷取群組。

取代字串:

$1:{"name":"$2","address":"$3","city":"$4","state":"$5","zip":"$6"},$7

產生的日誌;

{
   "ops":"G1",
   "User":{
      "name":"John Smith",
      "address":"2125 Sierra Ventura Dr.",
      "city":"Sunnyvale",
      "state":"CA",
      "Zip":"94054"
   },
   "status":"305"
}

範例: 將字串化 (跳出) JSON 欄位轉換成物件

inner_json 規則是一個特殊取代規則,在包含字串化 (跳出) 的 JSON 日誌中採用欄位值 JSON,並將它轉換成物件。

在下列範例中,原始日誌為:

{
 "server":"opa",
 "IBC":"45ML",
 "thread":"1201",
 "message":"{\"first_name\":\"John\", \"last_name\":\"Smith\", \"userID\":\"AB12345\", \"duration\":45}"
}

欄位訊息具有跳出合法 JSON 的字串值。

我們的特殊取代規則會將欄位名稱從原始名稱 "message" 變更為 "inner_json":

RegEx:

“message”\s*:\s*”{\s*\\”

此 RegEx 會識別具有跳出 JSON 開頭的欄位名稱訊息。

取代字串為:

“inner_json”:”{\”

此範例只會取代欄位名稱,而不會取代其他任何項目。

產生的日誌:

{
   "server":"opa",
   "inner_json":{
     "first_name":"John" ,
     "last_name":"Smith" ,
     "userID":"AB12345" ,
     "duration":45
  }
}