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

摘要

阿里云SLS相关配置

创建Project

image-20210107105650718

同时会提示创建Logstore

image-20210107105838995

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

创建机器组自定义标识

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

/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,

创建机器组

image-20210107112642981

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

image-20210107112751008

创建logtail配置

image-20210107131508568

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

image-20210107131709055

因为这里不是采集Kubernetes,选择使用现有机器组

image-20210107131729424

image-20210107131422617

我的内容如下

该输入源类型为: 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.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-控制台方式采集标准输出