일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- ceph-ansible
- libvirt
- kolla
- awx
- KVM
- Ansible
- Kubernetes
- Linux
- ubuntu
- terraform
- Docker
- ceph
- port open
- cephadm
- OpenStack
- yum
- i3
- cloud-init
- repository
- HTML
- Kubeflow
- k8s
- archlinux
- Octavia
- Arch
- kolla-ansible
- pacman
- grafana-loki
- nfs-provisioner
- golang
Archives
- Today
- Total
YJWANG
[EFK on Kubernetes ] Elasticsearch 자동으로 로그 지우기 본문
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
반응형