Pod 로그 관리
1. 전통적인 애플리케이션의 로그 운영
- 애플리케이션이 항상 지정된 장비에서 실행됨을 보장
- logrotate와 같은 system 관리 tool을 이용해서 로그 관리
- 일정시간 로그를 저장하고, 일정시간 후에는 로그를 제거
2. 클러스터 환경에서 로그 운영
- 애플리케이션이 어느 노드에서 실행? 얼마나 많은 자원 사용? 응답속도 및 응답 코드 확인
- 개별 노드에 접근하지 않고 직접 Pod의 로그를 확인할 수 있어야 함
- Pod 로그 확인
kubectl create deployment my-nginx --image nginx:1.14 --port 80 --replicas 2
kubectl expose deployment my-nginx --target-port 80 --prot 80
kubectl get pods -o wide
kubectl get svc
curl <Cluster IP>
kubectl logs <pod name>
※ expose 명령어는 service 생성 명령어
EFK를 Kubernetes Application 로그 관리
- EFK stack은 클러스터 환경에서 로그를 수집, 검색 그리고 시각화를 지원
. 각 클러스터 Node에 fluentd가 daemonset으로 log를 수집한다.
elasticsearch는 fluentd가 수집한 로그를 저장하고, 요청에 따라 검색을 한다.
마지막으로 유저가 용이하게 사용할 수 있도록 kibana로 시각화 한다.
- EFK 구축
. ElasticSearch 구축
. Kibana 구축
. Fluentd 구축
EFK 구축은 아래 링크 참고
https://waspro.tistory.com/762
ElasticSearch를 활용한 Kubernetes 로깅 환경 구성
개요 MSA 환경에서 Telemetry의 중요성은 이미 수많은 포스팅과 수많은 포스터들로 부터 강조되어 왔으며, 이미 많은 자료들을 통해 활용 방안들이 다뤄지고 있다. Telemetry는 로깅, 모니터링, 추적
waspro.tistory.com
eks 환경이 아닐 경우 아래와 같이 스토리지 구성하여 진행
pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv1
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
- ReadOnlyMany
persistentVolumeReclaimPolicy: Recycle
storageClassName: gp2
hostPath:
path: /logdata
노드 서버의 메모리가 부족하면 아래와 같이 pod 상태가 CrashLoopBackOff 를 발생하며 에러 로그가 발생할 수 있으므로 노드 서버에 메모리 여유를 확보 후 진행해야한다.
kubectl get pods -n kube-logging
NAME READY STATUS RESTARTS AGE
elasticsearch-data-0 0/1 CrashLoopBackOff 5 (114s ago) 5m18s
elasticsearch-master-5c498b9465-bhb67 0/1 CrashLoopBackOff 7 (2m53s ago) 15m
kubectl logs elasticsearch-master-5c498b9465-bhb67 -n kube-logging
Defaulted container "elasticsearch-master" out of: elasticsearch-master, increase-vm-max-map (init)
Exception in thread "main" java.lang.RuntimeException: starting java failed with [137]
output:
error:
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
at org.elasticsearch.tools.launchers.JvmErgonomics.flagsFinal(JvmErgonomics.java:111)
at org.elasticsearch.tools.launchers.JvmErgonomics.finalJvmOptions(JvmErgonomics.java:79)
at org.elasticsearch.tools.launchers.JvmErgonomics.choose(JvmErgonomics.java:57)
at org.elasticsearch.tools.launchers.JvmOptionsParser.main(JvmOptionsParser.java:89)
Stern으로 여러 개의 Pod 로그 확인
1. Stern
- 여러 개 Pod 로그를 실시간 모니터링
- 사이트 : https://github.com/stern/stern
2. Stern 설치 및 Pod 로그 보기
sudo apt install golang -y
go install github.com/kardianos/govendor@latest
go install github.com/stern/stern@latest
export PATH=$PATH:~/go/bin
pod log 보기
stern -n kube-system kube-proxy-*
kubectl create deployment my-nginx --image nginx --replicas 2
kubectl expose deployment my-nginx --target-port 80 --prot 80
kubectl get pods -o wide
kubectl get svc
curl <Cluster IP>
stern my-nginx-*
[참고]
- https://www.youtube.com/watch?v=HyWZSuxwOas&list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c&index=36
'Kubernetes' 카테고리의 다른 글
[Kubernetes] pod 직접 접근 방법 (0) | 2023.12.18 |
---|---|
[Kubernetes] pod 삭제 전 로그 확인 명령어 (0) | 2023.12.18 |
[Kubernetes] Horizontal Pod Autoscaling 운영 (0) | 2023.02.11 |
[Kubernetes] Autoscaling (0) | 2023.02.09 |
[Kubernetes] DNS (0) | 2023.02.09 |