基于fluentd。
日志目录:/tmp
0.运行机制
利用fluentld采集日志,上传到kafka。
ccs-log-collector会检测“日志规则”的变化,调用logController.Sync()[1.将collector资源转换成fluentd的配置文件;2.确保/var/log/td-agent/buffer和/var/log/td-agent/pos仅包含需要采集的日志(仅删除文件)]
1.采集日志目录
/var/log/td-agent/buffer
/var/log/td-agent/pos
pod中/var/log/td-agent,对应host路径/tmp/ccs-log-collector。
1.1buffer
ccs.cluster.log_collector.buffer.<日志采集规则名>.<>.log
日志
ccs.cluster.log_collector.buffer.<日志采集规则名>.<>.log.meta
1.2pos
ccs.cluster.log_collector.pos.all
ccs.cluster.log_collector.pos.host-path.<日志采集规则名>
2.flentd
2.1配置文件
/tmp/fluentd-helper<数字>
1)容器日志配置
// 定义输入源
<source>
@type tail // 想要的输入类型, 和 tail -f 非常相似
time_format %Y-%m-%dT%H:%M:%S.%NZ
path /rootfs/var/log/containers/*.log
pos_file /var/log/td-agent/pos/ccs.cluster.log_collector.pos.all
tag ccs.* // 在这个源创建的每个标签前加上ccs.
format json
keep_time_key true
read_from_head true // 表示读取整个文件,而不只是新的日志行
@label @ServiceLog // 引用标签@ServiceLog
</source>
<label @ServiceLog>
// 过滤器:利用过滤插件record_transformer,为每条日志添加log属性
<filter **>
@type record_transformer
enable_ruby
<record>
log ${record['log'].length > 524288 ? record['log'][0..524288] : record['log']}
</record>
</filter>
// 提取tag中的关键信息来向kubernetes查询Pod和Namespace上的Label,并将其添加到日志的json结构体内
<filter ccs.**>
@type kubernetes_metadata
kubernetes_url https://172.16.252.1:443
ca_file /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
bearer_token_file /var/run/secrets/kubernetes.io/serviceaccount/token
</filter>
// 定义输出:针对ccs.**标签
<match ccs.**>
@type rewrite_tag_filter // fluent-plugin
<rule>
key $.kubernetes.log
pattern .+
tag USE_MATCHED_VALUE
</rule>
</match>
// 定义输出:针对*_*标签=>kafka
<match *_*>
@type kafka_buffered
brokers 134.0.0.9:8080 // 用户定义的kafka地址
<buffer>
flush_mode interval
retry_type exponential_backoff
total_limit_size 32MB
chunk_limit_size 4MB
chunk_full_threshold 0.8
@type file
path /var/log/td-agent/buffer/ccs.cluster.log_collector.buffer.www.* // 缓冲区中文件名
overflow_action block
flush_interval 4s
flush_thread_burst_interval 0.01
</buffer>
default_topic wsxdef // topic名
output_data_type json
topic_key ccs_log_collect_topic
partition_key ccs_log_collect_partition
partition_key_key ccs_log_collect_partition_key
message_key_key ccs_log_collect_message_key
max_send_retries 1
required_acks 1
</match>
</label>
2)主机文件配置
<source>
@type tail
path /rootfs/data
pos_file /var/log/td-agent/pos/ccs.cluster.log_collector.pos.host-path.wwwxxx
tag host.path.*
format none
read_from_head true
path_key path
@label @ccs.cluster.log_collector.label.wwwxxx
</source>
<label @ccs.cluster.log_collector.label.wwwxxx>
<filter **>
@type record_transformer
enable_ruby
<record>
path ${record["path"].start_with?("/rootfs") ? record["path"][7..record["path"].length] : record["path"]}
message ${record['message'].length > 524288 ? record['message'][0..524288] : record['message']}
</record>
</filter>
<match **>
@type kafka_buffered
brokers 134.0.0.9:8080
<buffer>
flush_mode interval
retry_type exponential_backoff
total_limit_size 32MB
chunk_limit_size 4MB
chunk_full_threshold 0.8
@type file
path /var/log/td-agent/buffer/ccs.cluster.log_collector.buffer.wwwxxx.host-path
overflow_action block
flush_interval 4s
flush_thread_burst_interval 0.01
</buffer>
default_topic wsxdef
output_data_type json
max_send_retries 1
required_acks 1
topic_key ccs_log_collect_topic
partition_key ccs_log_collect_partition
partition_key_key ccs_log_collect_partition_key
message_key_key ccs_log_collect_message_key
</match>
</label>
2.2 插件
fluent-plugin-kubernetes_metadata_filter
fluent-plugin-rewrite-tag-filter
3)kafka插件
Fluent之kafa传输日志(第二章)-yellowcong_狂飙的yellowcong的博客-优快云博客_fluent kafka
3.ccs-log-collector组件