<system>
@log_level debug
workers 4
root_dir /var/log/fluent/
</system>
<source>
@type forward
@id input1
@log_level debug
port 24224
bind 0.0.0.0
</source>
# Used for docker health check
<source>
@type http
port 8888
bind 0.0.0.0
</source>
# records sent for health checking won't be forwarded anywhere
<match health**>
@type null
</match>
# Prometheus Configuration
# count number of incoming records per tag
<filter **>
@type prometheus
<metric>
name fluentd_input_status_num_records_total
type counter
desc The total number of incoming records
<labels>
tag ${tag}
hostname ${hostname}
</labels>
</metric>
</filter>
<filter **firelens**>
@type concat
key log
multiline_start_regexp '^\{\\"@timestamp'
multiline_end_regexp '/\}/'
separator ""
flush_interval 1
timeout_label @NORMAL
</filter>
<filter **firelens**>
@type parser
key_name log
reserve_data true
emit_invalid_record_to_error false
<parse>
@type json
</parse>
</filter>
<filter **firelens**>
@type record_transformer
enable_ruby
<record>
taskDef ${record["ecs_task_definition"].gsub(/:.*/, '')}
</record>
</filter>
<filter lambdaNode**>
@type parser
key_name data
reserve_data true
emit_invalid_record_to_error false
<parse>
@type json
</parse>
</filter>
<filter lambdaPython**>
@type record_transformer
enable_ruby
<record>
function_name ${record["function_name"].gsub(/:.*/, '')}
</record>
</filter>
<filter lambdaPython**>
@type parser
key_name message
reserve_data true
emit_invalid_record_to_error false
<parse>
@type json
</parse>
</filter>
# count number of outgoing records per tag
<match **firelens**>
@type copy
@id firelens
<store>
@type elasticsearch
@id firelens_es
scheme https
ssl_version TLSv1_2
host "#{ENV['ELASTIC_HOST']}"
port "#{ENV['ELASTIC_POST']}"
user "#{ENV['ELASTIC_USER']}"
password "#{ENV['ELASTIC_PWD']}"
ssl_verify false
log_es_400_reason true
index_name ${taskDef}-%Y.%m
reconnect_on_error true
reload_on_failure true
reload_connections false
suppress_type_name true
sniffer_class_name Fluent::Plugin::ElasticsearchSimpleSniffer
<buffer tag, time, ecs_task_definition, taskDef>
@type file
flush_mode lazy
flush_thread_count 8
# path /var/log/fluent/firelens.*.buffer
total_limit_size 8GB
chunk_limit_size 80MB
timekey 5s
timekey_wait 1s
overflow_action drop_oldest_chunk
retry_max_interval 16s
disable_chunk_backup true
retry_forever false
retry_max_times 1
</buffer>
</store>
<store>
@type prometheus
@id firelens_pro
<metric>
name fluentd_output_status_num_records_total
type counter
desc The total number of outgoing records
<labels>
tag ${tag}
hostname ${hostname}
</labels>
</metric>
</store>
</match>
<match lambdaNode**>
@type copy
@id lambdaNode
<store>
@type elasticsearch
@id lambdaNode_es
scheme https
ssl_version TLSv1_2
host "#{ENV['ELASTIC_HOST']}"
port "#{ENV['ELASTIC_POST']}"
user "#{ENV['ELASTIC_USER']}"
password "#{ENV['ELASTIC_PWD']}"
include_timestamp true
ssl_verify false
log_es_400_reason true
index_name ${$.context.functionName}-%Y.%m
reconnect_on_error true
reload_on_failure true
reload_connections false
suppress_type_name true
sniffer_class_name Fluent::Plugin::ElasticsearchSimpleSniffer
reload_after 100
<buffer tag, time, $.context.functionName>
flush_mode lazy
chunk_limit_size 5MB
flush_thread_count 8
total_limit_size 512MB
timekey 5s
timekey_wait 1s
retry_max_interval 16s
disable_chunk_backup true
</buffer>
</store>
<store>
@type prometheus
@id lambdaNode_pro
<metric>
name fluentd_output_status_num_records_total
type counter
desc The total number of outgoing records
<labels>
tag ${tag}
hostname ${hostname}
</labels>
</metric>
</store>
</match>
<match lambdaPython**>
@type copy
@id lambdaPython
<store>
@type elasticsearch
@id lambdaPython_es
scheme https
ssl_version TLSv1_2
host "#{ENV['ELASTIC_HOST']}"
port "#{ENV['ELASTIC_POST']}"
user "#{ENV['ELASTIC_USER']}"
password "#{ENV['ELASTIC_PWD']}"
include_timestamp true
ssl_verify false
log_es_400_reason true
index_name ${function_name}-%Y.%m
reconnect_on_error true
reload_on_failure true
reload_connections false
suppress_type_name true
sniffer_class_name Fluent::Plugin::ElasticsearchSimpleSniffer
reload_after 100
<buffer tag, time, function_name>
flush_mode lazy
chunk_limit_size 5MB
flush_thread_count 8
total_limit_size 512MB
timekey 5s
timekey_wait 1s
retry_max_interval 16s
disable_chunk_backup true
</buffer>
</store>
<store>
@type prometheus
@id lambdaPython_pro
<metric>
name fluentd_output_status_num_records_total
type counter
desc The total number of outgoing records
<labels>
tag ${tag}
hostname ${hostname}
</labels>
</metric>
</store>
</match>
<label @FLUENT_LOG>
<match fluent.*>
@type null
</match>
</label>
<label @NORMAL>
<match **>
@type null
</match>
</label>
# expose metrics in prometheus format
<source>
@type prometheus
bind 0.0.0.0
port 24231
metrics_path /metrics
</source>
<source>
@type prometheus_output_monitor
interval 10
<labels>
hostname ${hostname}
</labels>
</source>