為什麼我的 優先洞察 搜尋沒有結果?

當使用 優先洞察 在 IBM® Cloud Logs 搜尋時,我沒有看到預期的結果傳回。 我知道我在日誌中搜尋的欄位是存在的,但 IBM Cloud Logs 似乎無法透過我的搜尋找到它們。

搜尋欄位值不會傳回預期結果。

該問題通常與映射異常有關。

如果新日誌欄位的欄位名稱先前由IBM Cloud Logs提取,但具有不同的值類型,則可能會發生對應異常。 當IBM Cloud Logs為攝取的資料建立索引時,它會嘗試將欄位對應到下列類型之一:

  • String
  • Numeric
  • Object
  • Array

例如,如果欄位 user 已被攝取,並且第一個接收到的值為“username”,IBM Cloud Logs將為欄位 user 建立類型為 string 的索引:

"user": “username”`

如果稍後攝取新日誌,其中也有一個名為「user」的字段,其格式如下:

"user": {
  “email”: “username@yourcompany.com”,
  ”login”: “username”`
}

在IBM Cloud Logs中建立映射異常。 任何 優先洞察 尋找名為 user 欄位的搜尋,都會預期有 string 值,這是基於第一個擷取 user 欄位的日誌。

由於映射異常,任何 優先洞察 搜尋 userarray 類型 (user.emailuser.login) 將不會傳回任何結果。

您可以使用IBM Cloud Logs UI 來決定是否有映射異常。

若要識別映射異常,請完成以下步驟:

  1. 檢查IBM Cloud Logs UI 中日誌計數旁邊的圖示:

    映射例外圖示
    映射例外圖示

    將滑鼠停留在該圖示上將顯示所選時間範圍內查詢結果中存在映射異常的日誌數量。

  2. 若要識別未正確索引的特定日誌,請啟用 Show Mapping errors 選項:

    選擇如何顯示映射錯誤。 按一下“設定”,然後按一下“顯示對應錯誤”。
    選擇如何顯示映射錯誤

  3. 啟用此選項後,刷新瀏覽器。

    存在映射異常且未編制索引的欄位上將顯示感嘆號。

    標記具有映射異常的欄位
    標記具有映射異常的欄位

    快速識別哪些欄位存在映射異常的另一種方法是執行查詢:_exists_: coralogix.failed_reason

    查詢以顯示映射異常
    查詢以顯示映射異常。

    此查詢將僅傳回在選定時間範圍內具有對應異常的日誌行。

有兩種方法可以解決映射異常:

  • 選項 1:不建立索引進行搜尋。

    如果由於映射異常導致查詢時沒有找到某個字段,可以用 All Logs 代替 Priority Insights 進行搜尋。 在 All Logs 中搜尋時,搜尋會繞過索引和映射異常。

  • 選項 2:修復攝取時的日誌記錄。

    您可以修復使用相同欄位名稱但資料類型不同的新日誌記錄。

    1. 建立 RegEx表達式 以用適當的後綴替換欄位名稱。 例如:

      field_obj
      如果IBM Cloud Logs需要一個字串,但找到一個物件:
      • 正規表示式: ("field"\s*:\s*{)
      • 取代為: "field_obj":{
      field_arr
      如果IBM Cloud Logs需要一個字串,但找到一個陣列:
      • 正規表示式: ("field"\s*:\s*[)
      • 取代為: "field_arr":[
      field_str
      如果IBM Cloud Logs需要一個對象,但找到一個字串:
      • 正規表示式: ("field"\s*:\s*")
      • 取代為: "field_str":"
    2. 使用RegEx建立解析 替換規則 來修復新日誌。