관리 메뉴

피터의 개발이야기

[kubernetes] kubernetes event exporter 본문

Kubernetes/Logging & Monitoring

[kubernetes] kubernetes event exporter

기록하는 백앤드개발자 2023. 2. 22. 03:49
반응형

[kubernetes] 모니터링 방법 정리[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

 

[Elasticsearch] EFK 설치(minikube)-1

ㅁ 개요 ㅇ 지난 시간에 EFK란 무엇인지를 알아보았다. ㅇ EFK를 minikube 환경에 설치하는 과정을 정리하였다. ㅇ 너무 길어서 1, 2부로 나뉘어졌다. 2부는 여기 ㅇ 관련 소스는 여기 ㅁ minikube 가동 $

peterica.tistory.com

https://artifacthub.io/packages/helm/bitnami/kubernetes-event-exporter

 

kubernetes-event-exporter 2.2.2 · bitnami/bitnami

Kubernetes Event Exporter makes it easy to export Kubernetes events to other tools, thereby enabling better event observability, custom alerts and aggregation.

artifacthub.io

https://github.com/opsgenie/kubernetes-event-exporter

 

GitHub - opsgenie/kubernetes-event-exporter: Export Kubernetes events to multiple destinations with routing and filtering

Export Kubernetes events to multiple destinations with routing and filtering - GitHub - opsgenie/kubernetes-event-exporter: Export Kubernetes events to multiple destinations with routing and filtering

github.com

https://thechief.io/c/kenichishibata/exporting-kubernetes-events-aws-elastic-search/

 

Exporting Kubernetes Events to AWS Elastic Search

Kubernetes Events are not persisted by default. Using a log aggregator like AWS Elastic Search will allow us to persist these events and use it to do forensics later.

thechief.io

https://peterica.tistory.com/312

 

[kubernetes] 다른 네임스페이스에 위치한 서비스 접근방법

ㅁ 개요 ㅇ 4편 [kubernetes] kubernetes event exporter 작업 과정에서 metricbeat kubernetes DNS lookup failure: no such host 이슈가 발생하여 이를 해결하는 과정을 정리하였다. ㅁ 이슈 내용 {"level":"debug","error":"dial tcp

peterica.tistory.com

 

반응형
Comments