全部產品
Search
文件中心

Simple Log Service:建立索引

更新時間:Oct 25, 2024

倒排索引是一種資料存放區結構,由關鍵詞和指向實際資料的邏輯指標組成,記錄了特定常值內容出現在哪些日誌中,用於快速根據關鍵詞定位到具體資料行,類似於資料的目錄。建立索引後,您才能對日誌資料進行查詢和分析。本文為您介紹Log Service索引概念、索引類型、配置索引樣本和步驟。

前提條件

索引概念和索引類型

索引概念

通常我們使用關鍵詞,從原始日誌內容中檢索想要的內容,例如檢索出包含Chrome的如下日誌內容。如果不進行切分,該日誌文本會作為一個整體,不能和關鍵詞Chrome完全對應,因此不會被檢索到。

Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.2 (KHTML, like Gecko) Chrome/192.0.2.0 Safari/537.2

為了便於檢索,需要將日誌切分成獨立、可搜尋的詞。日誌切分由分詞符實現,這些符號決定了日誌常值內容被切分的位置。以該日誌為例,使用分詞符\n\t\r,;[]{}()&^*#@~=<>/\?:'"進行分割,得到的詞是Mozilla5.0WindowsNT6.1AppleWebKit537.2KHTMLlikeGeckoChrome192.0.2.0Safari537.2

Log Service基於這些切分出的關鍵詞建立索引,索引是一種資料存放區結構,協助使用者快速找到大量日誌中的特定資訊。

索引類型

索引分為全文索引欄位索引。分詞符不支援中文,開啟包含中文選項,Log Service會自動按照中文分詞。

  • 全文索引:根據分詞符直接將整個日誌切分成多個text類型的詞語。可以通過關鍵詞進行查詢,例如查詢語句:Chrome or Safari ,查詢包括ChromeSafari的日誌。更多資訊,請參見查詢文法

    全文索引

  • 欄位索引:先將日誌根據欄位名稱(KEY)進行區分,然後在欄位內使用分詞符進行分割,欄位類型包括textlongdoubleJSON。建立欄位索引後,您可以指定欄位名稱和欄位值(Key:Value)進行查詢,也可以使用SELECT語句。更多資訊,請參見欄位查詢文法分析概述

    欄位索引

    說明

    在採集日誌或投遞資料到其他雲產品時,Log Service會將日誌來源、時間戳記等資訊以Key-Value對的形式添加到日誌中。這些欄位是Log Service的保留欄位

    建立欄位索引後,可以使用以下查詢和分析語句:

    • 查詢語句:request_method:GET and status in [200 299],查詢GET請求成功(狀態代碼為200~299)的日誌。request_method:GET not region:cn-hangzhou,查詢來自非杭州地區的GET請求的日誌。

    • 查詢和分析語句:* | SELECT status_code FROM web_logs

    • 查詢和分析語句:level: ERROR | SELECT status_code FROM web_logs

配置索引的策略

配置索引只對新增日誌生效,對於已有日誌需要重建索引,配置索引後需要大致一分鐘生效。更多的欄位索引配置樣本,請參見查詢和分析JSON日誌查詢和分析網站日誌

重要

不同的索引配置,會產生不同的查詢和分析結果,請根據您的需求,合理建立索引。如果您同時建立了全文索引和欄位索引,以欄位索引的配置為準。

  • 只配置全文索引,則只能使用查詢文法進行查詢。

  • 配置欄位索引。

    • long、double類型的欄位,可以使用欄位查詢語句、分析語句(SELECT)進行查詢和分析。

    • text類型的欄位,可以使用全文檢索查詢語句、欄位查詢語句、分析語句(SELECT)。如果未開啟全文索引,全文檢索查詢語句是從所有text類型的欄位中查詢結果。如果已開啟全文索引,全文檢索查詢語句是從所有日誌中查詢結果。

