Logtail根據採集情境不同操作流程也有差異,本文將介紹在主機情境,K8s叢集情境,容器情境下如何使用Logtail採集日誌。
主機情境Logtail安裝採集指引
採集主機文本日誌時,根據主機所屬情況,Log Service支援通過一鍵自動安裝Logtail方式和手動安裝Logtail方式進行採集。
一鍵自動安裝
滿足如下條件時,可在控制台上一鍵自動安裝Logtail,Log Service將藉助營運編排服務OOS,在ECS執行個體中自動安裝Logtail,詳情請參見主機文本日誌採集(自動安裝)。
主控件類型為ECS。
主機與Log ServiceProject同屬一個帳號,且同屬一個地區。
手動安裝方式
存在如下任一情況時,請在主機上手動安裝Logtail,詳情請參見主機文本日誌採集(手動安裝)。
主控件類型不是ECS。
主控件類型是ECS,但是與Log Service不屬於同一個帳號。
主控件類型是ECS,且與Log ServiceProject同屬一個帳號,但不屬於同一個地區。
K8s叢集情境Logtail安裝採集指引
採集容器K8s日誌可用於故障排查、效能最佳化、安全審計、資源使用率分析。Log Service支援通過DaemonSet方式和Sidecar方式採集K8s叢集的容器日誌。
DaemonSet模式
在DaemonSet模式中,Kubernetes叢集確保每個節點(Node)只運行一個Logtail容器,用於採集當前節點內所有容器(Containers)的日誌。
當新節點加入叢集時,Kubernetes叢集會自動在新節點上建立Logtail容器;當節點退出叢集時,Kubernetes叢集會自動銷毀當前節點上的Logtail容器。通過DaemonSet的自動擴縮容機制以及標識型機器組,無需您手動管理Logtail執行個體。
Sidecar模式
在Sidecar模式中,每個容器組(Pod)運行一個Logtail容器,用於採集當前容器組(Pod)所有容器(Containers)的日誌。不同Pod的日誌採集相互隔離。
為了採集同一Pod中其他容器的記錄檔,需要通過共用儲存卷的方式來完成,即將同一份儲存卷分別掛載到業務容器和Logtail容器。關於Sidecar方式採集容器日誌的更多資訊,請參見Sidecar日誌採集介紹和Sidecar模式樣本。儲存卷的更多資訊,請參見儲存基礎知識。
採集方式 | 情境 | 優勢 | 劣勢 |
DaemonSet | 一般情況下建議使用DaemonSet | 營運簡單、資源佔用少、支援採集容器的標準輸出和文字檔、配置方式靈活。 | Logtail採集該節點內所有容器的日誌,存在一定的效能瓶頸,且各個容器之間的隔離性較弱。 |
Sidecar | 需要每個Pod使用單獨Logtail執行個體採集的情況(ASK叢集預設使用sidecar方式部署Logtail)。 | 為每個需要採集日誌的容器建立一個Sidecar容器,多租戶隔離性好。 | 資源消耗較高,配置與維護較複雜, |
容器發現
Logtail容器採集其他容器的日誌,必鬚髮現和確定哪些容器正在運行,這個過程稱為容器發現。在容器發現階段,Logtail容器不與Kubernetes叢集的kube-apiserver進行通訊,而是直接和節點上的容器運行時守護進程(Container Runtime Daemon)進行通訊,從而擷取當前節點上的所有容器資訊,避免容器發現對叢集kube-apiserver產生壓力。
Logtail支援通過Namespace名稱、Pod名稱、Pod標籤、容器環境變數等條件指定或排除採集相應容器的日誌。
容器檔案路徑映射
在Kubernetes叢集中,因為Pod之間資源隔離,Logtail容器無法直接存取其他Pod中的容器的檔案。但是,容器內的檔案系統都是由宿主機的檔案系統掛載形成,通過將宿主機根目錄所在的檔案系統掛載到Logtail容器,就可以訪問宿主機上的任意檔案,從而間接採集業務容器檔案系統的檔案。容器內檔案路徑與宿主機檔案路徑之間的關係被稱為檔案路徑映射。
記錄檔在當前容器內的路徑是/log/app.log,假設映射後的宿主機路徑是/var/lib/docker/containers/<container-id>/log/app.log。Logtail預設將宿主機根目錄所在的檔案系統掛載到自身的/logtail_host目錄下,因此Logtail實際採集的檔案路徑為/logtail_host/var/lib/docker/containers/<container-id>/log/app.log。
注意事項
容器運行時支援
支援引擎:
Docker
Containerd
儲存驅動限制(僅Docker):
只支援Overlay、Overlay2。
其他驅動:若使用非Overlay驅動,需將日誌目錄通過資料卷掛載為臨時目錄。
儲存卷掛載方式
如果NAS以PVC的方式掛載到資料目錄。
禁止使用:DaemonSet部署Logtail。
推薦使用:
採集叢集文本日誌(Sidecar):每個Pod部署獨立Logtail容器
適用情境:高隔離性需求、多租戶環境。
記錄檔路徑規範
禁止使用軟連結:
錯誤配置:
/var/log/app -> /mnt/nas/logs。正確配置:直接使用實體路徑
/mnt/nas/logs。
掛載路徑匹配規則:
如果業務容器的資料目錄通過資料卷(Volume)掛載, 採集路徑必須≥掛載點路徑。
樣本:
1掛載點:/var/log/service 2✅ 有效採集路徑:/var/log/service 或 /var/log/service/subdir 3❌ 無效採集路徑:/var/log (路徑過短)
容器停止時的Tlog
運行時 | 日誌完整性 | 容器銷毀延遲風險 | 最佳化建議 |
Docker | 如果在容器停止前,出現因網路延遲、資源佔用多等原因導致的採集延時,可能會丟失容器停止前的部分日誌。 | 當容器被停止時,Logtail會立刻釋放容器檔案控制代碼,容器可正常退出。 | 增加日誌發送頻率(調小 |
Containerd | 當容器被停止時,Logtail會持續持有容器內檔案的控制代碼(即保持對記錄檔的開啟狀態),直至所有記錄檔內容發送完畢。 | 當出現網路延遲、資源佔用多等原因導致的採集延時時,可能會導致業務容器不能及時銷毀。 | 配置 |
Docker容器情境Logtail安裝採集指引
在伺服器上部署Docker後可以採集日誌,Docker的日誌分為兩種類型:標準輸出和檔案日誌。檔案日誌是指容器內產生的日誌被寫入伺服器的指定檔案目錄中,而標準輸出則指容器自身的即時輸出資料流。