이쿠의 슬기로운 개발생활

함께 성장하기 위한 보안 개발자 EverNote 내용 공유

Kubernetes/Monitoring

Kubernetes 모니터링 : metricbeat 란?

이쿠우우 2024. 9. 7. 21:00
반응형

metricbeat

 

metricbeat란?

Elastic Stack의 일부인 오프소스 데이터 수집 에이전트로,
System 및 Service Metrics를 수집하는데 사용됨.
 

수집하는 metrics 계층

=  System, Service Metrics
metricbeat는 다양한 module을 제공하고 있어서
system metrics 뿐만 아니라 다양한 Service Metrics도 수집할 수 있는 장점을 가지고 있음.
 
[모듈 정보 list]
 
 

수집하는 metrics 정보 확인 링크

[system module  이 수집하는 metrics 정보]
 
[kubernetes module 이 수집하는 metrics 정보]
 
 
 
 

수집한 metrics 정보를 전달하는 방식

=  push 방식
metricbeat는 수집한 metrics정보를 특정 plugin으로 전달할 수 있음.
주로 Elastic Stack 관련 제품으로 보낼 수 있음.
 

관련 설정

metricbeat 설정 파일 : /etc/metricbeat/metricbeat.yml
output."module 이름" 으로 설정 가능
 
예제로 file 형식으로 push하고 싶다면 아래와 같이 설정할 수 있음.
output.file:
  path: "/etc/metricbeat" 
  filename: "iksoon_test"

전달 가능 대상

  • Elasticsearch Service
  • Elasticsearch
  • Logstash
  • Kafka
  • Redis
  • File
  • Console
[output module 목록 참고]
 
 

metricbeat은 추가되는 모듈에 따라 스레드가 추가될까?

직접 확인 cpu, memory, diskio 등 8개의 module을 추가하고 아래 명령으로 스레드 확인
pstree -hp "metricbeat pid"
ex) pstree -hp 2575026

확인 결과 동일하게 8개가 조회됨

 

 

metricbeat에서 fields 지정하는 방법

 
아래와 같이 metricbeat.yaml 파일에서 설정 가능
tags, fields 를 지정하여 설정 가능.

수집한 정보는 아래와 같이 확인할 수 있음.


metricbeat에서 kubernetes 지표 정보 수집이 가능한가?

 

결론

kubernetes 모듈을 사용하여 kubernetes 지표 정보 수집 가능.
 

metricbeat에서 worker node kubelet 접근 방법 확인

 
metricbeat에서 kubernetes module 사용 시
kubelet에 포함되어있는 cAdvisor로 부터 지표 정보를 가져옴.
이때 kubelet에 접속하는 방법은 2가지로  token, key 방법이 있음.
 

metricbeat에서 worker node kubelet 접근 방법 (token)

 

1. SA 생성
apiVersion: v1
kind: ServiceAccount
metadata:
  name: metricbeat
  namespace: kube-system
  labels:
    k8s-app: metricbeat
2. ClusterRole 생성
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: metricbeat
  labels:
    k8s-app: metricbeat
rules:
- apiGroups: [""]
  resources:
  - nodes
  - namespaces
  - events
  - pods
  verbs: ["get", "list", "watch"]
- apiGroups: ["batch"]
  resources:
  - jobs
  verbs: ["get", "list", "watch"]
- apiGroups: ["extensions"]
  resources:
  - replicasets
  verbs: ["get", "list", "watch"]
- apiGroups: ["apps"]
  resources:
  - statefulsets
  - deployments
  verbs: ["get", "list", "watch"]
- apiGroups:
  - ""
  resources:
  - nodes/stats
  - nodes/metrics
  verbs:
  - get
- nonResourceURLs:
  - /metrics
  verbs:
  - get
3. ClusterRoleBinding 생성
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: metricbeat
subjects:
- kind: ServiceAccount
  name: metricbeat
  namespace: kube-system
roleRef:
  kind: ClusterRole
  name: metricbeat
  apiGroup: rbac.authorization.k8s.io
4. 1.24 버전 이상의 경우 SA 생성 시 secret token이 자동 생성 되지 않아서 수동 생성이 필요함
apiVersion: v1
kind: Secret
metadata:
  name: metricbeat
  namespace: kube-system
  annotations:
    kubernetes.io/service-account.name: metricbeat
type: kubernetes.io/service-account-token
5. SA 토큰 가져오기
- module: kubernetes
  metricsets:
    - container
    - node
    - pod
    - system
    - volume
  period: 30s
  hosts: ["https://iksoon-cidr-default-worker-node-0.novalocal:10250"]
  bearer_token_file: /etc/metricbeat/token
  ssl.certificate_authorities:
    - /etc/kubernetes/pki/ca.crt
일반적으로 metricbeat을 kubernetes에 배포 시 Daemonset으로 배포함.
배포 할 때 serviceaccount 생성 후
serviceaccount의 secret token 경로를 명시함.

 

6. kubelet API 호출
curl -Ssk --header "Authorization: Bearer ${TOKEN}" https://localhost:10250/metrics/cadvisor

 

 

metricbeat에서 worker node kubelet 접근 방법 (키 사용)

 
(kubelet API 호출)
kube-admin으로 생성된 클러스터의 경우 아래와 같이 "apiserver-kubelet-client.key, crt"을 사용함.
curl https://localhost:10250/metrics -k --cert "키파일 경로" --key "키파일 경로"
 

 

metricbeat의 kubernetes module에서 사용법

worker node 에서 진행
/etc/metricbeat/modules.d/kubernetes.yml
"ssl.certificate:", "ssl.key:", "ssl.certificate_authorities:"  옵션 사용.
- module: kubernetes
  metricsets:
    - node
    - system
    - pod
    - container
    - volume
  period: 30s
  hosts: ["https://iksoon-cidr-default-worker-node-0.novalocal:10250"]
  ssl.certificate: 키파일 경로
  ssl.key: 키 파일 경로
  ssl.certificate_authorities:
    - 키 파일 경로
/etc/metricbeat/metricbeat.yml
output.file:
  path: "/etc/metricbeat"
  filename: "iksoon_test"
반응형