索引配置樣本

  • 日誌內容中有request_time欄位,執列欄位查詢語句request_time>100

    • 只建立全文索引,返回同時包含request_time>(非分詞符)、100這三個詞的日誌。

    • 只建立double、long類型的欄位索引,返回結果是request_time大於100的日誌。

    • 建立全文索引和double、long類型的欄位索引,request_time的全文索引失效,返回結果是request_time大於100的日誌。

  • 日誌內容中有request_time欄位,執行全文檢索查詢語句request_time

    • 只建立double、long類型的欄位索引,無法查詢到相關日誌。

    • 只建立全文索引,從所有日誌文本中查詢包括request_time的日誌。

    • 只建立text類型的欄位索引,從欄位索引是text類型的欄位中查詢包括request_time的日誌。

  • 日誌內容中有status欄位,執行分析語句* | SELECT status, count(*) AS PV GROUP BY status

    • 只建立全文索引,無法查詢到相關日誌。

    • status建立欄位索引,返回結果是不同的狀態代碼及對應的PV總數。

索引流量

  • 全文索引。所有欄位名和欄位值都將作為text類型儲存,即欄位名和欄位值都被計入索引流量。

  • 欄位索引。不同資料類型的欄位的索引流量計算方式不同。

    • text類型:欄位名和欄位值都被計入索引流量中。

    • long類型和double類型:欄位名不計入在索引流量中,每個欄位值所佔的索引流量統一為8位元組。

      例如對status欄位設定了索引(long類型),欄位值為400,則字串status不會被計入在索引流量中,400的索引流量統一為8位元組。

    • JSON類型:欄位名和欄位值都被計入到索引流量中,包括未被建立索引的子節點。更多資訊,請參見如何計算JSON類型欄位的索引流量

      • 如果未對子節點設定索引,則其索引流量按照text類型進行計算。

      • 如果對子節點設定了索引,則其索引流量按照其子節點資料類型(text類型、long類型或double類型)進行計算。

計費說明

Logstore的計費方式,包含按寫入資料量計費按使用功能計費。具體資訊,請參見管理Logstore按使用功能計費模式計費項目按寫入資料量計費模式計費項目

按寫入資料量計費的logstore

按使用功能計費的logstore

  • 建立的索引會佔用儲存空間,儲存類型請參見管理智能儲存分層

  • 建立索引會產生流量,索引流量計費請參見按使用功能計費模式計費項目中的索引流量-日誌索引索引流量-日誌索引-查詢型。降低索引流量的建議,請參見文末的相關文檔

  • 重建索引會產生費用。計費項目、計費價格和建立索引相同。

建立流程

