Pod日志采集
本章节将介绍在Pod内进行日志采集,允许用户通过配置容器内自定义路径下的日志文件来采集日志,并通过自定义策略处理,上报到用户kafka日志中心。
资源限制
建议您为Fluent Bit预留50MB的内存。
约束与限制
基础配置
Fluent Bit是一个开源的多平台日志处理器工具,Fluent Bit配置由SERVICE,INPUT,FILTER,PARSER,OUTPUT等模块组成,目前我们只允许定义OUTPUT模块,在OUTPUT中定义日志内容的目的端。
您可以使用下面的ConfigMap将Fluent Bit流程日志发送到kafka。
约束与限制
- output.conf配置内容需要小于1MB。
- 缩进格式需要[OUTPUT]为最外层无缩进,下面配置项为固定4空格缩进。
基础配置
在您的主配置文件中需要配置以下部分:
kind: ConfigMap
apiVersion: v1
metadata:
name: cci-logging-conf
labels:
logconf.k8s.io/discovery: "true"
data:
output.conf: |
[OUTPUT]
Name kafka
Match *
Brokers 192.168.1.3:9092
Topics test
|
参数 |
参数含义 |
必选/可选 |
约束 |
|---|---|---|---|
|
logconf.k8s.io/discovery |
标识Configmap为fluent-bit日志配置文件。 |
必选 |
必选值:true |
|
Name |
插件名称。 |
必选 |
必选值:kafka 当前只支持kafka插件。 |
|
Match |
与传入记录的标签匹配。“*”作为通配符。 |
可选 |
如果配置的话,必须是“*”。 |
|
Brokers |
broker(kafka)地址。可以同时配置多个。 |
必选 |
例如:192.168.1.3:9092,192.168.1.4:9092,192.168.1.5:9092 |
|
Topics |
日志主题。 |
可选 |
默认值为fluent-bit 传入的topic必须已经存在。 |
通过在Pod上配置volume,并配置annotation来指定sandbox volume和对应的日志output配置文件。
kind: Deployment
apiVersion: apps/v1
metadata:
name: kafka-dey
spec:
replicas: 1
selector:
matchLabels:
app: kafka
template:
metadata:
labels:
app: kafka
annotations:
logpath.k8s.io/container-0: /var/log/*.log;/var/paas/sys/log/virtual-kubelet.log
logconf.k8s.io/fluent-bit-configmap-reference: cci-logging-conf
spec:
containers:
- name: container-0
image: 'nginx:alpine'
resources:
limits:
cpu: 1000m
memory: 2048Mi
requests:
cpu: 1000m
memory: 2048Mi
imagePullSecrets:
- name: default-secret
|
Annotation |
功能 |
约束 |
|---|---|---|
|
logpath.k8s.io/$containerName |
通过Pod容器环境变量配置采集文件 $containerName为容器名变量。 |
支持配置多条路径,每个路径配置都要是以“/”开头的绝对路径,各路径配置以“;”分隔。 只支持完整日志文件路径或者使用带“*”通配符的文件名。如果配置带“*”通配符的文件名,则文件所在目录需要在容器启动时就存在。 文件名的最大长度为190。 |
|
logconf.k8s.io/fluent-bit-configmap-reference |
指定fluent-bit日志采集配置的configmap名称 |
配置的configmap必须已经存在,并且符合配置fluent-bit中描述的要求。 |
高级配置
Secret是一种加密存储的资源对象,您可以将认证信息、证书、私钥等保存在密钥中,从而解决了密码、token、密钥等敏感数据的配置问题。
apiVersion: v1 kind: Secret metadata: name: cci-sfs-kafka-tls type: Opaque data: ca.crt: ... server.crt: ... server.key: ...
用户可以通过配置SSL参数,进行加密的安全连接,证书文件等相关的文件引用通过sandbox volume的特性来支持。
kind: ConfigMap
apiVersion: v1
metadata:
name: cci-logging-conf-tls
labels:
logconf.k8s.io/discovery: true
data:
output.conf: |
[OUTPUT]
Name kafka
Match *
Brokers 192.168.1.3:9092
Topics test
rdkafka.security.protocol ssl
rdkafka.ssl.certificate.location ${sandbox_volume_kafkatls}/client.crt
rdkafka.ssl.key.location ${sandbox_volume_kafkatls}/client.key
rdkafka.ssl.ca.location ${sandbox_volume_kafkatls}/ca.crt
rdkafka.enable.ssl.certificate.verification true
rdkafka.request.required.acks 1
|
参数 |
参数含义 |
必选/可选 |
可选值 |
|---|---|---|---|
|
rdkafka.security.protocol |
用于与代理通信的协议。 |
开启SSL认证必选 |
ssl |
|
rdkafka.ssl.certificate.location |
SSL公钥路径 |
开启SSL认证必选 |
${sandbox_volume_${VOLUME_NAME}}/some.cert |
|
rdkafka.ssl.key.location |
SSL私钥路径 |
开启SSL认证必选 |
${sandbox_volume_${VOLUME_NAME}}/some.key |
|
rdkafka.ssl.ca.location |
CA 证书的文件或目录路径 |
开启对服务端证书认证必选 |
${sandbox_volume_${VOLUME_NAME}}/some-bundle.crt |
|
rdkafka.enable.ssl.certificate.verification |
是否开始对服务端证书认证 |
可选 |
可选true, false。默认为true。 |
通过在Pod上配置volume,并配置annotation来指定sandbox volume和对应的日志output配置文件。
kind: Deployment
apiVersion: apps/v1
metadata:
name: kafka-tls
spec:
replicas: 1
selector:
matchLabels:
app: kafka
template:
metadata:
labels:
app: kafka
annotations:
logpath.k8s.io/container-0: /var/log/*.log;/var/paas/sys/log/virtual-kubelet.log
logconf.k8s.io/fluent-bit-configmap-reference: cci-logging-conf
sandbox-volume.openvessel.io/volume-names: kafkatls
spec:
volumes:
- name: kafkatls
secret:
secretName: cci-sfs-kafka-tls
containers:
- name: container-0
image: 'nginx:alpine'
resources:
limits:
cpu: 1000m
memory: 2048Mi
requests:
cpu: 1000m
memory: 2048Mi
volumeMounts:
- name: kafkatls
mountPath: /tmp/sfs
imagePullSecrets:
- name: default-secret
有关kafka的更多配置项内容,可参考 https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md。