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
반응형