采集日志到百度云BLS
更新时间:2024-09-25
BCI 支持采集容器内的日志文件、标准输出,并推送到BLS(百度云日志服务)。
BCI日志采集架构
上图是BCI日志采集的架构图,如需采集日志,需要创建三类关键对象
- 存储端:存放用户日志的存储产品,由用户负责创建。目前日志采集支持的存储产品有:BLS日志集、百度云Kafka、BOS、BES。
- 采集端:采集物理机/容器内日志文件的Agent组件,一般一个物理机/容器组内部署一个,由BCI负责创建。
- 传输任务:实际满足用户的日志采集需求,关键参数包含:收集器列表、日志文件路径、日志存储端。传输任务可以由用户创建,也可以由BCI创建,详细说明如下:
传输任务
创建方 | BCI日志采集功能使用流程 | 优势 | 劣势 |
---|---|---|---|
用户 | 用户确保存储产品已经Ready,创建存储产品方式详见下文【使用流程】->【创建存储产品】 用户在BLS上创建传输任务,创建方式详见下文【使用流程】->【创建传输任务】->【用户创建传输任务】 用户在BCI创建BCI实例,并填写传输任务ID BCI按照传输任务的配置,自动采集日志文件并传输到BLS |
*多个BCI实例可复用同一个传输任务,避免达到传输任务个数上限(单用户最多可创建300个传输任务)。 * BCI 实例创建速度更快 |
* 使用流程复杂,需要用户在BLS额外创建传输任务 |
BCI | 用户确保存储产品已经Ready,创建存储产品方式详见下文【使用流程】->【创建存储产品】 用户在BCI创建BCI实例,并填写传输任务所需的参数,配置方式详见下文【使用流程】->【创建传输任务】->【BCI创建传输任务】 BCI按照传输任务参数,自动在BLS创建对应的传输任务 BCI按照传输任务参数,自动采集日志文件并传输到BLS |
* 使用流程简单,无需用户在BLS额外创建传输任务 | BCI会为每个实例都创建单独的传输任务,受限于单用户只能创建300个传输任务,用户在BCI最多创建300个实例 BCI 实例创建速度会略有下降 |
更多信息,请参考 BLS操作指南。
使用流程
创建存储产品(存储端)
注:如果已有存储产品,可跳过此步骤。
用户可选择使用如下任一种云产品作为存储端,详细使用方案如下
- BLS日志集使用文档
- 百度云Kafka使用文档
- BOS使用文档
以 BLS 日志集为例,我们的创建流程如下 - 登录百度智能云官网,点击右上角的“管理控制台”,快速进入控制台界面。
- 选择“产品服务>日志服务BLS”,进入『日志集』页面
- 点击『新建日志集』,弹出新建日志集页面,填写配置信息,包括: a. 名称:设置日志集名称,1-128位字符、数字、英文和符号,符号仅限:_-.。名称创建后不支持修改,并且同一region下名称具有唯一性。 b. 存储周期:支持1~180天范围的存储周期。如需更大存储周期,请提交 BLS 工单。
- 日志集名称为『temp』,完成配置后点击『确定』,完成日志集的创建。
创建传输任务
用户创建传输任务
- 登录百度智能云官网,点击右上角的“管理控制台”,快速进入控制台界面。
- 选择“产品服务>日志服务BLS”,进入『传输任务』页面,并点击『创建传输任务』
- 在『任务信息』区,请输入任务名称,并配置目的端设置。BCI任务名称是『log-task』,日志投递目的为『日志集』,日志集名称为『temp』
- 在『源端设置』区,请输入源端类型,源日志目录、匹配文件规则。源端类型一定是『主机』,源日志目录填 {BLS_LOG_DIR}。匹配文件规则填需要采集的日志文件,如果想要采集源日志目录下所有日志文件,可以填 *。
- 如果要采集的日志为日志文件,{BLS_LOG_DIR} 则是日志文件目录在容器中的绝对路径,比如『/home/work/app/logs』;
- 如果要采集的日志为标准输出,{BLS_LOG_DIR} 则固定是 /stdout/{container_name},其中{container_name} 指定采集哪个容器的标准输出。
- 忽略『收集器列表』区的配置,点击保存
- 记录任务ID {BLS_TASK_ID}
- 在BCI创建实例(日志采集到BLS功能,目前仅在 OpenAPI 支持),详见创建接口【TODO,补充创建接口】body 示例如下
{
"paymentMethod": [],
"items": [{
"config": {
"name": "bci",
"enableLog": true,
"restartPolicy": "Always", //Aways,OnFailure,Never
"vpcId": "",
"vpcUuid": "",
"cceId": "",
"subnetId": "",
"subnetUuid": "73582788-fa2a-4e80-b39c-6d2ebd0e276e",
"securityGroupId": "g-59gf44p4jmwe",
"serviceType": "BCI",
"purchaseNum": 1,
"productType": "PostPay", //付费类型,BCI目前都是后付费
"logicalZone": "zoneC",
"volumes": {
"emptyDir": [{
"name": "nginx-log" // 需要将该卷挂载到用户容器,然后将日志文件放在该卷中。收集器会自动采集该卷中的日志。
}],
},
"tags": [],
"containers": [{
"name": "container01",
"imageName": "nginx-alpine-go", //镜像名称
"imageVersion": "latest", //镜像版本(tag)
"imageAddress": "hub.baidubce.com/cce/nginx-alpine-go",//镜像地址
"memory": 1.0, //Float类型 GB
"cpu": 1.0, //Float类型 核心数
"workingDir": "working_dir", //工作路径
"imagePullPolicy": "", //镜像拉取规则
"commands": ["/bin/sh","-c"],//启动命令
"args": ['i=0; while true; do echo "{\"time\":\"$(date -u +"%FT%T.999Z")\",\"INFO\":$i}" >> /var/log/info/info.log; i=$((i+1)); sleep 1; done'], //启动参数
"volumeMounts": [{
"mountPath": "/var/log/info", // 即上文提到的 {BLS_LOG_DIR},nginx-log 是一个 emptyDir 类型的卷,用户容器作为生产者,将日志写到该卷中,BLS收集器(sidecar)作为消费者也会挂载该卷,采集用户日志,推送到BLS。
"readOnly": false,
"name": "nginx-log",
"type": "EmptyDir"
}],
"logCollections": [{
"blsTaskId": "{BLS_TASK_ID}", // 传输任务ID,{BLS_TASK_ID} 取值方式详见上文
}],
"ports": [],
"envs": []
}],
"imageRegistrySecret": []
},
"paymentMethod": []
}]
}
BCI创建传输任务
日志采集到BLS功能,目前仅在 OpenAPI 支持,详见创建接口
{
"paymentMethod": [],
"items": [{
"config": {
"name": "bci",
"enableLog": true,
"restartPolicy": "Always", //Aways,OnFailure,Never
"vpcId": "",
"vpcUuid": "",
"cceId": "",
"subnetId": "",
"subnetUuid": "73582788-fa2a-4e80-b39c-6d2ebd0e276e",
"securityGroupId": "g-59gf44p4jmwe",
"serviceType": "BCI",
"purchaseNum": 1,
"productType": "PostPay", //付费类型,BCI目前都是后付费
"logicalZone": "zoneC",
"volumes": {
"emptyDir": [{
"name": "nginx-log" // 需要将该卷挂载到用户容器,然后将日志文件放在该卷中。收集器会自动采集该卷中的日志。
}],
},
"tags": [],
"containers": [{
"name": "container01",
"imageName": "nginx-alpine-go", //镜像名称
"imageVersion": "latest", //镜像版本(tag)
"imageAddress": "hub.baidubce.com/cce/nginx-alpine-go",//镜像地址
"memory": 1.0, //Float类型 GB
"cpu": 1.0, //Float类型 核心数
"workingDir": "working_dir", //工作路径
"imagePullPolicy": "", //镜像拉取规则
"commands": ["/bin/sh","-c"],//启动命令
"args": ['i=0; while true; do echo "{\"time\":\"$(date -u +"%FT%T.999Z")\",\"INFO\":$i}" >> /var/log/info/info.log; i=$((i+1)); sleep 1; done'], //启动参数
"volumeMounts": [{
"mountPath": "/var/log/info", // 即上文提到的 {BLS_LOG_DIR},nginx-log 是一个 emptyDir 类型的卷,用户容器作为生产者,将日志写到该卷中,BLS收集器(sidecar)作为消费者也会挂载该卷,采集用户日志,推送到BLS。
"readOnly": false,
"name": "nginx-log",
"type": "EmptyDir"
}],
"logCollections": [{
"srcConfig": {
"srcDir":"/var/log/info", // 日志文件目录在容器中的绝对路径
,
比如『/home/work/app/logs』
// 如果想采集当前容器的标准输出,请固定填写 /stdout
"matchedPattern":"^.*$", // 匹配文件规则,如需采集 srcDir 下所有日志文件,可以填 *
"ttl": 1 // 有效文件时间范围
},
// 推送到 BLS 的哪个日志集
"destConfig": {
"destType": "BLS", // 推送到 BLS,而非 BOS等其他产品
"logStore": "BCI-log-gz", // 推送到BLS的哪个日志集
"rateLimit": 1, // 自定义投递速率
}],
"ports": [],
"envs": []
}],
"imageRegistrySecret": []
},
"paymentMethod": []
}]
}
查看日志
- 登录百度智能云官网,点击右上角的“管理控制台”,快速进入控制台界面。
- 选择“产品服务>日志服务BLS”,进入『查询分析』页面,并点击『日志查询』