閱讀175 返回首頁    go 阿裏雲


Logtail-收集詳解__Getting-Started_日誌服務-阿裏雲

Logtail收集文本文件按照如下步驟收集日誌內容:

指定文件路徑名稱 => 指定日誌行分割方式 => 提取日誌字段內容 => 指定日誌時間

1.1 指定日誌行分割方式

一般完整的一條訪問日誌(比如nginx的訪問日誌)為一行一條,每條日誌以換行符分割。下麵即為兩條訪問日誌:

  1. 10.1.1.1 - - [13/Mar/2016:10:00:10 +0800] "GET / HTTP/1.1" 0.011 180 404 570 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; 360se)"
  2. 10.1.1.1 - - [13/Mar/2016:10:00:11 +0800] "GET / HTTP/1.1" 0.011 180 404 570 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; 360se)"

但是對於java應用中的程序日誌,一條日誌通常會跨越多行,因此隻能通過日誌開頭開頭的特征區分每條日誌行首,下麵即為一條java程序日誌:

  1. [2016-03-18T14:16:16,000] [INFO] [SessionTracker] [SessionTrackerImpl.java:148] Expiring sessions
  2. 0x152436b9a12aecf, 50000
  3. 0x152436b9a12aed2, 50000
  4. 0x152436b9a12aed1, 50000
  5. 0x152436b9a12aed0, 50000

如上java日誌可以觀察開頭都是以固定的時間格式,即“行首正則表達式”為:[d+-d+-w+:d+:d+,d+]s.*。如下:

1.2 提取日誌字段內容

根據日誌服務數據模型要求,一條日誌的內容包含一個或者多個Key-Value對,如果需要提取指定字段進行分析處理,需要設置正則表達式提取指定內容,如果不需要對日誌內容進行處理,可以將整條日誌做為一對Key-Value對。對於如上訪問日誌:

  • 提取字段

    1. 正則表達式:(S+)s-s-s[(S+)s[^]]+]s"(w+).*
    2. 提取內容:1)10.1.1.1;2)13/Mar/2016:10:00 ;3)GET
  • 不提取字段

    1. 正則表達式:(.*)
    2. 提取內容:1)10.1.1.1 - - [13/Mar/2016:10:00:10 +0800] "GET / HTTP/1.1" 0.011 180 404 570 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; 360se)"

1.3 指定日誌時間

根據日誌服務數據模型要求,一條日誌必須要有時間(time)字段,並且格式為unix時間戳。目前提供使用係統時間(即Logtail抓取該條日誌的時間)或者日誌內容中的時間做為日誌的時間。對於如上訪問日誌:

  • 日誌內容時間

    1. 時間:13/Mar/2016:10:00:10
    2. 時間表達式:%d/%b/%Y:%H:%M:%S
  • 抓取日誌時間

    1. 時間:抓取日誌時的時間戳

2. 控製台配置文件日誌收集模式

以上一節的訪問日誌為例,控製台進行Logtail配置可通過“極簡模式”和“完整模式”進行設置,具體流程如下:

2.1 指定配置名稱

首先需要指定配置的具體名稱,並且名稱不能進行修改。

配置名稱隻能包含小寫字母,數字,橫線(-)和下劃線(_),並且必須以小寫字母或者數字作為開頭和結尾,長度限製在3-63個字節。

2.3 指定配置模式

如果選擇數據源為文本文件,首先需要指定文件目錄和文件名稱。

指定文件夾下所有符合文件名稱的文件都會被監控到(包含所有層次的目錄),其中文件夾必須填寫完整路徑,文件名稱可以是完整名,也支持通配符模式匹配。例如:/apsara/nuwa/…/app.Log

2.3.1 極簡模式

為了降低用戶配置文本文件日誌內容收集的難度,提供極簡配置方式,隻需要提供文件指定完成文件目錄和文件名稱,Logtail即會按照每行為一條日誌,並且不會對日誌內容中字段進行提取,同時將日誌時間設定為抓取該條日誌的時間,如下:

