全部產品
Search
文件中心

Simple Log Service:採集Docker容器檔案日誌

更新時間:Sep 20, 2024

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

概覽

本文以雲端服務器為例,在Linux系統內容下,完成ECS執行個體中Docker的安裝後,針對您在該環境中部署的業務容器所產生的容器日誌,您可以使用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. 登入Log Service控制台,單擊頁面右側快速接入資料卡片,在自建開源/商業軟體頁簽下,單擊Docker檔案-容器

    image

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

    image

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

    image

  4. 在Logtail配置頁面,設定配置名稱檔案路徑,例如目標容器的日誌存放在/var/www/test.log中,設定完成單擊下一步。詳細的參數說明,請參見通過DaemonSet方式採集Kubernetes容器文本日誌

    image

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

3. 查詢分析

3.1 查看容器檔案日誌

例如目標容器名為aliweb,使用docker exec -it ${container_ID} /bin/bash命令進入到容器,查看目標容器持續產生日誌。

image

3.2 查看上傳結果

image

Docker檔案中每條日誌預設包含的欄位如下所示:

欄位名

說明

__source__

Logtail容器的IP地址。

_container_ip_

業務容器的IP地址。

__tag__:__hostname__

宿主機的名稱。

__tag__:__path__

日誌採集路徑。

__tag__:__receive_time__

日誌到達服務端的時間。

__tag__:__user_defined_id__

機器組的自訂標識。

其他動作

查看Logtail運行狀態

您可以執行docker exec ${logtail_container_id} /etc/init.d/ilogtaild status命令查看Logtail運行狀態。

查看Logtail的版本號碼、IP地址和啟動時間等資訊

您可以執行docker exec ${logtail_container_id} cat /usr/local/ilogtail/app_info.json命令查看Logtail相關資訊。

查看Logtail的作業記錄

Logtail作業記錄儲存在容器內的/usr/local/ilogtail/目錄下,檔案名稱為ilogtail.LOG,輪轉檔案會壓縮儲存為ilogtail.LOG.x.gz。樣本如下:

[sudo@iZb****exh2Z ilogtail]# docker exec a287de895e40 tail -n 5 /usr/local/ilogtail/ilogtail.LOG
[2018-02-06 08:13:35.721864]    [INFO]    [8]    [build/release64/sls/ilogtail/LogtailPlugin.cpp:104]    logtail plugin Resume:start
[2018-02-06 08:13:35.722135]    [INFO]    [8]    [build/release64/sls/ilogtail/LogtailPlugin.cpp:106]    logtail plugin Resume:success
[2018-02-06 08:13:35.722149]    [INFO]    [8]    [build/release64/sls/ilogtail/EventDispatcher.cpp:369]    start add existed check point events, size:0
[2018-02-06 08:13:35.722155]    [INFO]    [8]    [build/release64/sls/ilogtail/EventDispatcher.cpp:511]    add existed check point events, size:0    cache size:0    event size:0    success count:0
[2018-02-06 08:13:39.725417]    [INFO]    [8]    [build/release64/sls/ilogtail/ConfigManager.cpp:3776]    check container path update flag:0    size:1

Logtail容器中的標準輸出並不具備參考意義,請忽略以下標準輸出內容。


start umount useless mount points, /shm$|/merged$|/mqueue$
umount: /logtail_host/var/lib/docker/overlay2/3fd0043af174cb0273c3c7869500fbe2bdb95d13b1e110172ef57fe840c82155/merged: must be superuser to unmount
umount: /logtail_host/var/lib/docker/overlay2/d5b10aa19399992755de1f85d25009528daa749c1bf8c16edff44beab6e69718/merged: must be superuser to unmount
umount: /logtail_host/var/lib/docker/overlay2/5c3125daddacedec29df72ad0c52fac800cd56c6e880dc4e8a640b1e16c22dbe/merged: must be superuser to unmount
......
xargs: umount: exited with status 255; aborting
umount done
start logtail
ilogtail is running
logtail status:
ilogtail is running

重啟Logtail

請參考以下樣本重啟Logtail。

[sudo@iZb****xh2Z ilogtail]# docker exec a287de895e40 /etc/init.d/ilogtaild stop
kill process Name: ilogtail pid: 7
kill process Name: ilogtail pid: 8
stop success
[sudo@iZb****xh2Z ilogtail]# docker exec a287de895e40 /etc/init.d/ilogtaild start
ilogtail is running

相關文檔