阿里云SLS采集标准Docker容器日志

本文介绍通过阿里云sls服务来采集docker容器的日志,分为采集标准输出日志和采集日志文件。

基础配置

https://img.bwcxtech.com/img/20210113092439.png

同时会提示创建Logstore

https://img.bwcxtech.com/img/20210113092442.png

创建成功后会询问是否立即接入数据,目前先取消暂不接入。

详情请参见创建用户自定义标识机器组

/etc/ilogtail/user_defined_id文件中配置用户自定义标识。

例如:您要配置用户自定义标识为log-docker,则执行如下命令编辑文件,在文件中输入log-docker

1
2
mkdir /etc/ilogtail
echo "log-docker" > /etc/ilogtail/user_defined_id

根据上面的信息我们可以获得

日志服务Project所在地及网络类型:cn-shanghai,地域信息请参见表 1。下面用到的your_region_name

阿里云账号ID可以直接查看阿里云账号管理页面获取,详情请参见配置用户标识。下面用到的your_aliyun_user_id

机器组的自定义标识:log-docker。下面用到的your_machine_group_user_defined_id

部署Logtail容器

  1. 拉取Logtail镜像。

    1
    
    docker pull registry.cn-hangzhou.aliyuncs.com/log-service/logtail
    
  2. 启动Logtail容器。

    说明 请在配置参数前执行以下任意一种配置,否则删除其他container时可能出现错误container text file busy

    • Centos 7.4及以上版本设置fs.may_detach_mounts=1,相关说明请参见Bug 1468249Bug 1441737issue 34538

      1
      2
      3
      4
      5
      
      # set
      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
      # confirm set. expected output: `fs.may_detach_mounts = 1`
      sysctl fs.may_detach_mounts
      
    • 为Logtail授予privileged权限,启动参数中添加--privileged。详细内容请参见docker run命令

    根据实际情况替换模板中的3个参数:${your_region_name}${your_aliyun_user_id}${your_machine_group_user_defined_id}

    1
    2
    3
    4
    5
    6
    7
    8
    
    docker run -d \
    -v /:/logtail_host:ro \
    -v /var/run:/var/run \
    --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} \
    --name logtail \
    registry.cn-hangzhou.aliyuncs.com/log-service/logtail
    

    说明

    您可以自定义配置Logtail容器的启动参数,只需保证以下前提条件。

    1. 启动时,必须配置3个环境变量:ALIYUN_LOGTAIL_USER_DEFINED_IDALIYUN_LOGTAIL_USER_IDALIYUN_LOGTAIL_CONFIG
    2. 必须宿主机将/var/run挂载到Logtail容器的/var/run目录。
    3. 将宿主机根目录挂载到Logtail容器的/logtail_host目录。
    4. 如果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目录。

创建采集配置

回到阿里云进入Project,

https://img.bwcxtech.com/img/20210113092448.png

填写之前定义的机器组标识

https://img.bwcxtech.com/img/20210113092451.png

采集配置

由于这里采集docker日志原理与采集k8s一致,故文档按照采集k8s操作方式。

官方解释:如果您需要采集Docker文件,操作步骤与采集Kubernetes文件类似。更多信息,请参见通过DaemonSet-控制台方式采集标准输出

https://img.bwcxtech.com/img/20210113092453.png

接入数据区域,Kubernetes - 标准输出单击。

https://img.bwcxtech.com/img/20210113092458.png

若您已经安装Logtail日志组件,请点击【使用现有机器组】。

https://img.bwcxtech.com/img/20210113092501.png

采集配置

https://img.bwcxtech.com/img/20210113092505.png

我的内容如下

该输入源类型为: service_docker_stdout

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
{
    "inputs": [
        {
            "detail": {
                "BeginLineCheckLength": 10,
                "BeginLineRegex": "\\d+-\\d+-\\d+.*",
                "IncludeLabel": {
                    "io.rancher.container.name": "tms"
                },
                "ExcludeLabel": {}
            },
            "type": "service_docker_stdout"
        }
    ],
    "processors": [
        {
            "detail": {
                "KeepSource": false,
                "NoMatchError": true,
                "Keys": [
                    "time",
                    "thread",
                    "level",
                    "module",
                    "message"
                ],
                "SourceKey": "content",
                "Regex": "(\\[[^\\[]+)(\\[[^\\[]+)(\\[[^\\[]+)(\\S+)(.*)",
                "NoKeyError": true
            },
            "type": "processor_regex"
        }
    ]
}

代表的意思是只采集Label为io.container.name=tms的日志。详情请参见通过DaemonSet-控制台方式采集标准输出

如果日志输出为json,使用以下配置即可。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
{
    "inputs": [
        {
            "detail": {
                "IncludeLabel": {
                    "io.rancher.container.name": "wcpt-server"
                }
            },
            "type": "service_docker_stdout"
        }
    ],
    "processors": [
        {
            "detail": {
                "KeepSource": false,
                "ExpandConnector": "",
                "SourceKey": "content",
                "NoKeyError": true
            },
            "type": "processor_json"
        },
        {
            "detail": {
                "DropKeys": [
                    "_image_name_",
                    "_source_",
                    "_container_name_",
                    "_time_",
                    "sourceclass",
                    "sourcefile",
                    "sourceline",
                    "sourcemethod",
                    "timeMillis",
                    "threadPriority",
                    "threadId",
                    "loggerFqcn",
                    "markername",
                    "endOfBatch"
                ]
            },
            "type": "processor_drop"
        }
    ]
}

日志数据处理详见:使用Logtail插件处理数据

官方解释:如果您需要采集Docker文件,操作步骤与采集Kubernetes文件类似。更多信息,请参见请参见通过DaemonSet-控制台方式采集文本文件

https://img.bwcxtech.com/img/20210630124932.png

这一点还挺有意思的,至少我不用去挂载日志到宿主机了。

接入数据区域,单击Kubernetes - 文件。

https://img.bwcxtech.com/img/20210630124750.png

若您已经安装Logtail日志组件,请点击【使用现有机器组】。

https://img.bwcxtech.com/img/20210630124755.png

采集配置,由于我这里日志文件为json格式,不需要做太多处理。

https://img.bwcxtech.com/img/20210630124758.png