YJWANG

[EFK on Kubernetes ] Elasticsearch 자동으로 로그 지우기 본문

60.Cloud/80.Kubernetes

[EFK on Kubernetes ] Elasticsearch 자동으로 로그 지우기

왕영주 2021. 2. 8. 13:07

refer to


구성


kubernetes cronjob을 사용하여 headless service에 dn으로 접근하여 로그를 삭제할 예정이다.

우선 pod 내에서 통신이 되는지 확인하기 위해 임시로 alpine image를 사용한 pod를 실행한다.

root@master01:~# kubectl run -it alpine --image=alpine --restart=Never -- sh

alpaine 이미지에는 기본으로 curl 및 host 명령어가 없기에 아래와 같이 추가해준다.

/ # apk add bind curl

먼저 host 명령으로 headless service에 dns query를 보내 각 pod의 주소를 잘 반환하는지 확인합니다.
cluster name 이 yjwang.k8s이고 elasticsearch 서비스가 efk 네임스페이스에서 구동 중이므로 해당 서비스의 domain name은
elasticsearch.efk.svc.yjwang.k8s 가 된다.

root@master01:~/istio-1.8.2# kubectl get svc -n efk
NAME            TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)             AGE
elasticsearch   ClusterIP   None          <none>        9200/TCP,9300/TCP   2d22h

root@master01:~/istio-1.8.2# kubectl config view
apiVersion: v1
clusters:
- cluster:
  name: yjwang.k8s

-

/ # host elasticsearch.efk.svc.yjwang.k8s
elasticsearch.efk.svc.yjwang.k8s has address 10.233.84.136
elasticsearch.efk.svc.yjwang.k8s has address 10.233.108.81

이후 curl을 통해 index list를 가져오는지 확인합니다.

/ # curl elasticsearch.efk.svc.yjwang.k8s:9200/_cat/indices?v
health status index                uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   logstash-2021.02.08  KA7B-va-RjmZyvIhDFDtkw   1   1      45042            0     42.2mb         21.8mb
green  open   logstash-2021.01.20  beK8R96PRVq4hXNFsJ9aJQ   1   1        810            0    330.5kb        174.8kb
green  open   logstash-2021.01.30  ku1YY9CvSBWmE4v__mJofQ   1   1      71453            0     35.8mb         17.9mb
green  open   logstash-2021.02.01  DupYNPnQSZuTyMmY2zvMsg   1   1     304955            0    136.7mb         68.8mb
green  open   logstash-2021.01.29  _HS3KLVgTCmzZL7nW7QHmQ   1   1      47621            0     25.8mb           13mb
green  open   logstash-2021.02.03  t0cLWR73Rw6Hy9rfkKekNQ   1   1     304594            0    167.9mb           83mb
green  open   logstash-2021.01.31  Soep_X_dT2OT85UgdmgxTQ   1   1    1417395            0      572mb        286.4mb
green  open   logstash-2021.01.27  yo7G5ZoTS4itEQu4YNtryA   1   1      43065            0     26.3mb         13.9mb
green  open   logstash-2021.01.24  aZURguDxQSqwUJBBnaB7sg   1   1        135            0      123kb         61.5kb
green  open   logstash-2021.02.02  qgeHlmVZQdSFOO2t5Yvyxw   1   1      55566            0     29.9mb         14.5mb
green  open   .kibana_1            eXbVe4AzQ_WUHWf_YixbZQ   1   1         17            2    174.8kb         87.4kb
green  open   .kibana_task_manager ikGF4FC9RrihzkxGlFOxPA   1   1          2            0     59.8kb         29.9kb
green  open   logstash-2021.02.04  BCoyEpySSD6svXsL0B3B-A   1   1     355158            0    171.8mb         85.1mb
green  open   logstash-2021.02.07  W5EOno5GRXKn1mjL4z54Ug   1   1     476631            0    374.4mb        187.2mb
green  open   logstash-2021.01.21  68sr7yAFQqW8Kcab9ahhWQ   1   1        405            0    202.5kb        101.2kb
green  open   logstash-2021.01.28  opGcSmSpRjCDlmjCKDf9Ew   1   1      43458            0     24.8mb         12.8mb
green  open   logstash-2021.02.06  OnGbzVljRKmA3ZbUQRQ_VA   1   1     476244            0    373.7mb        186.8mb
green  open   logstash-2021.01.19  Hnr4wTf6QbqzRHVU-FThOw   1   1        558            0    405.9kb        188.7kb
green  open   logstash-2021.01.22  iWb7ZPGFRNylSOyJrFBxRw   1   1        540            0    255.2kb        118.6kb
green  open   logstash-2021.01.25  UhAI3cUMTluREi2nNWxQ4A   1   1      41506            0     24.3mb         12.2mb
green  open   logstash-2021.01.26  WE7kM3mYRpefUy1hATLPQQ   1   1      66006            0     36.4mb         16.8mb

logstash-2021.02.04 index를 삭제합니다.

/ # curl -X DELETE elasticsearch.efk.svc.yjwang.k8s:9200/logstash-2021.02.04
{"acknowledged":true}

이번에는 5일 전 index를 삭제해봅니다. date 명령을 사용하여 5일 전 date가 필요합니다.
date의 -d 옵션을 사용하기 위해서는 alpine 이미지에서 coreutils패키지가 필요합니다.

/ # apk add coreutils
/ # date "+%Y.%m.%d" -d "5 days ago"
2021.02.03

2021.02.03 index를 삭제합니다.

/ # curl -X DELETE elasticsearch.efk.svc.yjwang.k8s:9200/logstash-$(date "+%Y.%m.%d" -d "5 days ago")
{"acknowledged":true}

이제 위 과정을 cronjob을 통해 자동화합니다.
우선 이전에 사용한 alpine pod를 삭제한다.

/ # exit

root@master01:~# kubectl get pod alpine 
NAME     READY   STATUS      RESTARTS   AGE
alpine   0/1     Completed   0          46m

root@master01:~# kubectl delete pod alpine 
pod "alpine" deleted

cronjob 구성


Manifest 생성 매일 0시 0분에 alpine pod 내에서 위에 설정한 명령을 수행한다.

root@master01:~# cat cronjob_delete_index.yaml 
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: delete-es-index-5days-ago
spec: # CronJob
  schedule: "0 0 * * *"
  jobTemplate:
    spec: # JOB
      template:
        spec: # Pod
          containers:
          - image: alpine
            command: ["/bin/sh","-c"]
            args: ["apk add curl && apk add coreutils && curl -X DELETE http://elasticsearch.efk.svc.yjwang.k8s:9200/logstash-$(date '+%Y.%m.%d' -d '5 days ago')"]
            name: logging-purger
          restartPolicy: Never
      backoffLimit: 2

cronjob 생성

root@master01:~# kubectl apply -f cronjob_delete_index.yaml 
cronjob.batch/delete-es-index-5days-ago created

root@master01:~# kubectl get cronjobs.batch 
NAME                        SCHEDULE    SUSPEND   ACTIVE   LAST SCHEDULE   AGE
delete-es-index-5days-ago   0 0 * * *   False     0        <none>          6s
반응형