步驟一:建立索引

  1. 進入建立索引頁面。

    1. 登入Log Service控制台

    2. 在Project列表地區,單擊目標Project。

    3. 日誌儲存 > 日誌庫頁簽中,單擊目標Logstore。

    4. 在Logstore的查詢和分析頁面,選擇查詢分析屬性 > 屬性。如果還未建立索引,需要先單擊開啟索引

      配置索引

  2. 關閉自動更新索引。當Logstore為雲產品專屬Logstore或內部Logstore時,預設開啟索引自動更新開關,後續如有版本更新時可以升級到內建索引最新版本。如果需要建立索引,請在查詢分析面板中,關閉自動更新開關。

    警告

    刪除雲產品專屬Logstore的索引會影響相關報表、警示等功能的使用。

    自動更新索引

  3. 建立索引。

    配置索引參數。如果需要對欄位進行分析(SELECT語句),必須建立欄位索引,欄位索引的配置項優先順序高於全文索引的配置項。建立索引後,在1分鐘內生效。

    重要
    • Log Service已為部分保留欄位建立索引。更多資訊,請參見保留欄位

      其中__topic____source__的索引分詞符為空白,查詢這兩個欄位時,關鍵字必須完全符合。

    • __tag__為首碼的欄位不支援全文索引。您需要建立欄位索引後,才能執行查詢和分析操作,例如*| select "__tag__:__receive_time__"

    • 日誌中存在同名欄位(例如都為request_time)時,則Log Service會將其中一個欄位名顯示為request_time_0,底層儲存的欄位名仍為request_time。因此在建立索引、查詢、分析、投遞、加工時,只能使用原始欄位名request_time。

    全文索引和欄位索引配置參數

    全文索引

    參數

    說明

    日誌聚類

    開啟日誌聚類開關後,Log Service在採集文本日誌時會自動彙總相似性高的日誌,提取共同的記錄模式,協助您快速掌握日誌整體情況。更多資訊,請參見日誌聚類

    大小寫敏感

    查詢時是否區分英文字母的大小寫。

    • 開啟大小寫敏感開關,則查詢時區分大小寫。例如某條日誌含有internalError,那麼您只能使用internalError才能查詢到該日誌。

    • 關閉大小寫敏感開關,則查詢時不區分大小寫。例如某條日誌含有internalError,那麼您使用關鍵字INTERNALERRORinternalerror都能查到該日誌。

    包含中文

    查詢時是否區分中英文。

    • 開啟包含中文開關後,如果日誌中包含中文,則按照中文文法拆分中文內容,按照分詞符的設定拆分英文內容。

      重要

      中文分詞對寫入速度會有一定影響,請根據需求謹慎設定。

    • 關閉包含中文開關後,按照分詞符的設定拆分所有內容。

    分詞符

    根據指定分詞符,將日誌內容拆分成多個詞。Log Service的預設分詞符為, '";=()[]{}?@&<>/:\n\t\r。當預設設定不能滿足您的需求時,您可以自訂設定分詞符。所有的ASCII碼都可被定義為分詞符。

    如果設定分詞符為空白,則欄位值將被當成一個整體,您只能通過完整字串或模糊查詢尋找對應的日誌。

    例如日誌內容為/url/pic/abc.gif

    • 如果不設定任何分詞符,整條日誌被作為一個詞/url/pic/abc.gif,您只能通過完整字串/url/pic/abc.gif或模糊查詢/url/pic/*尋找該日誌。

    • 如果設定分詞符為正斜線(/),則原始日誌被拆分為urlpicabc.gif三個詞,您通過任意一個詞或詞的模糊查詢都可以找到該日誌,例如urlabc.gifpi*/url/pic/abc.gif

    • 如果設定分詞符為正斜線(/)和半形句號(.),則原始日誌被拆分為urlpicabcgif四個詞,您通過任意一個詞或詞的模糊查詢都可以找到該日誌。

    欄位索引

    (可選)單擊自動產生索引,Log Service會根據採集時預覽資料中的第一條內容,自動產生欄位索引。

    自動產生索引

    單擊頁面下方的image.png建立欄位,配置如下參數。

    參數

    說明

    欄位名稱

    日誌欄位名稱(KEY),例如client_ip

    欄位名稱只能包括字母、數字或底線(_),且只能以字母或底線(_)開頭。

    重要
    • 設定公網IP地址、Unix時間戳記等__tag__欄位的索引時,需設定欄位名稱__tag__:KEY形式,例如__tag__:__receive_time__。更多資訊,請參見保留欄位

    • __tag__欄位不支援數實值型別索引,請將所有__tag__欄位的索引的類型設定為text

    類型

    日誌欄位值(Value)的資料類型,可選值為text、long、double和json。更多資訊,請參見資料類型

    long類型和double類型不支援設定大小寫敏感包含中文分詞符

    別名

    欄位的別名,例如設定client_ip欄位的別名為ip

    欄位別名只能包括字母、數字或底線(_),且只能以字母或底線(_)開頭。

    重要

    別名僅用於分析語句(SELECT語句),查詢語句中仍需使用原始欄位名稱。更多資訊,請參見列的別名

    大小寫敏感

    查詢時是否區分英文字母的大小寫。

    • 開啟大小寫敏感開關,則查詢時區分大小寫。例如某條日誌含有internalError,那麼您只能使用internalError才能查詢到該日誌。

    • 關閉大小寫敏感開關,則查詢時不區分大小寫。例如某條日誌含有internalError,那麼您使用關鍵字INTERNALERRORinternalerror都能查到該日誌。

    分詞符

    根據指定分詞符,將日誌內容拆分成多個詞。Log Service的預設分詞符為, '";=()[]{}?@&<>/:\n\t\r。當預設設定不能滿足您的需求時,您可以自訂設定分詞符。所有的ASCII碼都可被定義為分詞符。

    如果設定分詞符為空白,則欄位值將被當成一個整體,您只能通過完整字串或模糊查詢尋找對應的日誌。

    例如日誌內容為/url/pic/abc.gif

    • 如果不設定任何分詞符,整條日誌被作為一個詞/url/pic/abc.gif,您只能通過完整字串/url/pic/abc.gif或模糊查詢/url/pic/*尋找該日誌。

    • 如果設定分詞符為正斜線(/),則原始日誌被拆分為urlpicabc.gif三個詞,您通過任意一個詞或詞的模糊查詢都可以找到該日誌,例如urlabc.gifpi*/url/pic/abc.gif

    • 如果設定分詞符為正斜線(/)和半形句號(.),則原始日誌被拆分為urlpicabcgif四個詞,您通過任意一個詞或詞的模糊查詢都可以找到該日誌。

    包含中文

    查詢時是否區分中英文。

    • 開啟包含中文開關後,如果日誌中包含中文,則按照中文文法拆分中文內容,按照分詞符的設定拆分英文內容。

    • 重要

      中文分詞對寫入速度會有一定影響,請根據需求謹慎設定。

    • 關閉包含中文開關後,按照分詞符的設定拆分所有內容。

    開啟統計

    開啟開啟統計功能後,您才能對該欄位進行統計分析。

