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。