π ν΄λΉ ν¬μ€ν
μ μμνμΈμ! λ컀/μΏ λ²λ€ν°μ€ μμ μ μ½κ³ κ°μΈμ μΈ λͺ©μ νμ μμ±λλ κΈμ
λλ€. ν¬μ€ν
μ μ¬μ©λλ λͺ¨λ μλ£λ μ κ° μ§μ μ¬κ΅¬μ±νμμμ μ립λλ€.
μ΄λ² ν¬μ€ν μμλ μΏ λ²λ€ν°μ€μμμ λͺ¨λν°λ§μ λν΄μ λ€λ£¨μ΄λ³΄λ €κ³ νλ€. μ§μ ν¬μ€ν κΉμ§λ μΏ λ²λ€ν°μ€μμ μ΄λ ν 리μμ€ μ€λΈμ νΈλ₯Ό μμ±νκ³ μ μ©νλ λ°©λ²μ λν΄ μ£Όλ‘ λ°°μμλ€λ©΄ μ΄μ λ μ§κΈκΉμ§ μμ±ν΄μ¨ 리μμ€λ€μ μνκ° νμ¬ μ΄λ€μ§, μ₯μ κ° λ 건 μλμ§λ₯Ό λͺ¨λν°λ§ νλ μμ€ν μ μΏ λ²λ€ν°μ€μμ μ΄λ»κ² ꡬμΆν μ μλμ§μ λν΄ λ°°μλ³Έλ€.
μ¬μ€ μΏ λ²λ€ν°μ€μμ μ체μ μΌλ‘ μ 곡νλ λͺ¨λν°λ§ κΈ°λ₯μ μλ€. 보ν΅μ νλ‘λ©ν μ°μ€μ κ°μ μ€νμμ€ λꡬλ€μ μ‘°ν©νκ±°λ Datadogκ³Ό κ°μ μ λ£ μ루μ μ λμ ν΄μ μΏ λ²λ€ν°μ€μμμ λͺ¨λν°λ§ μμ€ν μ ꡬμΆνκ² λλ€. λ°©κΈ μΈκΈν νλ‘λ©ν μ°μ€λ μ€νμμ€ λͺ¨λν°λ§ μμ€ν μΌλ‘ μΏ λ²λ€ν°μ€μ λ§€μ° μ’μ νΈνμ±μ μ§λ μννΈμ¨μ΄ μ νμ΄λ€. μ΄ νλ‘λ©ν μ°μ€λ νΉλ³ν κ²μ μλκ³ λ°μ΄ν°λ₯Ό μ μ₯νλ μΌμ’ μ μκ³μ΄ λ°μ΄ν°λ² μ΄μ€μ΄λ€. μ΄ νλ‘λ©ν μ°μ€μ κ°λ μ΄ κ΅¬μ²΄μ μΌλ‘ 무μμ΄κ³ μ΄λ»κ² λμνλμ§λ νμ ν μμ μ΄λ€.
μ°λ¦° μμΌλ‘ μΏ λ²λ€ν°μ€μμμ λͺ¨λν°λ§ κΈ°λ³Έ ꡬ쑰μ λμ μ리λ₯Ό μ΄ν΄λ³Έλ€. κ·Έ μ΄νμλ νλ‘λ©ν μ°μ€λ‘ μΏ λ²λ€ν°μ€ λͺ¨λν°λ§ μμ€ν μ μ΄λ»κ² ꡬμΆν μ μλμ§λ μ΄ν΄λ³΄μ.
1. λͺ¨λν°λ§μ κΈ°λ³Έμ μΈ κ΅¬μ‘°
μΈνΈλ‘μμ νλ‘λ©ν μ°μ€κ° μκ³μ΄ λ°μ΄ν°λ² μ΄μ€λΌκ³ νλ€. μ°λ¦¬κ° μ£Όλͺ©ν λΆλΆμ 'λ°μ΄ν°λ² μ΄μ€'λΌλ κ²μ΄λ€. λͺ¨λν°λ§μ ꡬμΆν λλ λ°μ΄ν°λ² μ΄μ€κ° μ¬μ©λλ€. κ·Έλ¬λ©΄ μ΄ λ°μ΄ν°λ² μ΄μ€μ μ μ₯λλ λ°μ΄ν°λ 무μμΌκΉ? μ¬λ¬ κ°μ§κ° μκ² μ§λ§, λνμ μΌλ‘ CPU μ¬μ©λ₯ , λ©λͺ¨λ¦¬ μ¬μ©λ₯ , λ€νΈμν¬ I/O, μ΄λΉ μμ² νμ λ±κ³Ό κ°μ μΌμ’ μ 'λ©νΈλ¦' λ°μ΄ν°κ° μ μ₯λλ€.
μμ λ컀 κ΄λ ¨ ν¬μ€ν μμ CAdvisorλΌλ κ²μ λν΄ μκ°ν μ μ΄ μλ€. CAdvisorλ 컨ν μ΄λμ κ΄λ ¨λ λͺ¨λν°λ§ λ°μ΄ν°λ₯Ό νμΈν μ μλ λͺ¨λν°λ§ λꡬμ΄λ€. νμ§λ§ μ΄ CAdvisorκ° GUI νλ©΄μΌλ‘ 보μ¬μ£Όλ λ©νΈλ¦ λ°μ΄ν°λ€μ μ§λ ν¬μ€ν μ 보면 μκ² μ§λ§ μ¬μ€ μ κ°νμ§ λͺ»νλ€. μΏ λ²λ€ν°μ€λ μ΄ CAdvisorλ₯Ό κ°μ Έλ€ μ°λ λ°μ΄ν°λ² μ΄μ€μ κ²°ν©ν΄μ λͺ¨λν°λ§ μμ€ν μ ꡬμΆνλ€.
μ°μ μ΄ CAdvisorλ μΏ λ²λ€ν°μ€ ν΄λ¬μ€ν°λ₯Ό ꡬμ±νλ λͺ¨λ λ Έλμ kubelet μμ΄μ νΈμ ν¨κ» λ΄μ₯λμ΄ μλ€. κ·Έλ¦¬κ³ νλ‘λ©ν μ°μ€μ κ°μ λ°μ΄ν°λ² μ΄μ€λ₯Ό νλ λμ΄μ CAdvisorμ ν΅μ νλ©° λ Έλμ λ©νΈλ¦λ€μ μ λ¬λ°κ² λλ€. ꡬ쑰λ λ€μκ³Ό κ°λ€.
λ¨Όμ λͺ¨λ λ Έλλ /metrics λΌλ κ²½λ‘λ‘ μλν¬μΈνΈ κ²½λ‘λ₯Ό λ ΈμΆ(Listen)νκ³ μλλ°, λ°λ‘ μ΄ μλν¬μΈνΈλ‘ ν΄λΌμ΄μΈνΈκ° μμ²νλ©΄ κ° λ Έλμ λΆμ΄μλ CAdvisorλ ν΄λΉ λ Έλλ‘λΆν° μμ§ν λ©νΈλ¦μ ν΄λΌμ΄μΈνΈμκ² μ λ¬ν΄μ€λ€. μ κ·Έλ¦Όμμλ νλ‘λ©ν μ°μ€κ° ν΄λΌμ΄μΈνΈκ° λλ€. νλ‘λ©ν μ°μ€κ° /metrics μλν¬μΈνΈλ‘ μμ²μ μννλ©΄ κ° λ Έλλ€λ‘λΆν° λ©νΈλ¦ λ°μ΄ν°λ€μ μλ΅λ°κ³ , νλ‘λ©ν μ°μ€λ μ΄ λ°μ΄ν°λ€μ λ°μ΄ν°λ² μ΄μ€μ μ μ₯νλ€.(μ°Έκ³ λ‘ μ΄ λ CAdvisorκ° μ λ¬ν΄μ£Όλ λ°μ΄ν°μ ννλ ν€-κ° μμΌλ‘ ꡬμ±λμ΄ μλ€)
λ¬Όλ‘ νλ‘λ©ν μ°μ€κ° μλμΌλ‘ μλν¬μΈνΈλ₯Ό νμ§νλ κ²μ μλκ³ , λ°λμ νλ‘λ©ν μ°μ€μ CAdvisor μλν¬μΈνΈ μ 보λ₯Ό λ±λ‘ν΄μ£Όμ΄μΌ νλ€. μ΄λ κ² νλ‘λ©ν μ°μ€κ° λ©νΈλ¦μ μμ§ν μλν¬μΈνΈλ₯Ό λ±λ‘ν΄μ£Όλ κ²μ 'μλΉμ€ λμ€μ»€λ²λ¦¬(Service Discovery)'λΌκ³ λ νλ€.
κ·Έλ¦¬κ³ CAdvisor μ²λΌ /metrics λΌλ κ²½λ‘λ₯Ό μΈλΆμ λ ΈμΆμμΌμ μ΄λκ°μμ λ°μ΄ν°λ₯Ό μμ§ν μ μλλ‘ κ³΅ν΅νλ μΈν°νμ΄μ€λ₯Ό μ 곡νλ μλ²λ₯Ό Exporter λΌκ³ λΆλ₯Έλ€. Exporterμ μ’ λ₯λ‘λ λ§€μ° λ€μνλ°, λ§μ½ μ ν리μΌμ΄μ λ΄λΆμ λ°μ΄ν°λ₯Ό νλ‘λ©ν μ°μ€λ‘ μμ§νκ³ μΆλ€λ©΄ Pythonμ΄λ Go μΈμ΄μ κ°μ νλ‘κ·Έλλ° μΈμ΄μμ μ 곡νλ Exporter λΌμ΄λΈλ¬λ¦¬λ₯Ό ν΅ν΄ 컀μ€ν Exporterλ₯Ό λ§λ€ μλ μλ€.
2. λͺ¨λν°λ§ λ©νΈλ¦μ μ’ λ₯
μ§μ μ μκ°ν CAdvisorλ μ£Όλ‘ μ»¨ν μ΄λ λ 벨μ λ©νΈλ¦μ μ 곡ν΄μ€λ€. μ¬κΈ°μ '컨ν μ΄λ λ 벨μ λ©νΈλ¦'μ΄λ 무μμ μλ―Έν κΉ? κ·Έλ¦¬κ³ μ»¨ν μ΄λ λ 벨 λ§κ³ λ€λ₯Έ λ 벨μ λ©νΈλ¦λ μλ 건κ°? μ΄λ² λͺ©μ°¨μμλ μ£Όλ‘ λͺ¨λν°λ§ μμ€ν μμ μμ§νλ λ©νΈλ¦μ λνμ μΈ μ’ λ₯μ λν΄ μμ보λλ‘ νμ. μ λμ μΈ λΆλ₯λ²μ μλμ§λ§ λλ΅μ μΈ λΆλ₯ 체κ³λ‘λ§ μ΄ν΄νκΈ°λ§ νλ©΄ λ λ― νλ€.
- μΈνλΌ μμ€μ λ©νΈλ¦: νΈμ€νΈ λ¨Έμ λ 벨μμμ λ©νΈλ¦μ μλ―Έ. μλ₯Ό λ€μ΄, νμΌ λμ€ν¬λ¦½ν° κ°μ, λμ€ν¬ μ¬μ©λ, NICμ ν¨ν· μ¬μ©λ λ±
- 컨ν μ΄λ μμ€μ λ©νΈλ¦: 컨ν μ΄λ λ 벨μμμ λ©νΈλ¦μ μλ―Έ. μλ₯Ό λ€μ΄, 컨ν μ΄λλ³ CPU λ° λ©λͺ¨λ¦¬ μ¬μ©λ₯ , 컨ν μ΄λμ νλ‘μΈμ€ μν, 컨μν°λμ ν λΉλ 리μμ€ ν λΉλ, 컨ν μ΄λ λ° νλμ μν λ±
- μ ν리μΌμ΄μ μμ€μ λ©νΈλ¦: μ ν리μΌμ΄μ λ 벨μμ λ°μνλ λ©νΈλ¦μ μλ―Έ. νΈλ μ΄μ± λ°μ΄ν°, μ ν리μΌμ΄μ μμ μ¬μ©νλ νΉμ νλ μμν¬μμ λ°μνλ λ©νΈλ¦ λ°μ΄ν° λ±
3. k8sμμμ λͺ¨λν°λ§ ꡬ쑰
μ΄λ² λͺ©μ°¨μμλ 본격μ μΌλ‘ μΏ λ²λ€ν°μ€μμμ λͺ¨λν°λ§ μμ€ν ꡬ쑰μ λν΄ μ΄ν΄λ³Έλ€. ν΄λΉ λͺ©μ°¨μ λ΄μ©μ μ½μ΄λκ° λ, [λͺ©μ°¨ 1]μμ μκ°ν ꡬ쑰λ₯Ό λ¨Έλ¦Ώμμ μμ§ν μ± μ½μ΄λ΄λ €κ°λ³΄λλ‘ νμ.
3-1. 컨ν μ΄λμ μΈνλΌ λ 벨μ λ©νΈλ¦μ μ 곡νλ μλ²: metrics-server
metrics-server λΌλ μλ²λ μΏ λ²λ€ν°μ€ μμ²΄κ° μ 곡νμ§λ μμ§λ§ μΏ λ²λ€ν°μ€μ μμ½κ² μ€μΉν μ μλ μλμ¨(add-on)μ΄λ€. μ΄ metrics-serverλ₯Ό μ€μΉνλ©΄ kubectl top λͺ λ Ήμ΄λ₯Ό μ λ ₯νμ λ μΆλ ₯λλ λ΄μ© λλ HPAκ° λμνλ κΈ°μ€μ΄ λλ νλμ CPU λ° λ©λͺ¨λ¦¬ μ¬μ©λ₯ μ μ»μ μ μκ² λλ€. μ΄ metrics-serverλ λ³΄ν΅ kube-system μ΄λΌλ λ€μμ€νμ΄μ€μ νλ ννλ‘ μμ±λλ€.
μ’ λ λμκ°μ metrics-serverκ° λμνλ μ리μ λν΄μ μ΄ν΄λ³΄μ. metrics-serverλ APIService λΌλ μΏ λ²λ€ν°μ€ 리μμ€ μ€λΈμ νΈλ₯Ό νμ©ν΄μ μΏ λ²λ€ν°μ€ API νμ₯ κΈ°λ₯μ μ¬μ©νλ€. μΌλ°μ μΌλ‘ kubectl ν€μλλ‘ μμνλ λͺ λ Ήμ΄λ₯Ό μ¬μ©νκ² λλ©΄ kube-apiserverλ‘ μμ²μ μ μ‘νλ€κ³ νλ€. APIService λΌλ μΏ λ²λ€ν°μ€ 리μμ€ μ€λΈμ νΈλ API μλ²μ μ€νμ μ€μνλ λ³λμ μλ²λ₯Ό ꡬμΆν λ€, ν΄λΉ μλ²λ₯Ό μΏ λ²λ€ν°μ€μ λ±λ‘νκ² λλ©΄ kube-apiserver μ²λΌ λλ§μ νμ₯λ API μλ²μ²λΌ μλ‘ λ§λ€μ΄μ μ¬μ©ν μ μλλ‘ ν΄μ£Όλ κ²μ΄λ€.
λ¨Όμ APIService 리μμ€ μ€λΈμ νΈλ₯Ό μμ±νλ μμ 맀λνμ€νΈλ₯Ό μ΄ν΄λ³΄μ.
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
name: v1beta1.custom.metrics.k8s.io
spec:
group: custom.metrics.k8s.io
service:
name: prometheus-adapter
namespace: prometheus
port: 443
version: v1beta1
맀λνμ€νΈλ₯Ό 보면 μλ‘μ΄ APIλ₯Ό νμ₯ν΄μ μ΄λ ν μλΉμ€μ μ κ·Όν μ§λ₯Ό λͺ μνκ³ μλ€. μμ±λ API Serviceμ μ΄λ¦μ v1beta1.custom.metrics.k8s.io μ΄λ©°, μ΄ APIλ prometheus-adapter μ μ κ·Όν¨μΌλ‘μ¨ μ¬μ©ν μ μλ€. κ·Έλμ ν΄λΌμ΄μΈνΈλ v1beta1.custom.metrics.k8s.io λΌλ μ΄λ¦μ APIλ₯Ό νΈμΆνκ² λλ©΄ μ΄ μμ²μ kube-apiserverλ‘ κ°μ§ μκ³ ν΄λΉ APIServiceλ‘ κ°μ μ²λ¦¬λλ€.
μ°Έκ³ λ‘ μ΄λ¬ν API νμ₯ λ°©μμ API Aggregationμ΄λΌκ³ λ νλ μ©μ΄λ₯Ό μμλλλ‘ νμ.
3-2. 리μμ€ μνμ λν λ©νΈλ¦μ μ 곡νλ μλ²: kube-state-metrics
μ΄λ²μ μμλ³Ό λ λ€λ₯Έ μλμ¨ μλ²λ μΏ λ²λ€ν°μ€ ν΄λ¬μ€ν° λ΄μ 리μμ€ μνμ λν λ©νΈλ¦μ μ 곡νλ μλ²μΈ kube-state-metrics μ΄λ€. '리μμ€ μνμ λν λ©νΈλ¦'μ΄λΌ ν¨μ μλ₯Ό λ€μ΄, νλμ μνκ° RunningμΈμ§ λλ λνλ‘μ΄λ¨ΌνΈμ λ ν리카 κ°μκ° λͺ κ°μΈμ§ λ±μ΄ ν΄λΉνλ€. kube-state-metrics μ€μΉνλ YAML νμΌμ μΏ λ²λ€ν°μ€μ 곡μ githubμμ μ½κ² νμΈμ΄ κ°λ₯νλ€.
3-3. μΈνλΌ μμ€μ λ©νΈλ¦μ μ 곡νλ μλ²: node-exporter
λ€μμΌλ‘ μμλ³Ό μλμ¨μ μΈνλΌ μμ€μ λ©νΈλ¦μ μ 곡νλ μλ²μΈ node-exporter μ΄λ€. node-exporterλ μ΄μ μ μκ°ν μλμ¨κ³Όλ λ¬λ¦¬ νμΌ μμ€ν , λ€νΈμν¬ ν¨ν· λ±κ³Ό κ°μ νΈμ€νΈ μΈ‘λ©΄μμμ λ€μνκ³ μμΈν λ©νΈλ¦μ μ 곡νλ€. κ·Έλμ νΈμ€νΈ μΈ‘λ©΄μμμ λ©νΈλ¦μ μν μλ²μ΄κΈ° λλ¬Έμ node-exporterλ λͺ¨λ λ Έλμ μ€μΉλμ΄μΌ ν΄μ λ°λͺ¬μ ννλ‘ λ°°ν¬λλ€. κ·Έλμ νΉμ λ Έλμ μ€μΌμ₯΄λ§λ node-exporter λ°λͺ¬μ νλ νλλ₯Ό μΆλ ₯ν΄μ IP νλͺ©μ 보면 ν΄λΉ νλκ° μ€μΌμ₯΄λ§λ λ Έλμ IPλ λμΌν κ²μ λ³Ό μ μλ€. μ΄λ node-exporter λ°λͺ¬μ νλκ° νΈμ€νΈ λ€νΈμν¬ λͺ¨λ(hostNetwork)λ‘ μ€νλκΈ° λλ¬Έμ λλ€. λ§μΉ docker run λͺ λ Ήμ΄μ --net host μ κ°μ μ΅μ κ³Ό λμΌν ν¨κ³ΌμΈ μ μ΄λ€.
node-exporterλ κΈ°λ³Έμ μΌλ‘ μλΉν λ§μ μμ λ©νΈλ¦μ μμ§νκ² λλ€. λ§μ½ μμ§ν νμκ° μλ λ©νΈλ¦λ€μ΄ μλ€λ©΄ node-exporter λ°λͺ¬μ 맀λνμ€νΈμ μ€ν μΈμ μ€μ --no-collectorλ₯Ό μ μ ν μΆκ°νλ λ°©μμΌλ‘ μ μ©ν΄λ³Ό μ μλ€.
μ°Έκ³ λ‘ node-exporterλ₯Ό μ€μΉνλ YAML νμΌμ μΏ λ²λ€ν°μ€μμ 곡μμ μΌλ‘ μ 곡νμ§λ μμ§λ§ kube-prometheus μ κ°μ κΉν λ ν¬μ§ν 리μμ 맀λνμ€νΈλ₯Ό μ°Ύμλ³Ό μ μλ€.
4. νλ‘λ©ν μ°μ€λ₯Ό νμ©ν΄μ λ©νΈλ¦μ μμ§νμ
μ§μ λͺ©μ°¨κΉμ§ λ°°μ΄ λ©νΈλ¦μ λͺ¨λν°λ§νκΈ° μν μλμ¨μΈ kube-state-metrics, node-exporter, κ·Έλ¦¬κ³ kubeletμ λ΄μ₯λμ΄μλ CAdvisorλ λͺ¨λ μ€μΉλμ΄ μλ μνλΌλ©΄ μ΄μ μ΄ μλμ¨λ€μ΄ μμ§νλ λ©νΈλ¦μ μμ§(μ΄λ₯Ό μ€ν¬λν(Scraping)μ΄λΌκ³ λ ν¨)νλ νλ‘λ©ν μ°μ€λ₯Ό μ€μΉν΄μΌ νλ€. μλνλ©΄ λ¬Έλμμ μΈκΈν κ²μ²λΌ νλ‘λ©ν μ°μ€λ μΌμ’ μ μκ³μ΄ λ°μ΄ν°λ² μ΄μ€κ³ , μ΄ λ°μ΄ν°λ² μ΄μ€μ μλμ¨λ€μ΄ μμ§νλ λ©νΈλ¦μ μ μ₯ν΄μΌ νκΈ° λλ¬Έμ΄λ€. κ·Έλ¦¬κ³ μ΄ νλ‘λ©ν μ°μ€μ μ μ₯λ λ©νΈλ¦μ κ°μ§κ³ κ·ΈλΌνλμ κ°μ μκ°ν λꡬλ₯Ό κ°μ§κ³ λͺ¨λν°λ§ λμ보λλ₯Ό μ μν μ μλ€. ꡬ쑰λ₯Ό κ·Έλ €λ³΄λ©΄ λ€μκ³Ό κ°λ€.
4-1. νλ‘λ©ν μ°μ€ μ€μΉνκΈ°
κ°μ₯ λ¨Όμ νλ‘λ©ν μ°μ€λ₯Ό μ€μΉν΄μΌ νλ€. νλ‘λ©ν μ°μ€λ₯Ό μ€μΉνλ λ°©λ²μ μ¬λ¬κ°μ§κ° μλ€. Helm μ°¨νΈλ‘ μ€μΉνλ λ°©λ², 컀μ€ν 리μμ€λ₯Ό νμ©ν΄μ μ€μΉνλ μ€νΌλ μ΄ν° λ°©λ² λ±μ΄ μλ€. ν΄λΉ μ± μμλ μ€νΌλ μ΄ν°λ₯Ό νμ©ν΄μ μ€μΉνλ λ°©λ²μ μκ°νλ€. μ€νΌλ μ΄ν°λ μ§λ ν¬μ€ν μμ λ°°μ΄ μ»€μ€ν 리μμ€λ₯Ό νμ©ν΄μ μ€μΉνλ λ°©μμ΄λ€. 컀μ€ν 리μμ€μ λν μ€λͺ μ μ§λ ν¬μ€ν μ μ°Έμ‘°νλλ‘ νκ³ , μ¬κΈ°μλ λ³λ μ€λͺ μ μλ΅νκ² λ€.
νλ‘λ©ν μ°μ€λ₯Ό μ€νΌλ μ΄ν°λ‘ μ€μΉνκ³ λμνλ λ¨κ³μ ꡬ쑰λ κ°κ° λ€μκ³Ό κ°λ€.
κ·Έλ¦Όμ μΌμͺ½μ CRDμ CR, κ·Έλ¦¬κ³ μ»¨νΈλ‘€λ¬λΌλ κ²λ€ κ°μ κ΄κ³μ΄λ€. μ§λ 컀μ€ν 리μμ€ ν¬μ€ν μμλ μκ°νλ λ΄μ©μ΄λ€. μ΄λ₯Ό νλ‘λ©ν μ°μ€λ‘ μ μ©νλ©΄, κ°μ₯ λ¨Όμ νλ‘λ©ν μ°μ€λ₯Ό μ€μΉνκΈ° μν΄μ νλ‘λ©ν μ°μ€λΌλ 컀μ€ν 리μμ€κ° μ μλ CRD 맀λνμ€νΈλ₯Ό λ€μ΄λ‘λλ°λ κΉνμμ cloneνλ κ°μ Έμ¨λ€. κ·Έλ¦¬κ³ CRD 맀λνμ€νΈλ₯Ό apply νλ©΄ νλ‘λ©ν μ°μ€λΌλ 컀μ€ν 리μμ€κ° μμ±λλ€. μ¬κΈ°κΉμ§κ° μ€μΉνλ κ³Όμ μ΄λΌκ³ μκ°νλ©΄ λλ€.
λ€μμ μ΄μ νλ‘λ©ν μ°μ€κ° λμνκΈ° μν΄μλ μΌμ’ μ 컨νΈλ‘€λ¬μΈ νλ‘λ©ν μ°μ€ μ€νΌλ μ΄ν°κ° νλ‘λ©ν μ°μ€λΌλ 컀μ€ν 리μμ€κ° μμ±λμλ€λ κ²μ κ°μ§ν λ€, νλ‘λ©ν μ°μ€λΌλ 컀μ€ν 리μμ€μ μ μλμ΄ μλ μ¬λ¬κ°μ§ μΏ λ²λ€ν°μ€ 리μμ€λ€(ex. νλ, λνλ‘μ΄λ¨ΌνΈ, μλΉμ€, μν¬λ¦Ώ, 컨νΌκ·Έλ§΅, PV λ±..)μ μ€μ§μ μΌλ‘ μμ±νλ€. μ΄κ²μ΄ λ°λ‘ νλ‘λ©ν μ°μ€κ° λμνλ κ³Όμ μ΄λ€.(λ§μ½ μ€νΌλ μ΄ν° λ°©μμΌλ‘ μ€μΉνλ€λ©΄)
νλ‘λ©ν μ°μ€κ° GUIλ‘ μ 곡νλ κ²μ΄ μλλ°, νλ‘λ©ν μ°μ€ μ€νΌλ μ΄ν°κ° μ€μΉν μΏ λ²λ€ν°μ€ 리μμ€ μ€λΈμ νΈ μ€μ μλΉμ€ 리μμ€ μ€λΈμ νΈμ 9090 ν¬νΈλ‘ μ κ·Όνλ©΄ μλμ GUI νλ©΄μ μ κ·Όν μ μλ€.
μ GUIμμλ νλ‘λ©ν μ°μ€κ° μ€ν¬λννλ μλν¬μΈνΈλ μ°κ²°μ΄ μ λμλμ§ νμΈν μ μμ λΏλ§ μλλΌ, νλ‘λ©ν μ°μ€λΌλ μκ³μ΄ λ°μ΄ν°λ² μ΄μ€μ μ μ₯λμ΄ μλ λ©νΈλ¦ λ°μ΄ν°μ λν΄ μΏΌλ¦¬ν΄μ λ°μ΄ν°λ₯Ό λ³Ό μλ μλ€. μ΄ λ μ¬μ©νλ 쿼리λ₯Ό PromQLμ΄λΌκ³ λ λΆλ₯Έλ€.
4-2. νλ‘λ©ν μ°μ€κ° λ©νΈλ¦ μμ§νλλ‘ νκΈ°
λ€μμ μ΄μ νλ‘λ©ν μ°μ€κ° μ΄λ€ κ³³(μ΄λ€ exporter)μμ λ©νΈλ¦μ μμ§νλλ‘ ν μ§ μ€μ ν΄μ£Όμ΄μΌ νλ€. μ΄ λ, νλ‘λ©ν μ°μ€λ₯Ό μ΄λ»κ² μ€μΉνλμ§μ λ°λΌ μ½κ° λ¬λΌμ§ μ μλλ°, λ§μ½ μ€νΌλ μ΄ν°λ₯Ό νμ©ν΄μ μ€μΉνμ§ μμλ€λ©΄ νλ‘λ©ν μ°μ€ νλ λ΄λΆμ μλ config μ€μ νμΌμ μλν¬μΈνΈλ₯Ό μ§μ κΈ°μ ν ν, νλλ₯Ό μ¬μμνκ±°λ νλ λ΄λΆμμ μ€νλκ³ μλ νλ‘λ©ν μ°μ€ νλ‘μΈμ€λ₯Ό μ¬μ€νν΄μΌ νλ€. νμ§λ§ μ€νΌλ μ΄ν° μ¦, 컀μ€ν 리μμ€λ₯Ό νμ©ν΄μ μ€μΉνλ€λ©΄ ServiceMonitorλΌλ 컀μ€ν 리μμ€λ₯Ό νμ©ν΄μ μ΄λ ν μλν¬μΈνΈλ‘λΆν° λ©νΈλ¦μ κ°μ Έμ¬μ§ μΏ λ²λ€ν°μ€ 리μμ€λ‘μ μ μνκ³ , μ΄λ₯Ό νλ‘λ©ν μ°μ€μ μλμΌλ‘ μ μ©ν μ μκ² λλ€.
ServiceMonitorλΌλ 컀μ€ν 리μμ€λ "μ΄λ ν μΏ λ²λ€ν°μ€ μλΉμ€μ μ°κ²°λμ΄ μλ νλλ€λ‘λΆν° λ©νΈλ¦μ κ°μ Έμ¬ κ²μΈκ°"λ₯Ό νλ‘λ©ν μ°μ€μκ² μλ €μ£Όλ μν μ νλ€. κ·Έλμ μ€μ ServiceMonitor 컀μ€ν 리μμ€λ₯Ό μ μνλ 맀λνμ€νΈλ₯Ό 보면 λΌλ²¨ μ λ ν°(selector.matchLabels) νλͺ©μ΄ μ‘΄μ¬νλ κ²μ λ³Ό μ μλ€. ν΄λΉ λΆλΆμ νΉμ μΏ λ²λ€ν°μ€ μλΉμ€κ° κ°κ³ μλ λΌλ²¨ key: valueλ₯Ό μ€μ ν΄μ£Όλ©΄ λλ€. μλλ ServiceMonitor 맀λνμ€νΈμ κ°λ¨ν μμ μ΄λ€. spec.selector.matchLabels νλͺ©μ μ μ¬ν 보μ.
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: example-app
labels:
team: frontend
spec:
selector:
matchLabels:
app: example-app
endpoints:
- port: web
μ΄λ κ² ν΄μ νλ‘λ©ν μ°μ€λ₯Ό νμ©ν΄μ λ©νΈλ¦μ μμ§νλ λ°©λ²μ μμ보μλ€.
μ°Έκ³ λ‘ νλ‘λ©ν μ°μ€λ μμ§λλ λ©νΈλ¦ μμ λ°λΌ λ©λͺ¨λ¦¬λ₯Ό λ§μ΄ μλͺ¨νλ μκ³μ΄ λ°μ΄ν°λ² μ΄μ€μ΄λ€. κ·Έλμ λ³΄ν΅ νλ‘λ©ν μ°μ€μ λ°μ΄ν° 리ν μ μ μ§§κ² μ€μ νλ κ²μ΄ ννκ³ , μΌλ°μ μΌλ‘ μ΅κ·Ό 24μκ° λμμ λ°μ΄ν°λ§μ μ‘°νν μ μλ€. μ΄ κ°μ νλ‘λ©ν μ°μ€ μ€ν μ΅μ μ€ --stroage.tsdv.retention.time λ₯Ό μ΄μ©ν μ μλ€. λ§μ½ μ₯κΈ°κ°μ λ°μ΄ν°λ₯Ό νλ‘λ©ν μ°μ€μ 보κ΄ν΄μ μκ°ννκ³ μΆλ€λ©΄ νλ Έμ€λΌλ μΆκ° μ루μ μ μ°Ύμλ³Ό μ μλ€.
5. μκ³μ΄ λ°μ΄ν°λ² μ΄μ€μ λ©νΈλ¦μ μμ§νλ λ°©μ: Push, Pull
λ©νΈλ¦μ μμ§νλ μκ³μ΄ λ°μ΄ν°λ² μ΄μ€λ‘ νλ‘λ©ν μ°μ€ λ§κ³ λ influxDB λΌλ κ²λ μ‘΄μ¬νλ€. κ·Έλ°λ° μ΄ influxDBλ νλ‘λ©ν μ°μ€μ μ΄λ€ μ°¨μ΄μ μ΄ μλ κ±ΈκΉ?
μκ³μ΄ λ°μ΄ν°λ² μ΄μ€κ° λ©νΈλ¦μ μμ§νλ λ°©μμλ ν¬κ² Push, Pull λ°©μ 2κ°μ§κ° μ‘΄μ¬νλ€. μ΄ 2κ°μ§μ μ°¨μ΄μ μ "λ©νΈλ¦μ κ°μ Έμ€λ μ£Όμ²΄κ° λꡬλ"μ΄λ€. λ¨Όμ νλ‘λ©ν μ°μ€λ Pull λ°©μμ μ¬μ©νλ€. Pull λ°©μμ λ°μ΄ν°λ² μ΄μ€κ° λ©νΈλ¦μ λ ΈμΆνλ exporterμ μ κ·Όν΄μ λ©νΈλ¦μ λΉκ²¨(Pull)μ€λ λ°©μμ΄λ€. λ°λ©΄μ influxDBλ Push λ°©μμ μ¬μ©νλλ°, μ΄λ exporterκ° λ°μ΄ν°λ² μ΄μ€λ‘ λ©νΈλ¦μ μ μ‘(Push)νλ λ°©μμ΄λ€.
μ΄λ κ² ν΄μ μμνμΈμ! λ컀/μΏ λ²λ€ν°μ€ μμ μ 곡λΆν λͺ¨λ μ±ν°μ λ΄μ©μ κΈ°λ‘μ΄ λμ΄ λ¬λ€. ν΄λΉ μ± μ ν¬κ² λ컀μ μΏ λ²λ€ν°μ€ λ κ°μ§ ννΈλ‘ ꡬμ±λμ΄ μλλ°, ν΄λΉ μμ μ 첫 ννΈλ₯Ό 곡λΆνκ³ λΈλ‘κΉ νλ μμ μ΄ 2023λ 2μμ΄μλ€. κ·Έ λλΆν° μΏ λ²λ€ν°μ€ κΈ°μ΄μΈ 2023λ 8μκΉμ§ μ§ννλ€κ°, μ€λ¬΄μ κ³ κΈ λ΄μ©μ νμ©ν μΌμ΄ μμ΄ μ κΉ λ€λ₯Έ μͺ½μ 곡λΆνμλ€. κ·Έλ¬λ€κ° μλ 9μμ μ΄μ§μ νλ©΄μ μΏ λ²λ€ν°μ€λ₯Ό μ λλ‘ μ€λ¬΄μ νμ©νλ μν©μ λ€κ°μ€λ€ 보λ, 2024λ 9μλΆν° κ³μν΄μ μμ μ μ½μ΄λκ°κΈ° μμνλ€. κ·Έλ¦¬κ³ λλμ΄ 2025λ 2μμ ν΄λΉ μμ 곡λΆλ₯Ό λ§μ§λ§ μ±ν°κΉμ§ μλ£νλ€.
λλ΅ μ± 700μͺ½ λΆλμ λ΄μ©μ μ λ§ μ°(?)μΌλ‘ 곡λΆνκ³ κΈ°λ‘νλ λ° μ€μ§μ μΌλ‘ μ½ 11κ°μ μ λκ° κ±Έλ¦° κ² κ°λ€. μ± μ 11κ°μ κ° μ½λ€λ.. μ€λκ±Έλ Έλ κ² κ°κΈ°λ νλ€. νμ§λ§ μ²μ²ν μ§ννλ©΄μ 곡λΆν λ΄μ©μ λν΄ μΉλ°νκ² κ³ λ―Όν΄λ³΄κ³ κ³±μΉμ΄λ³΄λ©°, μ€λ¬΄μ μ μ©νλ μκ°λ κ°μ΄ κ°μ Έκ°λ€ 보λ, ν¨κ³Όλ λ°°λ‘ κ°μ Έκ° λ― νλ€. μλ¬΄νΌ μ΄λ² κΈ°νμ μ± μ μλ νκ² λμ΄ λΏλ―νλ€!