일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Java
- 정보처리기사 실기
- Spring
- kotlin
- kotlin spring
- aws
- kotlin querydsl
- minikube
- Pinpoint
- kotlin coroutine
- AI
- APM
- CloudWatch
- 공부
- 오블완
- MySQL
- mysql 튜닝
- IntelliJ
- 정보처리기사실기 기출문제
- CKA
- 티스토리챌린지
- 기록으로 실력을 쌓자
- PETERICA
- 코틀린 코루틴의 정석
- Linux
- Kubernetes
- CKA 기출문제
- Elasticsearch
- 정보처리기사 실기 기출문제
- AWS EKS
- Today
- Total
피터의 개발이야기
[kubernetes] kubernetes event exporter 본문
[kubernetes] kubernetes event exporter
기록하는 백앤드개발자 2023. 2. 22. 03:49
[kubernetes] 모니터링 방법 정리[kubernetes] 쿠버네티스 목차
ㅁ 개요
3편 [Kubernetes] Spring에서 쿠버네티스 Pod 정보조회에서 Spring에서 pod의 정보를 조회하는 과정을 정리하였다. 이번 글에서는 휘발성인 kubernetes evets의 지속적인 모니터링을 위해 이벤트 이력을 elasticsearch에 전달하여 키바나로 조회가 가능하도록 개발하는 과정을 정리하였다.
1편 [kubernetes] EKS fail-over 상황정리 및 방어방법
2편 [Kubernetes] 쿠버네티스API 서버 CURL 접속 방법
3편 [Kubernetes] Spring에서 쿠버네티스 Pod 정보조회
4편 [kubernetes] kubernetes event exporter
ㅁ kubernetes event의 보존성
어떤 문제가 발생하면 이벤트를 확인하기 위해 kubectl describe pods 이나 kubectl get events 사용한다. Kubernetes 이벤트는 기본적으로 유지되지 않고 1시간 동안만 지속된다. 그래서 지속적으로 문제점을 파악하기 위해서는 로그를 반드시 별도로 저장을 해야만 한다.
이러한 Event를 추출하여 별도로 저장하는 OpsGenie의 kubernetes-events-exporter 도구가 있다.
ㅁ kubernetes event 내보내기 설정
event exporter pod를 생성하여 주시적으로 elasticsearch로 전달하도록 구성하기 위해 3개의 yaml 파일을 순서대로 생성한다.
- roles.yaml
- configmap.yaml
- deployment.yaml
ㅁ ServiceAccount, ClusterRole, ClusterRoleBinding 생성
apiVersion: v1
kind: Namespace
metadata:
name: monitoring
---
apiVersion: v1
kind: ServiceAccount
metadata:
namespace: monitoring
name: event-exporter
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: event-exporter
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: event-exporter
subjects:
- kind: ServiceAccount
namespace: monitoring
name: event-exporter
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: event-exporter
rules:
- apiGroups: ["*"]
resources: ["*"]
verbs: ["get", "watch", "list"]
ㅁ configmap
apiVersion: v1
kind: ConfigMap
metadata:
name: event-exporter-cfg
namespace: monitoring
data:
config.yaml: |
logLevel: debug
logFormat: json
route:
routes:
- match:
- receiver: "elasticsearch-dump"
receivers:
- name: "elasticsearch-dump"
elasticsearch:
hosts:
- "http://elasticsearch-svc.elastic.svc.cluster.local:9200"
index: kube-events
indexFormat: "kube-events-{2006-01-02}"
useEventID: true
ㅇ elasticsearch는 minikube 환경에서 elastic라는 namespace에 구성한 적이 있다. 이곳에 정리함.
ㅇ 파드 생성 시 dial tcp lookup ElasticSearch no such host 이슈가 발생하였다.
ㅇ 근본적 문제는 다른 namespace에 있는 Service를 찾을 수 없는 문제였고,
이 문제의 트러블 슈팅 과정을 [kubernetes] 다른 네임스페이스에 위치한 서비스 접근방법에 정리하였다.
ㅁ deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: event-exporter
namespace: monitoring
spec:
replicas: 1
template:
metadata:
labels:
app: event-exporter
version: v1
annotations:
prometheus.io/scrape: 'true'
prometheus.io/port: '2112'
prometheus.io/path: '/metrics'
spec:
serviceAccountName: event-exporter
containers:
- name: event-exporter
# The good practice would be to pin the version. This is just a reference so that we don't
# have to update this file in each release.
image: ghcr.io/resmoio/kubernetes-event-exporter:latest
imagePullPolicy: IfNotPresent
args:
- -conf=/data/config.yaml
volumeMounts:
- mountPath: /data
name: cfg
volumes:
- name: cfg
configMap:
name: event-exporter-cfg
selector:
matchLabels:
app: event-exporter
version: v1
ㅁ kubectl apply
3개의 파일을 deply 폴더에 정리를 하였고, kubectl apply -f deploy 명령어를 통해 Pod를 생성하였다.
ㅇ event-exporter Pod의 로그 확인 시 정상적으로 작동되는 것을 확인하였다.
ㅁ Elasticsearch 인덱싱 생성
Elasticsearch에서 kubernetes 필드를 검색할 수 있게 하려면 다음과 같이 인덱싱을 생성해야한다.
과정은 다음과 같다.
management -> index pattern -> Create index pattern --> kube-events-* --> refresh icon
ㅇ Management > Index patterns 에서 create index pattern를 클릭한다.
ㅇ kube-events-* 인덱스 패턴을 입력하면 매칭되는 index를 확인할 수 있다.
ㅇ Next step을 클릭한다.
ㅇ eventTime을 선택하고 Create index pattern을 클릭한다.
ㅇ 조회를 위한 index 패턴 생성이 완료되었다.
ㅁ kibana Discover
ㅇ 최근 1시간 동안의 이벤트를 키바나에서 조회를 하였다.
ㅇ 특정 조건에 따라 Filters를 입력하여 특정 이벤트를 확인 할 수 있다.
ㅁ 함께 보면 좋은 사이트
https://peterica.tistory.com/211
https://artifacthub.io/packages/helm/bitnami/kubernetes-event-exporter
https://github.com/opsgenie/kubernetes-event-exporter
https://thechief.io/c/kenichishibata/exporting-kubernetes-events-aws-elastic-search/
https://peterica.tistory.com/312
'Kubernetes > Logging & Monitoring' 카테고리의 다른 글
[kubernetes] 모든 Pod의 CPU, 메모리 Request, limit 조회 (0) | 2023.09.01 |
---|---|
[Kubernetes] metrics-server 설치과정 (0) | 2023.07.01 |
[Kubernetes] Spring에서 쿠버네티스 Pod 정보조회 (0) | 2023.01.26 |
[Kubernetes] 쿠버네티스API 서버 CURL 접속 방법 (0) | 2023.01.25 |
[kubernetes] Events 시간 단위로 소팅 (1) | 2023.01.17 |