Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions templates/conf/kubernetes/containers.conf.erb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
path "#{ENV['FLUENT_CONTAINER_TAIL_PATH'] || '/var/log/containers/*.log'}"
pos_file "#{File.join('/var/log/', ENV.fetch('FLUENT_POS_EXTRA_DIR', ''), 'fluentd-containers.log.pos')}"
tag "#{ENV['FLUENT_CONTAINER_TAIL_TAG'] || 'kubernetes.*'}"
<%# NOTE: To keep simplicity, fallback logic for exclude_path was implemented in entrypoint.sh.erb -%>
exclude_path "#{ENV['FLUENT_CONTAINER_TAIL_EXCLUDE_PATH'] || use_default}"
read_from_head true
@include ../tail_container_parse.conf
Expand Down
48 changes: 48 additions & 0 deletions templates/entrypoint.sh.erb
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,52 @@ fi

<% end %>

# Avoid infinite parse error logging loopback, exclude
# fluentd*.log explicitly here as a fallback.
path_exist_in_env() {
VALUE="$1"
TARGETS="$2"
OLD_IFS="$IFS"
IFS=','
for path in $TARGETS; do
path=$(echo "$path" | xargs) # trim spaces in both ends
if [ "$path" = "$VALUE" ]; then
IFS="$OLD_IFS"
return 1
fi
done
IFS="$OLD_IFS"
return 0
}

WILDCARD_TAIL_PATH="/var/log/containers/*.log"
IGNORE_TAIL_PATH="/var/log/containers/fluentd*.log"
if [ -n "$FLUENT_CONTAINER_TAIL_PATH" ]; then
if [ -n "${FLUENT_CONTAINER_TAIL_EXCLUDE_PATH}" ]; then
path_exist_in_env "$IGNORE_TAIL_PATH" "$FLUENT_CONTAINER_TAIL_EXCLUDE_PATH"
if [ $? -eq 0 ]; then
# Exclude rule exists, then ensure to ignore it if is missing
export FLUENT_CONTAINER_TAIL_EXCLUDE_PATH="$FLUENT_CONTAINER_TAIL_EXCLUDE_PATH,$IGNORE_TAIL_PATH"
fi
else
path_exist_in_env "$WILDCARD_TAIL_PATH" "$FLUENT_CONTAINER_TAIL_PATH"
if [ $? -eq 1 ]; then
# No exclude rule yet, so if wildcard was enabled, ignore fluentd*.log
export FLUENT_CONTAINER_TAIL_EXCLUDE_PATH="$IGNORE_TAIL_PATH"
fi
fi
else
# Wildcard will be enabled as fallback in tail path
if [ -n "$FLUENT_CONTAINER_TAIL_EXCLUDE_PATH" ]; then
path_exist_in_env "$IGNORE_TAIL_PATH" "$FLUENT_CONTAINER_TAIL_EXCLUDE_PATH"
if [ $? -eq 0 ]; then
# No exclude rule yet, so ignore fluentd*.log
export FLUENT_CONTAINER_TAIL_EXCLUDE_PATH="$FLUENT_CONTAINER_TAIL_EXCLUDE_PATH,$IGNORE_TAIL_PATH"
fi
else
# No exclude rule yet, set ignore
export FLUENT_CONTAINER_TAIL_EXCLUDE_PATH="$IGNORE_TAIL_PATH"
fi
fi

exec fluentd -c /fluentd/etc/${FLUENTD_CONF} -p /fluentd/plugins --gemfile /fluentd/Gemfile ${FLUENTD_OPT}