步驟二:重建索引

當您需要對歷史資料配置索引或修改索引時,可以使用重建索引功能。Log Service支援在選定的時間段中按照最新的索引規則為Logstore重建索引。操作步驟,請參見重建索引函數概覽

後續步驟

查詢和分析日誌

操作步驟,請參見查詢和分析日誌。查詢和分析的樣本,請參見查詢和分析網站日誌查詢和分析JSON日誌採集和查詢分析Nginx監控日誌分析負載平衡7層訪問日誌

設定欄位的最大長度

分析時,Log Service預設支援的欄位值最大長度為2048位元組,即2KB。如果您需要修改欄位值的最大長度,可設定統計欄位(text)最大長度,取值範圍為64~16384位元組。

重要

當單個欄位值長度超過最大長度時,超出部分被截斷,不參與分析。

設定欄位最大長度

日誌聚類

開啟日誌聚類開關,Log Service在採集文本日誌時會自動彙總相似性高的日誌,提取共同的記錄模式,協助您快速掌握日誌整體情況。更多資訊,請參見日誌聚類

關閉索引

關閉索引後,歷史索引的儲存空間將在當前Logstore的資料儲存時間到期後,自動被清除。

相關文檔

常見問題

為什麼匯入日誌後查詢不到日誌?

  • 檢查已設定的分詞符是否符合要求。

  • 索引配置只對新增日誌生效,如果您要查詢和分析歷史資料,請使用重建索引功能。具體操作,請參見重建索引

如何完成雙重條件查詢?

需要使用兩個條件查詢日誌時,只需同時輸入兩個語句即可。需要在Logstore中查詢資料狀態不是OK或者Unknown的日誌。 直接搜尋not OK not Unknown即可得到合格日誌。

如何查詢包括包含多個關鍵字的日誌?

以查詢http_user_agent欄位值中包含like Gecko的日誌為例。

  • 短語查詢。http_user_agent:#"like Gecko"。短語查詢

  • like文法。* | Select * where http_user_agent like '%like Gecko%'

如何在日誌中搜尋包含空格的關鍵字?

例如,當您搜尋POS version時,會得到包含POS或者version的所有日誌。如果使用雙引號包裹,例如“POS version”,則會得到包含關鍵字POS version的所有日誌。

相關API

  • 為Logstore建立索引,請參見CreateIndex

  • 刪除指定Logstore的索引,請參見DeleteIndex

  • 查詢指定Logstore的索引,請參見GetIndex

  • 更新指定Logstore的索引配置資訊,請參見UpdateIndex