SungMin Cho, Samuel


Project maintained by anisia20 Hosted on GitHub Pages — Theme by mattgraham

fluentd coutom

어플리케이션 로그체계 수립이 우선이나 그렇지 않은 경우 fluentd 로그 수집 체계 변경.

사전 준비

aws ecr 생성

로컬 iam 인증 세팅

Router53 → ec2 연결

소스 가져오기

git clone https://github.com/fluent/fluentd-kubernetes-daemonset

작업

cd fluentd-kubernetes-daemonset/docker-image
cp -r v1.9 custom_v1.9
cd custom_v1.9/debian-forward

vi debian-forward/conf/fluentd.conf
vi debian-forward/conf/kubernetes.conf

docker build -t dev_fluentd .
docker tag dev_fluentd:latest ....ap-northeast-2.amazonaws.com/dev_fluentd:latest
docker push ....ap-northeast-2.amazonaws.com/dev_fluentd:latest

fluent.conf

@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>

fluentd 적용

daemonset 수정

    image: ....ap-northeast-2.amazonaws.com/dev_fluentd:latest                                           

kubectl apply -f fluentd-daemonset-forward.yaml

fluentd-daemonset-forward.yaml 내용

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: fluentd
  namespace: kube-system
  labels:
    k8s-app: fluentd-logging
    version: v1
    kubernetes.io/cluster-service: "true"
spec:
  template:
    metadata:
      labels:
        k8s-app: fluentd-logging
        version: v1
        kubernetes.io/cluster-service: "true"
    spec:
      serviceAccount: fluentd
      serviceAccountName: fluentd
      tolerations:
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
      containers:
      - name: fluentd
        image: ....ap-northeast-2.amazonaws.com/dev_fluentd:latest
        env:
          - name:  FLUENT_FOWARD_HOST
            value: "10.222.16.46"
          - name:  FLUENT_FOWARD_PORT
            value: "24224"
        resources:
          limits:
            memory: 200Mi
          requests:
            cpu: 100m
            memory: 200Mi
        volumeMounts:
        - name: varlog
          mountPath: /var/log
        - name: varlibdockercontainers
          mountPath: /var/lib/docker/containers
          readOnly: true
      terminationGracePeriodSeconds: 30
      volumes:
      - name: varlog
        hostPath:
          path: /var/log
      - name: varlibdockercontainers
        hostPath:
          path: /var/lib/docker/containers