강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

이경용님의 프로필 이미지
이경용

작성한 질문수

컴팩트하게 이해하고 바로 구현하는 Kubernetes ELK 로그 모니터링 시스템

6.4 Kibana에서 Dashboard 기능 실습

스프링으로 만든 프로젝트에 적용하고싶은데..

해결된 질문

작성

·

41

1

안녕하세요 선생님.
인터넷에서 강의해주신내용 보면서
스프링으로 만들려고하는 제 사이트에
적용하고싶은데..
혹시 스프링도 의존성을 추가해야하는지..
또 PQ? Persistent Queue는 어떻게 적용해야하는지 질문드려도 괜찮을까요?

답변 2

1

이경용님의 프로필 이미지
이경용
질문자

감사합니다.

Aiden Kim님의 프로필 이미지
Aiden Kim
지식공유자

답변이 도움이 되셨으면 좋겠습니다.

혹시 강의 수강하시면서 추가로 다뤘으면 하는 주제나 의견이 있으시다면 편하게 알려주세요.

완강 후 수강평 남겨주시면 강의 제작과 운영에 큰 힘이 됩니다😊

0

Aiden Kim님의 프로필 이미지
Aiden Kim
지식공유자

안녕하세요 이경용님,

질문 주셔서 감사합니다.

 

Spring 애플리케이션에서 발생되는 애플리케이션 로그를 ELK 스택을 통해 처리하고 싶으신 것으로 생각됩니다.

Spring 애플리케이션 로깅을 위해 많이 사용하는 라이브러리는 logback이 있고, 환경에 따라 의존성 추가가 필요할 수 있습니다. (Spring Boot에는 내장되어있는 것으로 알고있습니다.)

해당 의존성 사용하려면 설정 파일(예: src/main/resources/logback-spring.xml)을 추가로 생성해야 될 것이고, 우리가 배포한 ELK 모니터링 시스템에서 Spring 로그를 처리하려면 아래와 같은 과정으로 시도해보시면 좋을듯합니다. (Spring 애플리케이션 로그를 서버에 파일로 저장한다는 가정으로 설명드립니다.)

다만, 본 강의에서는 ELK 스택을 Kubernetes 환경에 배포하는 것을 중점적으로 다루다보니 Spring 애플리케이션의 로그 처리를 위한 설정 등에 대해 깊게 설명드리기는 어려운 점 양해 부탁드립니다.

  1. Spring 애플리케이션 로깅 설정 (로그 파일 경로 등)

  2. filebeat ConfigMap의 filebeat.yml 데이터 내용 중 filebeat.inputs 블록 안에 아래와 같이 Spring 애플리케이션 로깅 관련 설정 추가

...
filebeat.inputs:
...
- type: log
  enabled: true
  paths:
  - {Spring 애플리케이션 로그의 경로}
...
  1. filebeat DaemonSet의 volumesvolumeMounts에 아래와 같이 Spring 애플리케이션 로그 경로 추가

    ...
    spec:
      containers:
      ...
        volumeMounts:
        ...
          - name: spring-application-log
            mountPath: {Spring 애플리케이션 로그의 경로}
            readOnly: true
        ...
      volumes:
      ...
        - name: spring-application-log
          hostPath:
            path: {Spring 애플리케이션 로그의 경로}
        ...
  2. 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 설정을 해볼 수 있겠습니다.

  1. Logstash PQ를 위한 PersistentVolumeClaim 생성 (예: logstash-pq-pvc)

  2. Logstash ConfigMap에 아래와 같이 logstash.yml 데이터를 추가하여 PQ 관련 설정

     

    ...
    data:
      ...
      logstash.yml: |-
        queue.type: persisted
        path.queue: /usr/share/logstash/data/queue
        ...
  3. Logstash Deployment에 PQ를 위한 PVC 연동 및 ConfigMap으로부터 logstash.yml 데이터를 가져오는 volumesvolumeMounts 설정을 아래와 같이 추가

     

     

    ...
    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-pvc
  4. Logstash Deployment 재시작

참고로, PQ 설정을 위해 Logstash Deployment가 PVC를 사용하게 되면 그 Replica 수는 1이어야 합니다.

여러 개의 Logstash Pod가 하나의 PV를 동시에 같이 사용할 수 없기 때문입니다.

만약 PQ를 설정한 Logstash 인스턴스가 여러 개여야 한다면, Logstash를 Deployment가 아닌 StatefulSet으로 배포해야 할 것입니다. (Elasticsearch가 StatefulSet으로 배포되고 volumeClaimTemplates 설정을 하는 것도 이런 가용성을 대비하기 위함입니다.)

 

추후 기회가 되어 위 내용을 본 강의에서 정리하게 되면 공유드리겠습니다.

감사합니다.

이경용님의 프로필 이미지
이경용

작성한 질문수

질문하기