日誌可以通過日誌主題(Topic)來劃分,您可以在Log Service控制台上建立Logtail配置時設定日誌主題,也可以在使用API或SDK上傳資料時設定日誌主題。
空-不產生Topic
設定Topic產生方式為空-不產生topic,則表示不組建記錄檔主題。
機器組Topic屬性
該方式用於區分不同伺服器產生的日誌。如果您不同伺服器上的日誌的儲存路徑或檔案名稱相同,您可以通過日誌主題進行區分。
您可以將伺服器添加到不同的機器組中,並為機器組設定不同的Topic屬性,然後在建立Logtail配置時,將Topic產生方式設定為機器組Topic屬性。Logtail上報資料時會將伺服器所在機器組的Topic屬性作為日誌主題的名稱上傳至Log Service,在查詢日誌時需要指定日誌主題(即機器組的Topic屬性)為查詢條件。
檔案路徑正則
該方式用於區分不同使用者或執行個體產生的日誌資料。如果不同的使用者或者執行個體將日誌儲存在不同目錄中,但是下級目錄和記錄檔名相同,Log Service在採集日誌時無法明確區分日誌是由哪個使用者或執行個體產生的。
提取檔案路徑中的單個值
您可以在建立Logtail配置時將Topic產生方式設定為檔案路徑正則,並且輸入檔案路徑的Regex,並使用擷取的群組捕獲待提取的內容(此處的Regex需要完整匹配檔案路徑,擷取的群組有且僅有一個)。Logtail上報資料時會將使用者名稱或執行個體名作為日誌主題的名稱上傳至Log Service,在查詢日誌時需要指定日誌主題(即使用者名稱或執行個體名)為查詢條件。
說明 檔案路徑的Regex中,需要對正斜線(/)進行轉義。
例如不同使用者將日誌記錄在不同目錄下,但是記錄檔名稱相同,目錄路徑如下所示。
/logs
| - /userA/serviceA
| - service.log
| - /userB/serviceA
| - service.log
| - /userC/serviceA
| - service.log
如果在Logtail採集配置中僅設定檔路徑為/logs,檔案名稱為service.log,將三個service.log檔案中的內容採集至同一個Logstore中,則無法區分日誌具體由哪個使用者產生。您可以通過如下方式提取檔案路徑中的值,產生不同的日誌主題。
- Regex
\/(.*)\/serviceA\/.*
- 提取結果
__topic__: userA __topic__: userB __topic__: userC
提取檔案路徑中的多個值
如果單個日誌主題不足以區分日誌的來源,則您可以提取檔案路徑中的多個值作為區分日誌的資訊,即您可以配置多個正則擷取的群組提取多個值作為日誌的Tag。其中擷取的群組包括命名擷取的群組(?P<name>)或非命名擷取的群組。如果全是命名擷取的群組,則產生的tag欄位為__tag__:{name};如果全是非命名擷取的群組,則產生的tag欄位為__tag__:__topic_{i}__,其中{i}為擷取的群組的序號。
說明 當Regex中存在多個擷取的群組時,不會產生__topic__欄位。
例如檔案路徑為/logs/userA/serviceA/service.log,您可以通過如下方式提取檔案路徑中的多個值。
- 樣本1:使用非命名擷取的群組進行正則提取。
- Regex
\/logs\/(.*?)\/(.*?)\/service.log
- 提取結果
__tag__:__topic_1__: userA __tag__:__topic_2__: serviceA
- Regex
- 樣本2:使用命名擷取的群組進行正則提取。
- Regex
\/logs\/(?P<user>.*?)\/(?P<service>.*?)\/service.log
- 提取結果
__tag__:user: userA __tag__:service: serviceA
- Regex
靜態主題產生
將Topic產生方式設定為檔案路徑正則,在自訂正則中輸入customized:// + 自訂佈景主題名
,表示使用自訂的靜態日誌主題。
說明 Logtail 0.16.21(Linux系統)及以上版本支援該設定。