全部產品
Search
文件中心

Simple Log Service:採集Docker容器的標準輸出

更新時間:Sep 20, 2024

在伺服器上部署Docker後可以採集日誌,Docker的日誌分為兩種類型:標準輸出和檔案日誌。檔案日誌是指容器內產生的日誌被寫入伺服器的指定檔案目錄中,而標準輸出則指容器的即時輸出資料流。本文介紹使用Logtail採集容器的標準輸出到Logstore的操作步驟。

概覽

本文以雲端服務器為例,在Linux系統的ECS執行個體中安裝Docker後,針對您在該環境中部署的業務容器所產生的標準輸出(stdout)及標準錯誤(stderr)日誌,您可以使用Logtail進行採集。採集的日誌資料將被傳輸至Logstore中,便於查詢和分析。

前提條件

  • 已建立Project和Logstore。更多資訊,請參見管理Project管理Logstore

  • ECS執行個體處於運行中的狀態並已安裝Docker

  • 目標容器持續產生日誌。
    重要 Logtail只採集增量日誌。如果下發Logtail配置後,記錄檔無更新,則Logtail不會採集該檔案中的日誌。更多資訊,請參見讀取日誌

1. 部署Logtail容器

1.1 拉取Logtail鏡像

  1. 登入ECS管理主控台,找到目標ECS執行個體,單擊遠端連線,串連成功後,使用docker -v查看版本資訊。如下圖回顯資訊所示,表示Docker已安裝成功。

    image

  2. 拉取Logtail鏡像,地區資訊請參見地區對照表,根據實際情況替換cn-hangzhou。如果您的伺服器處於阿里雲VPC網路中,需將registry修改為registry-vpc

    docker pull registry.cn-hangzhou.aliyuncs.com/log-service/logtail

1.2 啟動Logtail容器

替換命令模板中的3個參數:${your_region_name}${your_aliyun_user_id}${your_machine_group_user_defined_id},然後執行命令。

docker run -d \
    -v /:/logtail_host:ro \
    -v /var/run/docker.sock:/var/run/docker.sock \
    --env ALIYUN_LOGTAIL_CONFIG=/etc/ilogtail/conf/${your_region_name}/ilogtail_config.json \
    --env ALIYUN_LOGTAIL_USER_ID=${your_aliyun_user_id} \
    --env ALIYUN_LOGTAIL_USER_DEFINED_ID=${your_machine_group_user_defined_id} \
    registry.${your_region_name}.aliyuncs.com/log-service/logtail

命令執行成功會產生一個容器ID,例如我設定機器組的使用者自訂標識為docker-log-demo,容器啟動如下。

image

參數說明如下:

參數

參數說明

--privileged

--privileged參數是必要的,否則刪除其他容器時可能出現錯誤container text file busy,更多資訊請參見Bug 1468249Bug 1441737issue 34538。對於Centos 7.4及以上版本(不包括Centos 8.0),可以去掉--privileged參數,然後執行以下命令設定fs.may_detach_mounts=1

echo fs.may_detach_mounts=1 | sudo tee /etc/sysctl.d/may_detach_mounts.conf
sudo sysctl -p /etc/sysctl.d/may_detach_mounts.conf
sysctl fs.may_detach_mounts

${your_region_name}

請根據Log ServiceProject所在地區及網路類型填寫。其中,地區資訊請參見地區對照表,網路類型選擇請參見選擇網路

  • 如果為公網,格式為region-internet。例如華東 1(杭州)cn-hangzhou-internet

  • 如果為阿里雲內網,格式為region。例如華東 1(杭州)cn-hangzhou

${your_aliyun_user_id}

您的Log Service所在的阿里雲帳號(主帳號)ID。擷取方法,請參見擷取Log Service所在的阿里雲帳號(主帳號)ID

${your_machine_group_user_defined_id}

設定機器組的使用者自訂標識,請確保該標識在您的Project所在地區內唯一。比如docker-log-demo

重要

如果您要自訂配置Logtail容器的啟動參數,只需保證以下前提條件。

  • 啟動時,必須配置3個環境變數ALIYUN_LOGTAIL_USER_DEFINED_IDALIYUN_LOGTAIL_USER_IDALIYUN_LOGTAIL_CONFIG

  • 將宿主機上的/var/run目錄掛載到Logtail容器的/var/run目錄。

  • 將宿主機根目錄掛載到Logtail容器的/logtail_host目錄。

  • 如果Logtail日誌(/usr/local/ilogtail/ilogtail.LOG)中出現The parameter is invalid : uuid=none的錯誤記錄檔,請在宿主機上建立一個product_uuid檔案,在其中輸入任意合法UUID(例如169E98C9-ABC0-4A92-B1D2-AA6239C0D261),並把該檔案掛載到Logtail容器的/sys/class/dmi/id/product_uuid目錄。

2. 建立Logtail採集配置

  1. 進入採集配置流程。單擊頁面右側快速接入資料卡片,在自建開源/商業軟體頁簽下,單擊Docker標準輸出-容器

    image

  2. 選擇目標Project和Logstore,然後單擊下一步

    image

  3. 單擊建立機器組。在右側面板,單擊使用者自訂標識,輸入log-docker-demo,然後單擊確定。這裡的自訂標識必須和步驟1.2中配置的${your_machine_group_user_defined_id}一致。

    image

  4. 在Logtail配置頁面,確定全域配置、輸入配置和處理配置,單擊下一步。參數說明請參見採集主機文本日誌

    image

  5. 在查詢分析配置頁面建立索引,根據嚮導完成資料接入。

3. 查看上傳結果

3.1 查看容器標準輸出日誌

例如目標容器名為aliweb,使用docker logs ${container_ID}命令查看容器標準輸出的日誌。

image

您也可以通過記錄檔查看。預設情況下,Docker將容器的日誌輸出儲存在宿主機的/var/lib/docker/containers目錄下。每個容器對應一個以容器ID命名的檔案夾,而容器的日誌則儲存在該檔案夾內,檔案名稱通常為${container_id}-json.log

3.2 查看上傳結果

image

Docker標準輸出的每條日誌預設包含如下欄位:

欄位名

說明

__source__

Logtail容器的IP地址。

__tag__:__hostname__

宿主機的名稱。

__tag__:__receive_time__

日誌到達服務端的時間。

_time_

資料上傳時間,例如2024-02-02T02:18:41.979147844Z

_source_

輸入源類型,stdout或stderr。

_image_name_

鏡像名。

_container_name_

容器名。

_container_ip_

業務容器IP地址。

相關文檔