BLS日志采集使用方式
更新时间:2024-09-25
BCI容器组支持采集业务容器内的日志文件、标准输出,并推送到BLS(百度云日志服务)。
BCI日志采集架构
上图是BCI日志采集的架构图,如需采集日志,需要创建三类关键对象
- 存储端:存放用户日志的存储产品,由用户负责创建。目前日志采集支持的存储产品有:BLS日志集、百度云Kafka、BOS、BES。
- 采集端:采集物理机/容器内日志文件的Agent组件,一般一个物理机/容器组内部署一个,由BCI负责创建。
- 传输任务:实际满足用户的日志采集需求,关键参数包含:采集任务名称、收集器列表、日志文件路径、日志存储端。传输任务可以由用户创建,也可以由BCI创建。
使用流程
创建存储产品(存储端)
注:如果已有存储产品,可跳过此步骤。
用户可选择使用如下任一种云产品作为存储端,详细使用方案如下
以 BLS 日志集为例,我们的创建流程如下
- 登录百度智能云官网,点击右上角的“管理控制台”,快速进入控制台界面。
- 选择“产品服务>日志服务BLS”,进入『日志集』页面
- 点击『新建日志集』,弹出新建日志集页面,填写配置信息,包括:
a. 名称:设置日志集名称,1-128位字符、数字、英文和符号,符号仅限:_-.。名称创建后不支持修改,并且同一region下名称具有唯一性。
b. 存储周期:支持1~180天范围的存储周期。如需更大存储周期,请提交 BLS 工单。 - 日志集名称为『temp』,完成配置后点击『确定』,完成日志集的创建。
BCI创建传输任务
目前支持通过vk方式支持使用BLS日志采集。支持复用已经存在的BLS任务,复用时当前填写的任务配置需和BLS远端配置一致。
VK使用
通过vk使用bls日志采集需要在业务容器中设置日志采集任务参数为环境变量,并设置volumeMounts和volume参数。
1.容器内设置环境变量:
{key} 表示日志采集类型,internal表示采集容器内的日志文件,stdout表示采集容器的标准输出,不支持填写其他内容。
{index}用于区分同一个日志采集任务下的配置,取值为正整数,同一pod内{index}不可重复。
一个容器内支持多个internal类型的bls任务采集任务,仅支持一个stdout类型的bls日志采集任务。
环境变量key名 | 是否必选 | 类型 | 含义 | 输入限制 |
---|---|---|---|---|
bls_task_{key}_{index}_name | 是 | string | 日志采集任务名(支持复用已经存在的bls任务名) | 不能包含空格,长度为1-64字符;同一用户名空间下不能重复。 |
bls_task_{key}_{index}_logStore | 是 | string | 日志集(需用户手动创建) | 1-128位字符、数字、英文和符号,符号仅限:_-. |
bls_task_{key}_{index}_ttl | 是 | int | 日志采集有效文件时间 单位:天 |
正整数 |
bls_task_{key}_{index}_rateLimit | 是 | int | 日志投递速率 | 单位:MB/s, 速率范围在1-100之间 |
bls_task_{key}_{index}_matchedPattern | 是 | string | 日志匹配表达式,符合规则的日志,将被采集 | 无 |
bls_task_{key}_index_srcDir | 是 | string | 日志采集源目录 | 容器输出填写stdout,容器内日志填写目录 |
2.容器内设置volumeMounts和volume
每添加一个bls日志采集任务,需要在yaml文件中添加对应的volumeMounts参数和volume参数。
- internal 类型
volumeMounts参数:
name应与环境变量bls_task_internal_{index}_name对应的value一致,mountPath应该与日志采集任务对应的srdDir路径一致。
volumeMounts:
- mountPath: /var/log
name: emptydir1
volume参数:
name应与环境变量bls_task_internal_{index}_name对应的value一致,类型为: emptyDir。
volumes:
- name: emptydir1
emptyDir: {}
- stdout类型
volumeMounts参数:
volumeMounts:
- mountPath: /stdout
name: sidecar-stdout
volume参数:
volumes:
- name: sidecar-stdout
flexVolume:
driver: k8s/sidecar-stdout
注意:多个标准输出日志存储只需要指定一次sidecar-stdout volume,未指定stdout日志采集,则无需指定该volume。
- 使用示例
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: test-bls-log
name: test-bls-log
spec:
replicas: 1
selector:
matchLabels:
app: test-bls-log
template:
metadata:
labels:
app: test-bls-log
spec:
containers:
- name: nginx
image: registry.baidubce.com/qa-test/wynginx:7.0.0
imagePullPolicy: Always
env:
- name: bls_task_internal_index_name # 注:index用来区分不同的采集任务,如bls_task_internal_1_name,bls_task_stdout_2_name。
value: {{bls_task_internal_index_name}}
- name: bls_task_internal_index_logStore
value: {{bls_task_internal_index_logStore}}
- name: bls_task_internal_index_ttl
value: {{bls_task_internal_index_ttl}}
- name: bls_task_internal_index_rateLimit
value: {{bls_task_internal_index_rateLimit}}
- name: bls_task_internal_index_matchedPattern
value: {{bls_task_internal_index_matchedPattern}}
- name: bls_task_internal_index_srcDir
value: {{bls_task_internal_index_srcDir}}
- name: bls_task_stdout_index_name
value: {{bls_task_stdout_index_name}}
- name: bls_task_stdout_index_logStore
value: {{bls_task_stdout_index_logStore}}
- name: bls_task_stdout_index_ttl
value: {{bls_task_stdout_index_ttl}}
- name: bls_task_stdout_index_rateLimit
value: {{bls_task_stdout_index_rateLimit}}
- name: bls_task_stdout_index_matchedPattern
value: {{bls_task_stdout_index_matchedPattern}}
- name: bls_task_stdout_index_srcDir
value: {{bls_task_stdout_index_srcDir}} # 标准输出填写stdout即可
volumeMounts:
- mountPath: {{bls_task_internal_index_srcDir}}
name: {{emptyDirName}} # name需与volume name一致
- mountPath: /stdout # 标准输出的挂载路径和名称不可修改
name: sidecar-stdout
volumes:
- name: {{emptyDirName}}
emptyDir: {}
- name: sidecar-stdout # 有标准输出的采集任务需要填写,否则不要填写。
flexVolume:
driver: k8s/sidecar-stdout
nodeSelector:
type: "virtual-kubelet"
tolerations:
- key: "virtual-kubelet.io/provider"
operator: "Equal"
value: "baidu"
effect: "NoSchedule"