인프런 커뮤니티 질문&답변
스프링으로 만든 프로젝트에 적용하고싶은데..
해결된 질문
작성
·
41
1
안녕하세요 선생님.
인터넷에서 강의해주신내용 보면서
스프링으로 만들려고하는 제 사이트에
적용하고싶은데..
혹시 스프링도 의존성을 추가해야하는지..
또 PQ? Persistent Queue는 어떻게 적용해야하는지 질문드려도 괜찮을까요?
답변 2
1
0
안녕하세요 이경용님,
질문 주셔서 감사합니다.
Spring 애플리케이션에서 발생되는 애플리케이션 로그를 ELK 스택을 통해 처리하고 싶으신 것으로 생각됩니다.
Spring 애플리케이션 로깅을 위해 많이 사용하는 라이브러리는 logback이 있고, 환경에 따라 의존성 추가가 필요할 수 있습니다. (Spring Boot에는 내장되어있는 것으로 알고있습니다.)
해당 의존성 사용하려면 설정 파일(예: src/main/resources/logback-spring.xml)을 추가로 생성해야 될 것이고, 우리가 배포한 ELK 모니터링 시스템에서 Spring 로그를 처리하려면 아래와 같은 과정으로 시도해보시면 좋을듯합니다. (Spring 애플리케이션 로그를 서버에 파일로 저장한다는 가정으로 설명드립니다.)
다만, 본 강의에서는 ELK 스택을 Kubernetes 환경에 배포하는 것을 중점적으로 다루다보니 Spring 애플리케이션의 로그 처리를 위한 설정 등에 대해 깊게 설명드리기는 어려운 점 양해 부탁드립니다.
Spring 애플리케이션 로깅 설정 (로그 파일 경로 등)
filebeat ConfigMap의
filebeat.yml데이터 내용 중filebeat.inputs블록 안에 아래와 같이 Spring 애플리케이션 로깅 관련 설정 추가
...
filebeat.inputs:
...
- type: log
enabled: true
paths:
- {Spring 애플리케이션 로그의 경로}
...filebeat DaemonSet의
volumes와volumeMounts에 아래와 같이 Spring 애플리케이션 로그 경로 추가... spec: containers: ... volumeMounts: ... - name: spring-application-log mountPath: {Spring 애플리케이션 로그의 경로} readOnly: true ... volumes: ... - name: spring-application-log hostPath: path: {Spring 애플리케이션 로그의 경로} ...filebeat DaemonSet 재시작
그리고 말씀해주신 Persistent Queue(PQ)는 Logstash의 예상치못한 종료로 인한 데이터 유실을 막기 위해 유입되는 데이터를 파일로 임시 저장하는 방법이고, Logstash 설정 변경이 추가로 필요하지만 좋은 주제라고 생각합니다.
아래 공식문서를 참고하여 Logstash의 PQ 설정이 가능한데요.
https://www.elastic.co/docs/reference/logstash/persistent-queues#configuring-persistent-queues
해당 설정은 본 강의에서 다루지 않은 Logstash 설정 파일(본 강의에서 사용하는 Logstash Docker 이미지 기준 /usr/share/logstash/config/logstash.yml) 내에서 정의하고, PQ를 위한 PVC 역시 Kubernetes 클러스터(minikube)에 추가로 정의해야 합니다.
즉, 아래와 같은 과정으로 PQ 설정을 해볼 수 있겠습니다.
Logstash PQ를 위한 PersistentVolumeClaim 생성 (예:
logstash-pq-pvc)Logstash ConfigMap에 아래와 같이
logstash.yml데이터를 추가하여 PQ 관련 설정... data: ... logstash.yml: |- queue.type: persisted path.queue: /usr/share/logstash/data/queue ...Logstash Deployment에 PQ를 위한 PVC 연동 및 ConfigMap으로부터
logstash.yml데이터를 가져오는volumes및volumeMounts설정을 아래와 같이 추가... spec: containers: ... volumeMounts: ... - name: logstash-config mountPath: /usr/share/logstash/config/logstash.yml subPath: logstash.yml - name: logstash-pq-storage mountPath: /usr/share/logstash/data/queue ... volumes: ... - name: logstash-config configMap: name: logstash-config items: - key: logstash.yml path: logstash.yml - name: logstash-pq-storage persistentVolumeClaim: claimName: logstash-pq-pvcLogstash Deployment 재시작
참고로, PQ 설정을 위해 Logstash Deployment가 PVC를 사용하게 되면 그 Replica 수는 1이어야 합니다.
여러 개의 Logstash Pod가 하나의 PV를 동시에 같이 사용할 수 없기 때문입니다.
만약 PQ를 설정한 Logstash 인스턴스가 여러 개여야 한다면, Logstash를 Deployment가 아닌 StatefulSet으로 배포해야 할 것입니다. (Elasticsearch가 StatefulSet으로 배포되고 volumeClaimTemplates 설정을 하는 것도 이런 가용성을 대비하기 위함입니다.)
추후 기회가 되어 위 내용을 본 강의에서 정리하게 되면 공유드리겠습니다.
감사합니다.






답변이 도움이 되셨으면 좋겠습니다.
혹시 강의 수강하시면서 추가로 다뤘으면 하는 주제나 의견이 있으시다면 편하게 알려주세요.
완강 후 수강평 남겨주시면 강의 제작과 운영에 큰 힘이 됩니다😊