어플리케이션 로그체계 수립이 우선이나 그렇지 않은 경우 fluentd 로그 수집 체계 변경.
사전 준비
aws ecr 생성
로컬 iam 인증 세팅
Router53 → ec2 연결
소스 가져오기
git clone https://github.com/fluent/fluentd-kubernetes-daemonset
작업
@include kubernetes.conf
@include conf.d/*.conf
<match **>
@type forward
@id out_fwd
<server>
host "#{ENV['FLUENT_FOWARD_HOST']}"
port "#{ENV['FLUENT_FOWARD_PORT']}"
</server>
</match>
kubernetes.conf
# AUTOMATICALLY GENERATED
# DO NOT EDIT THIS FILE DIRECTLY, USE /templates/conf/kubernetes.conf.erb
<match fluent.**>
@type null
</match>
<source>
@type tail
@id in_tail_container_logs
path /var/log/containers/*service*.log
pos_file /var/log/fluentd-containers.log.pos
tag "#{ENV['FLUENT_CONTAINER_TAIL_TAG'] || 'kubernetes.*'}"
exclude_path "#{ENV['FLUENT_CONTAINER_TAIL_EXCLUDE_PATH'] || use_default}"
read_from_head false
<parse>
@type json
</parse>
</source>
<filter **>
@type concat
key log
multiline_start_regexp /^(\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}:\d{1,2}.\d{0,3})/
</filter>
# Deletes fluentd logs
<filter kubernetes.**>
@type grep
<exclude>
key log
pattern /DEBUG/
</exclude>
</filter>
<filter kubernetes.**>
@type kubernetes_metadata
@id filter_kube_metadata
kubernetes_url "#{ENV['FLUENT_FILTER_KUBERNETES_URL'] || 'https://' + ENV.fetch('KUBERNETES_SERVICE_HOST') + ':' + ENV.fetch('KUBERNETES_SERVICE_PORT') + '/api'}"
verify_ssl "#{ENV['KUBERNETES_VERIFY_SSL'] || true}"
ca_file "#{ENV['KUBERNETES_CA_FILE']}"
</filter>
#Parses Spring logs
<filter kubernetes.**>
@id spring_parser
@type parser
key_name log
<parse>
@type regexp
expression /^(?<logtime>[^ ]* [^ ]*) +(?<level>[^ ]*) +(?<pid>[^ ]*) +--- +\[ *(?<thread>[^ ]*)\] +(?<class>[^ ]*) +: +(?<message>.*)$/
time_key logtime
time_type string
time_format %Y-%m-%d %H:%M:%S.%L
timezone +09:00
multiline true
keep_time_key true
</parse>
#hash_value_field parsed # add hash dept
reserve_data true
emit_invalid_record_to_error false
</filter>
daemonset 수정
image: ....ap-northeast-2.amazonaws.com/dev_fluentd:latest
kubectl apply -f fluentd-daemonset-forward.yaml