設置完成後,應用到指定機器組即可完成Logtail收集的配置,收集到服務端的日誌如下:

如上麵的索引查詢結果頁麵,每條日誌所有內容都在名為“content”的key之下。

目前極簡模式即默認選擇了“單行模式”,“不提取字段(即正則表達式為(.*))”和“使用係統時間”三個功能,如果後續需要對極簡模式進行更詳細的設置可以通過修改配置進入“完整模式”逐項調整。

2.3.2 完整模式

如果需要對內容做更多個性化的抓取設置(比如跨行日誌,提取字段等),選擇“完整模式”即可進行個性化定製。用戶可以參考使用Logtail寫入日誌了解這些參數的具體含義和設置方式。下麵將對每項功能進行具體描述:

  • 單行模式

    目前“完整模式”中默認選擇了“單行模式”,即按照一行為一條日誌進行分割,如果需要收集如上跨行日誌(比如java程序日誌),需要關閉“單行模式”,然後設置“行首正則表達式”,“行首正則表達式”提供自動生成和手動輸入兩種功能,填寫完成日誌樣例後,點擊“自動生成”即會生成正則,如果無法自動生成,可以切換為手動模式輸入進行驗證。

    在配置Logtail時需要用戶提供日誌樣例的目的是方便日誌服務控製台自動提取其中的正則匹配模式,請務必使用實際場景的日誌。

  • 提取字段

    如果需要對日誌內容中的字段單獨分析處理,可以使用使用“提取字段”功能將指定字段變成Key-Value對後發送到服務端,所以需要用戶指定解析一條日誌內容的方式(具體來說,就是正則表達式)。日誌服務控製台提供兩種方式讓用戶指定解析正則表達式。第一種方式是通過簡單交互自動生成正則表達式,如下圖:

    用戶通過“劃選”的方式操作日誌樣例,告知需要提取的字段。日誌服務控製台會自動生成正則表達式。關於“劃選”的具體交互方式請參考如下動畫:

    盡管第一種方式避免了用戶自己寫正則表達式的困擾,但是自動生成的正則表達式很多時候並不是最優化的,所以日誌服務控製台仍然提供用戶手動直接輸入正則的途徑。用戶隻需點擊上圖中的“手動輸入正則表達式”鏈接即可切換到手動輸入模式,如下圖:

    手動輸入完成後,點擊圖上“驗證”按鈕即會驗證用戶輸入的正則表達式是否可以解析、提取日誌樣例。無論使用自動生成還是手動輸入方式產生日誌解析正則表達式後,日誌服務控製台都會要求用戶給每個提取字段“命名”(設定對於字段的Key),如下圖:

    對於極簡模式中的訪問日誌樣例,可以通過“提取字段”功能提取訪問ip,訪問時間,http方法,訪問地址和訪問延時等字段,如下:

  • 使用係統時間

    默認設置“使用係統時間”,如果關閉“使用係統時間”功能,Logtail在解析一條日誌字符串時就要求用戶指定提取字段中的某一個為時間字段,並“命名”為time(如上圖)。在選取time字段後,用戶可以點擊上圖中的“自動生成”按鈕生成解析該時間字段的方式。關於日誌時間格式的更多信息請參考Logtail日期格式

根據如上的“完整模式”生成的配置保存後即會同步至Logtail客戶端,收集到服務端的日誌內容如下:

如上麵的查詢頁麵結果,每條日誌都按照設定的Key-Value收集到了服務端。

完成解析日誌的配置後,點擊“完成配置”按鈕即可以完成該Logtail配置的全部創建過程。之後回到應用機器組

最後更新:2016-11-23 17:16:06

  上一篇:go Logstore-操作__Getting-Started_日誌服務-阿裏雲
  下一篇:go Logtail-配置__Getting-Started_日誌服務-阿裏雲