νλ‘λ©ν μ°μ€μ κ·ΈλΌνλλ₯Ό μ¬μ©ν λ©νΈλ¦ μμ§ λ°©λ²μ μμ보μΈμ. μ΄ κ°λ ₯ν μ€νμμ€ λκ΅¬λ‘ μ ν리μΌμ΄μ κ³Ό μΈνλΌλ₯Ό ν¨κ³Όμ μΌλ‘ λͺ¨λν°λ§νλ λ°©λ²μ λ°°μΈ μ μμ΅λλ€.
λ©νΈλ¦ μμ§: νλ‘λ©ν μ°μ€μ κ·ΈλΌνλλ₯Ό νμ©ν μ’ ν© κ°μ΄λ
μ€λλ μ 볡μ‘ν IT νκ²½μμ ν¨κ³Όμ μΈ λͺ¨λν°λ§μ μ ν리μΌμ΄μ κ³Ό μΈνλΌμ μνμ μ±λ₯μ μ μ§νλ λ° λ§€μ° μ€μν©λλ€. λ©νΈλ¦ μμ§μ μ΄λ¬ν λͺ¨λν°λ§μ κΈ°λ°μ μ 곡νλ©°, ν΅μ¬ μ±κ³Ό μ§ν(KPI)λ₯Ό μΆμ νκ³ , μ μ¬μ μΈ λ¬Έμ λ₯Ό μλ³νλ©°, 리μμ€ νμ©μ μ΅μ νν μ μκ² ν΄μ€λλ€. μ΄ μ’ ν© κ°μ΄λμμλ κ°λ ₯ν μ€νμμ€ λκ΅¬μΈ νλ‘λ©ν μ°μ€μ κ·ΈλΌνλλ₯Ό νμ©νμ¬ κ²¬κ³ ν λ©νΈλ¦ μμ§ λ° μκ°ν μμ€ν μ ꡬμΆνλ λ°©λ²μ νμν©λλ€.
λ©νΈλ¦ μμ§μ΄λ 무μμΈκ°?
λ©νΈλ¦ μμ§μ μκ°μ νλ¦μ λ°λΌ λ€μν μμ€ν , μ ν리μΌμ΄μ , μΈνλΌ κ΅¬μ± μμμ μνμ λμμ λνλ΄λ μμΉ λ°μ΄ν°λ₯Ό μμ§νλ κ²μ ν¬ν¨ν©λλ€. μ΄λ¬ν λ©νΈλ¦μλ CPU μ¬μ©λ₯ , λ©λͺ¨λ¦¬ μλΉλ, λ€νΈμν¬ νΈλν½, μλ΅ μκ°, μ€λ₯μ¨ λ° κΈ°ν μ¬λ¬ κ΄λ ¨ μ§νκ° ν¬ν¨λ μ μμ΅λλ€. μ΄ λ©νΈλ¦μ λΆμν¨μΌλ‘μ¨ νκ²½μ μ±λ₯κ³Ό μνμ λν κ·μ€ν ν΅μ°°λ ₯μ μ»μ μ μμ΅λλ€.
λ©νΈλ¦ μμ§μ΄ μ€μν μ΄μ
- μ¬μ λ¬Έμ κ°μ§: μ¬μ©μκ° μν₯μ λ°κΈ° μ μ μ μ¬μ μΈ λ¬Έμ λ₯Ό μλ³ν©λλ€.
- μ±λ₯ μ΅μ ν: λ³λͺ© νμκ³Ό κ°μ μ΄ νμν μμμ μ νν μ°Ύμλ λλ€.
- μ©λ κ³ν: κ³Όκ±° μΆμΈλ₯Ό κΈ°λ°μΌλ‘ λ―Έλμ 리μμ€ μꡬ μ¬νμ μμΈ‘ν©λλ€.
- μλΉμ€ μμ€ νμ½(SLA) λͺ¨λν°λ§: μ±λ₯ λͺ©ν μ€μλ₯Ό 보μ₯ν©λλ€.
- λ¬Έμ ν΄κ²° λ° κ·Όλ³Έ μμΈ λΆμ: λ¬Έμ λ₯Ό μ μνκ² μ§λ¨νκ³ ν΄κ²°ν©λλ€.
νλ‘λ©ν μ°μ€μ κ·ΈλΌνλ μκ°
νλ‘λ©ν μ°μ€λ μλ SoundCloudμμ κ°λ°λ μ€νμμ€ μμ€ν λͺ¨λν°λ§ λ° μλ¦Ό ν΄ν·μ λλ€. νμμ€ν¬νλ‘ μΈλ±μ±λ λ°μ΄ν°μΈ μκ³μ΄ λ°μ΄ν°λ₯Ό μμ§νκ³ μ μ₯νλ λ° νμν©λλ€. νλ‘λ©ν μ°μ€λ ν(pull) κΈ°λ° λͺ¨λΈμ μ¬μ©νμ¬ μΌμ ν κ°κ²©μΌλ‘ νκ²(μ: μλ², μ ν리μΌμ΄μ )μμ λ©νΈλ¦μ μ€ν¬λ©ν©λλ€. μμ§λ λ°μ΄ν°λ₯Ό λΆμνκ³ μλ¦Ό κ·μΉμ μ μνκΈ° μν κ°λ ₯ν 쿼리 μΈμ΄(PromQL)λ₯Ό μ 곡ν©λλ€.
κ·ΈλΌνλλ μ€νμμ€ λ°μ΄ν° μκ°ν λ° λͺ¨λν°λ§ νλ«νΌμ λλ€. νλ‘λ©ν μ°μ€λ₯Ό ν¬ν¨ν λ€μν μμ€λ‘λΆν°μ λ°μ΄ν°λ₯Ό μκ°ννκΈ° μν μνΈμμ©ν λμ보λμ κ·Έλνλ₯Ό μμ±ν μ μμ΅λλ€. κ·ΈλΌνλλ κ·Έλν, μ°¨νΈ, ν μ΄λΈ, κ²μ΄μ§ λ± νλΆν μκ°ν μ΅μ μ μ 곡ν©λλ€. λν μλ¦Ό κΈ°λ₯μ μ§μνμ¬ νΉμ μκ³κ°μ΄ μ΄κ³Όλ λ μλ¦Όμ λ°μ μ μμ΅λλ€.
νλ‘λ©ν μ°μ€μ κ·ΈλΌνλλ ν¨κ» λ€μν νκ²½κ³Ό μ¬μ© μ¬λ‘μ μ μ©ν μ μλ κ°λ ₯νκ³ μ μ°ν λͺ¨λν°λ§ μ루μ μ ꡬμ±ν©λλ€. μ΄λ€μ μ μΈκ³μ λ°λΈμ΅μ€ λ° SRE(μ¬μ΄νΈ μ λ’°μ± μμ§λμ΄λ§) νλν°μ€μμ λ리 νμ©λ©λλ€.
νλ‘λ©ν μ°μ€ μν€ν μ² λ° κ°λ
νλ‘λ©ν μ°μ€μ ν΅μ¬ κ΅¬μ± μμλ₯Ό μ΄ν΄νλ κ²μ ν¨κ³Όμ μΈ κ΅¬ν λ° νμ©μ νμμ μ λλ€.
- νλ‘λ©ν μ°μ€ μλ²: λ©νΈλ¦μ μ€ν¬λ©, μ μ₯ λ° μΏΌλ¦¬νλ ν΅μ¬ κ΅¬μ± μμμ λλ€.
- μλΉμ€ λμ€μ»€λ²λ¦¬: κ΅¬μ± λλ μΏ λ²λ€ν°μ€μ κ°μ νλ«νΌκ³Όμ ν΅ν©μ κΈ°λ°μΌλ‘ λͺ¨λν°λ§ν νκ²μ μλμΌλ‘ λ°κ²¬ν©λλ€.
- μ΅μ€ν¬ν°(Exporters): νλ‘λ©ν μ°μ€κ° μ΄ν΄ν μ μλ νμμΌλ‘ λ©νΈλ¦μ λ ΈμΆνλ μμ΄μ νΈμ λλ€. μλ‘λ node_exporter(μμ€ν λ©νΈλ¦μ©) λ° λ€μν μ ν리μΌμ΄μ λ³ μ΅μ€ν¬ν°κ° μμ΅λλ€.
- νΈμκ²μ΄νΈμ¨μ΄(Pushgateway, μ ν μ¬ν): μλͺ μ΄ μ§§μ μμ μ΄ νλ‘λ©ν μ°μ€μ λ©νΈλ¦μ νΈμν μ μλλ‘ ν©λλ€. μ΄λ μ§μμ μΌλ‘ μ€νλμ§ μμ μ μλ λ°°μΉ μμ μ μ μ©ν©λλ€.
- μΌλΏλ§€λμ (Alertmanager): ꡬμ±λ κ·μΉμ λ°λΌ νλ‘λ©ν μ°μ€μμ μμ±λ μλ¦Όμ μ²λ¦¬ν©λλ€. μ΄λ©μΌ, μ¬λ λλ PagerDutyμ κ°μ λ€μν μλ¦Ό μ±λλ‘ μλ¦Όμ λΌμ°ν ν μ μμ΅λλ€.
- PromQL: μμ§λ λ©νΈλ¦μ 쿼리νκ³ λΆμνλ λ° μ¬μ©λλ νλ‘λ©ν μ°μ€ 쿼리 μΈμ΄μ λλ€.
νλ‘λ©ν μ°μ€ μν¬νλ‘μ°
- νκ²(μ ν리μΌμ΄μ , μλ² λ±)μ΄ λ©νΈλ¦μ λ ΈμΆν©λλ€. μ΄ λ©νΈλ¦μ μΌλ°μ μΌλ‘ HTTP μλν¬μΈνΈλ₯Ό ν΅ν΄ λ ΈμΆλ©λλ€.
- νλ‘λ©ν μ°μ€ μλ²κ° ꡬμ±λ νκ²μμ λ©νΈλ¦μ μ€ν¬λ©ν©λλ€. μ΄ μλν¬μΈνΈμμ μ£ΌκΈ°μ μΌλ‘ λ©νΈλ¦μ κ°μ Έμ΅λλ€.
- νλ‘λ©ν μ°μ€λ μ€ν¬λ©λ λ©νΈλ¦μ μκ³μ΄ λ°μ΄ν°λ² μ΄μ€μ μ μ₯ν©λλ€.
- μ¬μ©μλ PromQLμ μ¬μ©νμ¬ λ©νΈλ¦μ 쿼리ν©λλ€. μ΄λ₯Ό ν΅ν΄ λ°μ΄ν°λ₯Ό λΆμνκ³ κ·Έλνμ λμ보λλ₯Ό λ§λ€ μ μμ΅λλ€.
- μ μ₯λ λ©νΈλ¦μ κΈ°λ°μΌλ‘ μλ¦Ό κ·μΉμ΄ νκ°λ©λλ€. κ·μΉ μ‘°κ±΄μ΄ μΆ©μ‘±λλ©΄ μλ¦Όμ΄ νΈλ¦¬κ±°λ©λλ€.
- μΌλΏλ§€λμ κ° νΈλ¦¬κ±°λ μλ¦Όμ μ²λ¦¬ν©λλ€. μ€λ³΅μ μ κ±°νκ³ κ·Έλ£Ήννμ¬ μ μ ν μλ¦Ό μ±λλ‘ λΌμ°ν ν©λλ€.
κ·ΈλΌνλ μν€ν μ² λ° κ°λ
κ·ΈλΌνλλ μμ§λ λ©νΈλ¦μ μκ°ννκ³ λΆμνκΈ° μν μ¬μ©μ μΉνμ μΈ μΈν°νμ΄μ€λ₯Ό μ 곡νμ¬ νλ‘λ©ν μ°μ€λ₯Ό 보μν©λλ€.
- λ°μ΄ν° μμ€: νλ‘λ©ν μ°μ€, Graphite, InfluxDB λ± λ€μν λ°μ΄ν° μμ€μμ μ°κ²°μ λλ€.
- λμ보λ: λ°μ΄ν°λ₯Ό λ€μν νμ(κ·Έλν, μ°¨νΈ, ν μ΄λΈ λ±)μΌλ‘ νμνλ ν¨λμ λͺ¨μμ λλ€.
- ν¨λ: νΉμ 쿼리λ₯Ό μ¬μ©νμ¬ νΉμ λ°μ΄ν° μμ€μ λ°μ΄ν°λ₯Ό νμνλ κ°λ³ μκ°ν μμμ λλ€.
- μλ¦Ό: κ·ΈλΌνλμλ λ΄μ₯λ μλ¦Ό κΈ°λ₯λ μμ΄ λμ보λμ νμλ λ°μ΄ν°λ₯Ό κΈ°λ°μΌλ‘ μλ¦Όμ μ μν μ μμ΅λλ€. μ΄λ¬ν μλ¦Όμ νλ‘λ©ν μ°μ€λ₯Ό λ°μ΄ν° μμ€λ‘ μ¬μ©νκ³ λ³΅μ‘ν μλ¦Ό λ‘μ§μ μν΄ PromQLμ νμ©ν μ μμ΅λλ€.
- μ‘°μ§ λ° ν: κ·ΈλΌνλλ μ‘°μ§κ³Ό νμ μ§μνμ¬ λμ보λ λ° λ°μ΄ν° μμ€μ λν μ κ·Ό λ° κΆνμ κ΄λ¦¬ν μ μμ΅λλ€.
κ·ΈλΌνλ μν¬νλ‘μ°
- λ°μ΄ν° μμ€ κ΅¬μ±: κ·ΈλΌνλλ₯Ό νλ‘λ©ν μ°μ€ μλ²μ μ°κ²°ν©λλ€.
- λμ보λ μμ±: λ©νΈλ¦μ μκ°ννκΈ° μν λμ보λλ₯Ό λμμΈν©λλ€.
- λμ보λμ ν¨λ μΆκ°: PromQL 쿼리λ₯Ό μ¬μ©νμ¬ νλ‘λ©ν μ°μ€μ νΉμ λ°μ΄ν° ν¬μΈνΈλ₯Ό νμνλ ν¨λμ μΆκ°ν©λλ€.
- μλ¦Ό κ΅¬μ± (μ ν μ¬ν): νΉμ λ©νΈλ¦ μκ³κ°μ λ°λΌ μλ¦Όμ λ°λλ‘ κ·ΈλΌνλ λ΄μ μλ¦Ό κ·μΉμ μ€μ ν©λλ€.
- λμ보λ 곡μ : νκ³Ό λμ보λλ₯Ό 곡μ νμ¬ λͺ¨λν°λ§ λ° λΆμμ λν΄ νμ ν©λλ€.
νλ‘λ©ν μ°μ€μ κ·ΈλΌνλ μ€μ νκΈ°
μ΄ μΉμ μμλ νλ‘λ©ν μ°μ€μ κ·ΈλΌνλλ₯Ό μ€μ νλ λ¨κ³λ³ κ°μ΄λλ₯Ό μ 곡ν©λλ€.
νλ‘λ©ν μ°μ€ μ€μΉνκΈ°
1. νλ‘λ©ν μ°μ€ λ€μ΄λ‘λ:
곡μ μΉμ¬μ΄νΈμμ μ΅μ λ²μ μ νλ‘λ©ν μ°μ€λ₯Ό λ€μ΄λ‘λν©λλ€: https://prometheus.io/download/. μ΄μ 체μ μ λ§λ μ μ ν ν¨ν€μ§(μ: Linux, Windows, macOS)λ₯Ό μ ννμΈμ.
2. μμΆ νμΌ νκΈ°:
λ€μ΄λ‘λν μμΆ νμΌμ μνλ λλ ν 리μ νλλ€.
3. νλ‘λ©ν μ°μ€ ꡬμ±:
`prometheus.yml` κ΅¬μ± νμΌμ μμ±ν©λλ€. μ΄ νμΌμ νλ‘λ©ν μ°μ€κ° μ€ν¬λ©ν νκ²κ³Ό κΈ°ν κ΅¬μ± μ΅μ μ μ μν©λλ€. κΈ°λ³Έ ꡬμ±μ λ€μκ³Ό κ°μ μ μμ΅λλ€:
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_exporter'
static_configs:
- targets: ['localhost:9100']
μ΄ κ΅¬μ±μ λ κ°μ μ€ν¬λ© μμ μ μ μν©λλ€: νλλ νλ‘λ©ν μ°μ€ μ체(μ체 λ©νΈλ¦ μ€ν¬λ©)μ©μ΄κ³ , λ€λ₯Έ νλλ localhost ν¬νΈ 9100μμ μ€νλλ node_exporterμ©μ λλ€. `scrape_interval`μ νλ‘λ©ν μ°μ€κ° νκ²μ μΌλ§λ μμ£Ό μ€ν¬λ©ν μ§λ₯Ό μ§μ ν©λλ€.
4. νλ‘λ©ν μ°μ€ μμ:
μμΆμ νΌ λλ ν 리μμ νλ‘λ©ν μ°μ€ μ€ν νμΌμ μ€νν©λλ€:
./prometheus --config.file=prometheus.yml
νλ‘λ©ν μ°μ€λ κΈ°λ³Έμ μΌλ‘ ν¬νΈ 9090μμ μμνκ³ μμ λκΈ°ν©λλ€. λΈλΌμ°μ μμ http://localhost:9090μΌλ‘ νλ‘λ©ν μ°μ€ μΉ μΈν°νμ΄μ€μ μ μν μ μμ΅λλ€.
κ·ΈλΌνλ μ€μΉνκΈ°
1. κ·ΈλΌνλ λ€μ΄λ‘λ:
곡μ μΉμ¬μ΄νΈμμ μ΅μ λ²μ μ κ·ΈλΌνλλ₯Ό λ€μ΄λ‘λν©λλ€: https://grafana.com/grafana/download. μ΄μ 체μ μ λ§λ μ μ ν ν¨ν€μ§λ₯Ό μ ννμΈμ.
2. κ·ΈλΌνλ μ€μΉ:
μ΄μ 체μ μ λ§λ μ€μΉ μ§μΉ¨μ λ°λ₯΄μΈμ. μλ₯Ό λ€μ΄, Debian/Ubuntuμμλ λ€μκ³Ό κ°μ΅λλ€:
sudo apt-get update
sudo apt-get install -y apt-transport-https
sudo apt-get install -y software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install grafana
3. κ·ΈλΌνλ μμ:
κ·ΈλΌνλ μλΉμ€λ₯Ό μμν©λλ€:
sudo systemctl start grafana-server
4. κ·ΈλΌνλ μ μ:
κ·ΈλΌνλλ κΈ°λ³Έμ μΌλ‘ ν¬νΈ 3000μμ μμνκ³ μμ λκΈ°ν©λλ€. λΈλΌμ°μ μμ http://localhost:3000μΌλ‘ κ·ΈλΌνλ μΉ μΈν°νμ΄μ€μ μ μν μ μμ΅λλ€.
κΈ°λ³Έ μ¬μ©μ μ΄λ¦κ³Ό λΉλ°λ²νΈλ `admin`κ³Ό `admin`μ λλ€. μ²μ λ‘κ·ΈμΈ μ λΉλ°λ²νΈλ₯Ό λ³κ²½νλΌλ λ©μμ§κ° νμλ©λλ€.
κ·ΈλΌνλλ₯Ό νλ‘λ©ν μ°μ€μ μ°κ²°νκΈ°
κ·ΈλΌνλμμ νλ‘λ©ν μ°μ€μ λ©νΈλ¦μ μκ°ννλ €λ©΄ νλ‘λ©ν μ°μ€λ₯Ό κ·ΈλΌνλμ λ°μ΄ν° μμ€λ‘ ꡬμ±ν΄μΌ ν©λλ€.
1. λ°μ΄ν° μμ€ μΆκ°:
κ·ΈλΌνλ μΉ μΈν°νμ΄μ€μμ Configuration > Data Sourcesλ‘ μ΄λνμ¬ Add data sourceλ₯Ό ν΄λ¦ν©λλ€.
2. νλ‘λ©ν μ°μ€ μ ν:
λ°μ΄ν° μμ€ μ νμΌλ‘ Prometheusλ₯Ό μ νν©λλ€.
3. νλ‘λ©ν μ°μ€ μ°κ²° ꡬμ±:
νλ‘λ©ν μ°μ€ μλ²μ URL(μ: `http://localhost:9090`)μ μ λ ₯ν©λλ€. νμν κ²½μ° λ€λ₯Έ μ΅μ (μ: μΈμ¦)μ ꡬμ±ν©λλ€.
4. μ μ₯ λ° ν μ€νΈ:
Save & Testλ₯Ό ν΄λ¦νμ¬ κ·ΈλΌνλκ° νλ‘λ©ν μ°μ€μ μ±κ³΅μ μΌλ‘ μ°κ²°λ μ μλμ§ νμΈν©λλ€.
κ·ΈλΌνλμμ λμ보λ μμ±νκΈ°
κ·ΈλΌνλλ₯Ό νλ‘λ©ν μ°μ€μ μ°κ²°ν νμλ λ©νΈλ¦μ μκ°ννκΈ° μν λμ보λλ₯Ό μμ±ν μ μμ΅λλ€.
1. μ λμ보λ μμ±:
κ·ΈλΌνλ μΉ μΈν°νμ΄μ€μμ μ¬μ΄λλ°μ + μμ΄μ½μ ν΄λ¦νκ³ Dashboardλ₯Ό μ νν©λλ€.
2. ν¨λ μΆκ°:
Add an empty panelμ ν΄λ¦νμ¬ λμ보λμ μ ν¨λμ μΆκ°ν©λλ€.
3. ν¨λ ꡬμ±:
- λ°μ΄ν° μμ€ μ ν: μ΄μ μ ꡬμ±ν νλ‘λ©ν μ°μ€ λ°μ΄ν° μμ€λ₯Ό μ νν©λλ€.
- PromQL 쿼리 μ λ ₯: μκ°ννλ €λ λ©νΈλ¦μ κ²μνκΈ° μν΄ PromQL 쿼리λ₯Ό μ λ ₯ν©λλ€. μλ₯Ό λ€μ΄ CPU μ¬μ©λ₯ μ νμνλ €λ©΄ λ€μ 쿼리λ₯Ό μ¬μ©ν μ μμ΅λλ€:
rate(process_cpu_seconds_total{job="node_exporter"}[5m])
μ΄ μΏΌλ¦¬λ 5λΆ κ°κ²©μΌλ‘ node_exporterκ° μμ§ν νλ‘μΈμ€μμ μ¬μ©λ CPU μκ°μ λ³νμ¨μ κ³μ°ν©λλ€.
- μκ°ν μ΅μ ꡬμ±: μκ°ν μ ν(μ: κ·Έλν, κ²μ΄μ§, ν μ΄λΈ)μ μ ννκ³ νμν λ€λ₯Έ μ΅μ (μ: μΆ λ μ΄λΈ, μμ)μ ꡬμ±ν©λλ€.
4. λμ보λ μ μ₯:
μ μ₯ μμ΄μ½μ ν΄λ¦νμ¬ λμ보λλ₯Ό μ μ₯ν©λλ€.
PromQL: νλ‘λ©ν μ°μ€ 쿼리 μΈμ΄
PromQLμ νλ‘λ©ν μ°μ€μ μ μ₯λ λ©νΈλ¦μ κ²μνκ³ μ‘°μνλ λ° μ¬μ©λλ κ°λ ₯ν 쿼리 μΈμ΄μ λλ€. λ€μκ³Ό κ°μ κ΄λ²μν μμ μ μνν μ μμ΅λλ€:
- νν°λ§: λ μ΄λΈμ κΈ°λ°μΌλ‘ λ©νΈλ¦μ μ νν©λλ€.
- μ§κ³: μκ° λ²μ λλ μ¬λ¬ μΈμ€ν΄μ€μ κ±Έμ³ μ§κ³ κ°(μ: ν©κ³, νκ· , μ΅λκ°)μ κ³μ°ν©λλ€.
- λΉμ¨ κ³μ°: μΉ΄μ΄ν° λ©νΈλ¦μ λ³νμ¨μ κ³μ°ν©λλ€.
- μ°μ μ°μ°: λ©νΈλ¦μ λν μ°μ μ°μ°(μ: λ§μ , λΊμ , κ³±μ )μ μνν©λλ€.
- μκ³μ΄ ν¨μ: μκ³μ΄ λ°μ΄ν°μ ν¨μ(μ: μ΄λ νκ· , ννν)λ₯Ό μ μ©ν©λλ€.
PromQL μμ
- CPU μ¬μ©λ₯ :
rate(process_cpu_seconds_total{job="node_exporter"}[5m])
- λ©λͺ¨λ¦¬ μ¬μ©λ:
node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes
- λμ€ν¬ κ³΅κ° μ¬μ©λ:
(node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_free_bytes{mountpoint="/"}) / node_filesystem_size_bytes{mountpoint="/"} * 100
- HTTP μμ²λ₯ :
rate(http_requests_total[5m])
PromQLμ λ°°μ°λ κ²μ νλ‘λ©ν μ°μ€μ κ·ΈλΌνλλ₯Ό ν¨κ³Όμ μΌλ‘ μ¬μ©νλ λ° νμμ μ λλ€. μΈμ΄μ λν ν¬κ΄μ μΈ κ°μ΄λλ νλ‘λ©ν μ°μ€ μ€λͺ μλ₯Ό μ°Έμ‘°νμΈμ.
νλ‘λ©ν μ°μ€μ μΌλΏλ§€λμ λ₯Ό μ΄μ©ν μλ¦Ό
νλ‘λ©ν μ°μ€λ λ©νΈλ¦ κ°μ κΈ°λ°μΌλ‘ κ·μΉμ μ μν μ μλ κ°λ ₯ν μλ¦Ό μμ€ν μ μ 곡ν©λλ€. κ·μΉ μ‘°κ±΄μ΄ μΆ©μ‘±λλ©΄ μλ¦Όμ΄ νΈλ¦¬κ±°λκ³ , μΌλΏλ§€λμ κ° μλ¦Ό νλ‘μΈμ€λ₯Ό μ²λ¦¬ν©λλ€.
μλ¦Ό κ·μΉ μ μνκΈ°
μλ¦Ό κ·μΉμ `prometheus.yml` κ΅¬μ± νμΌμ μ μλ©λλ€. λ€μμ CPU μ¬μ©λ₯ μ΄ 80%λ₯Ό μ΄κ³Όν λ νΈλ¦¬κ±°λλ μλ¦Ό κ·μΉμ μμ λλ€:
rule_files:
- "rules.yml"
κ·Έλ° λ€μ `rules.yml`μ΄λΌλ νμΌμ λ€μκ³Ό κ°μ κ·μΉμ λ°°μΉν©λλ€:
groups:
- name: example
rules:
- alert: HighCPUUsage
expr: rate(process_cpu_seconds_total{job="node_exporter"}[5m]) > 0.8
for: 1m
labels:
severity: critical
annotations:
summary: "High CPU usage detected"
description: "CPU usage is above 80% on {{ $labels.instance }}"
μ€λͺ :
- alert: μλ¦Όμ μ΄λ¦μ λλ€.
- expr: μλ¦Ό 쑰건μ μ μνλ PromQL ννμμ λλ€.
- for: μλ¦Όμ΄ νΈλ¦¬κ±°λκΈ° μ μ μ‘°κ±΄μ΄ μ°Έμ΄μ΄μΌ νλ μ§μ μκ°μ λλ€.
- labels: μλ¦Όμ 첨λΆλλ λ μ΄λΈμ λλ€.
- annotations: μμ½ λ° μ€λͺ κ³Ό κ°μ΄ μλ¦Όμ λν μΆκ° μ 보λ₯Ό μ 곡νλ μ£Όμμ λλ€.
μΌλΏλ§€λμ ꡬμ±νκΈ°
μΌλΏλ§€λμ λ μλ¦Όμ λΌμ°ν λ° ν΅μ§λ₯Ό μ²λ¦¬ν©λλ€. μλ¦Όμ λ³΄λΌ μμΉ(μ: μ΄λ©μΌ, μ¬λ, PagerDuty)λ₯Ό μ§μ νλλ‘ μΌλΏλ§€λμ λ₯Ό ꡬμ±ν΄μΌ ν©λλ€. μμΈν κ΅¬μ± μ§μΉ¨μ μΌλΏλ§€λμ μ€λͺ μλ₯Ό μ°Έμ‘°νμΈμ.
μ΅μνμ `alertmanager.yml` ꡬμ±μ λ€μκ³Ό κ°μ μ μμ΅λλ€:
global:
resolve_timeout: 5m
route:
group_by: ['alertname']
group_wait: 30s
group_interval: 5m
repeat_interval: 12h
receiver: 'web.hook'
receivers:
- name: 'web.hook'
webhook_configs:
- url: 'http://localhost:8080/'
μ΄ κ΅¬μ±μ localhost ν¬νΈ 8080μ μΉν μΌλ‘ μλ¦Όμ 보λ λλ€. `receivers` μΉμ μ μ¬μ©μ μ μνμ¬ μ¬λμ΄λ μ΄λ©μΌκ³Ό κ°μ μλΉμ€λ₯Ό λμ μ¬μ©ν μ μμ΅λλ€.
μ€μ©μ μΈ μμ λ° μ¬μ© μ¬λ‘
νλ‘λ©ν μ°μ€μ κ·ΈλΌνλλ κ΄λ²μν μ ν리μΌμ΄μ λ° μΈνλΌ κ΅¬μ± μμλ₯Ό λͺ¨λν°λ§νλ λ° μ¬μ©ν μ μμ΅λλ€. λ€μμ λͺ κ°μ§ μ€μ©μ μΈ μμ λλ€:
- μΉ μλ² λͺ¨λν°λ§: μ΅μ μ μΉ μλ² μ±λ₯μ 보μ₯νκΈ° μν΄ HTTP μμ²λ₯ , μλ΅ μκ° λ° μ€λ₯μ¨μ λͺ¨λν°λ§ν©λλ€.
- λ°μ΄ν°λ² μ΄μ€ λͺ¨λν°λ§: λ°μ΄ν°λ² μ΄μ€ μ°κ²° ν μ¬μ©λ, 쿼리 μ€ν μκ° λ° λλ¦° 쿼리λ₯Ό μΆμ νμ¬ λ°μ΄ν°λ² μ΄μ€ λ³λͺ© νμμ μλ³ν©λλ€.
- μΏ λ²λ€ν°μ€ λͺ¨λν°λ§: νλ λ° λ Έλμ 리μμ€ νμ©μ ν¬ν¨νμ¬ μΏ λ²λ€ν°μ€ ν΄λ¬μ€ν°μ μνμ μ±λ₯μ λͺ¨λν°λ§ν©λλ€.
- μ ν리μΌμ΄μ λͺ¨λν°λ§: μ ν리μΌμ΄μ μμ μ¬μ©μ μ μ λ©νΈλ¦μ μμ§νμ¬ νΉμ λΉμ¦λμ€ KPIλ₯Ό μΆμ νκ³ μ ν리μΌμ΄μ μμ€μ λ¬Έμ λ₯Ό μλ³ν©λλ€.
- λ€νΈμν¬ λͺ¨λν°λ§: λ€νΈμν¬ νΈλν½, μ§μ° μκ° λ° ν¨ν· μμ€μ μΆμ νμ¬ λ€νΈμν¬ λ³λͺ© νμ λ° μ±λ₯ λ¬Έμ λ₯Ό μλ³ν©λλ€.
- ν΄λΌμ°λ μΈνλΌ λͺ¨λν°λ§: κ°μ λ¨Έμ , μ€ν 리μ§, λ°μ΄ν°λ² μ΄μ€μ κ°μ ν΄λΌμ°λ 리μμ€μ μ±λ₯κ³Ό κ°μ©μ±μ λͺ¨λν°λ§ν©λλ€. μ΄λ AWS, Azure, Google Cloud νκ²½κ³Ό νΉν κ΄λ ¨μ΄ μμΌλ©°, λͺ¨λ νλ‘λ©ν μ°μ€ λ° κ·ΈλΌνλμ ν΅ν©λ©λλ€.
μμ: λ§μ΄ν¬λ‘μλΉμ€ μν€ν μ² λͺ¨λν°λ§
λ§μ΄ν¬λ‘μλΉμ€ μν€ν μ²μμ νλ‘λ©ν μ°μ€μ κ·ΈλΌνλλ κ°λ³ μλΉμ€μ μνμ μ±λ₯μ λ¬Όλ‘ μ 체 μμ€ν μ λͺ¨λν°λ§νλ λ° μ¬μ©ν μ μμ΅λλ€. κ° μλΉμ€λ μμ²λ₯ , μλ΅ μκ°, μ€λ₯μ¨κ³Ό κ°μ μ체 λ©νΈλ¦μ λ ΈμΆν μ μμ΅λλ€. κ·Έλ° λ€μ νλ‘λ©ν μ°μ€κ° μ΄ λ©νΈλ¦μ μ€ν¬λ©νκ³ κ·ΈλΌνλλ₯Ό μ¬μ©νμ¬ μκ°νν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ νΉμ μλΉμ€μ μ±λ₯ λ³λͺ© νμμ΄λ μ₯μ λ₯Ό μ μνκ² μλ³ν μ μμ΅λλ€.
κ³ κΈ κΈ°μ λ° λͺ¨λ² μ¬λ‘
νλ‘λ©ν μ°μ€μ κ·ΈλΌνλλ₯Ό μ΅λν νμ©νλ €λ©΄ λ€μκ³Ό κ°μ κ³ κΈ κΈ°μ λ° λͺ¨λ² μ¬λ‘λ₯Ό κ³ λ €νμμμ€:
- μλ―Έ μλ λ μ΄λΈ μ¬μ©: λ μ΄λΈμ μ¬μ©νμ¬ λ©νΈλ¦μ 컨ν μ€νΈλ₯Ό μΆκ°νμμμ€. μ΄λ κ² νλ©΄ λ°μ΄ν°λ₯Ό λ μ½κ² νν°λ§νκ³ μ§κ³ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, λ©νΈλ¦μ΄ μ°κ΄λ μλΉμ€, νκ²½ λ° μΈμ€ν΄μ€λ₯Ό μλ³νκΈ° μν΄ λ μ΄λΈμ μ¬μ©νμμμ€.
- ν΅μ¬ μ±κ³Ό μ§ν(KPI) λͺ¨λν°λ§: λΉμ¦λμ€μ κ°μ₯ μ€μν λ©νΈλ¦μ λͺ¨λν°λ§νλ λ° μ§μ€νμμμ€. μ΄λ₯Ό ν΅ν΄ κ°μ₯ ν° μν₯μ λ―ΈμΉλ λ¬Έμ λ₯Ό μ μνκ² μλ³νκ³ ν΄κ²°ν μ μμ΅λλ€.
- μ μ ν μλ¦Ό μκ³κ° μ€μ : νκ²½μ μ ν©ν μλ¦Ό μκ³κ°μ μ€μ νμμμ€. λ무 λ―Όκ°ν μκ³κ°μ μ€μ νλ©΄ μλ¦Ό νΌλ‘λ₯Ό μ λ°ν μ μμΌλ―λ‘ νΌνμμμ€.
- λμ보λ ν¨κ³Όμ μΌλ‘ μ¬μ©: μ΄ν΄νκΈ° μ½κ³ μ€ν κ°λ₯ν ν΅μ°°λ ₯μ μ 곡νλ λμ보λλ₯Ό μ€κ³νμμμ€. λͺ ννκ³ κ°κ²°ν λ μ΄λΈκ³Ό μκ°νλ₯Ό μ¬μ©νμμμ€.
- λ°°ν¬ λ° κ΅¬μ± μλν: Ansible, Terraform λλ Kubernetesμ κ°μ λꡬλ₯Ό μ¬μ©νμ¬ νλ‘λ©ν μ°μ€ λ° κ·ΈλΌνλμ λ°°ν¬ λ° κ΅¬μ±μ μλννμμμ€.
- νλ‘λ©ν μ°μ€ λ° κ·ΈλΌνλ μΈμ€ν΄μ€ 보μ: λ¬΄λ¨ μ κ·Όμ λ°©μ§νκΈ° μν΄ νλ‘λ©ν μ°μ€ λ° κ·ΈλΌνλ μΈμ€ν΄μ€λ₯Ό 보νΈνμμμ€. μΈμ¦ λ° κΆν λΆμ¬λ₯Ό μ¬μ©νμ¬ λ―Όκ°ν λ°μ΄ν°μ λν μ κ·Όμ μ μ΄νμμμ€.
- μν νμ₯ κ³ λ €: λκ·λͺ¨ νκ²½μ κ²½μ° μ¦κ°λ λΆνλ₯Ό μ²λ¦¬νκΈ° μν΄ νλ‘λ©ν μ°μ€ λ° κ·ΈλΌνλ μΈμ€ν΄μ€λ₯Ό μνμΌλ‘ νμ₯νλ κ²μ κ³ λ €νμμμ€. μ΄λ μ¬λ¬ νλ‘λ©ν μ°μ€ μλ²μ λ‘λ λ°Έλ°μ λ€μ κ·ΈλΌνλ μΈμ€ν΄μ€λ₯Ό μ¬μ©νμ¬ λ¬μ±ν μ μμ΅λλ€.
- μλΉμ€ λμ€μ»€λ²λ¦¬ νμ©: νλ‘λ©ν μ°μ€μ μλΉμ€ λμ€μ»€λ²λ¦¬ κΈ°λ₯μ νμ©νμ¬ μλ‘μ΄ νκ²μ μλμΌλ‘ λ°κ²¬νκ³ λͺ¨λν°λ§νμμμ€. μ΄λ μΏ λ²λ€ν°μ€μ κ°μ λμ νκ²½μμ νΉν μ μ©ν©λλ€.
μΌλ°μ μΈ λ¬Έμ ν΄κ²°
μ μ€ν κ³νκ³Ό ꡬνμλ λΆκ΅¬νκ³ νλ‘λ©ν μ°μ€μ κ·ΈλΌνλλ₯Ό μ¬μ©ν λ λ¬Έμ κ° λ°μν μ μμ΅λλ€. λ€μμ λͺ κ°μ§ μΌλ°μ μΈ λ¬Έμ μ ν΄κ²° λ°©λ²μ λλ€:
- νλ‘λ©ν μ°μ€κ° λ©νΈλ¦μ μ€ν¬λ©νμ§ μμ: νλ‘λ©ν μ°μ€ μλ²μμ νκ²μ μ κ·Όν μ μλμ§ νμΈνμμμ€. νλ‘λ©ν μ°μ€ λ‘κ·Έμμ μ€λ₯λ₯Ό νμΈνμμμ€. νκ²μ΄ μ¬λ°λ₯Έ νμμΌλ‘ λ©νΈλ¦μ λ ΈμΆνκ³ μλμ§ νμΈνμμμ€.
- κ·ΈλΌνλκ° νλ‘λ©ν μ°μ€μ μ°κ²°λμ§ μμ: κ·ΈλΌνλ λ°μ΄ν° μμ€ κ΅¬μ±μμ νλ‘λ©ν μ°μ€ URLμ΄ μ¬λ°λ₯Έμ§ νμΈνμμμ€. κ·ΈλΌνλ λ‘κ·Έμμ μ€λ₯λ₯Ό νμΈνμμμ€. νλ‘λ©ν μ°μ€ μλ²κ° μ€ν μ€μ΄κ³ κ·ΈλΌνλ μλ²μμ μ κ·Όν μ μλμ§ νμΈνμμμ€.
- PromQL μΏΌλ¦¬κ° λ°μ΄ν°λ₯Ό λ°ννμ§ μμ: PromQL μΏΌλ¦¬κ° μ¬λ°λ₯Έμ§ νμΈνμμμ€. νλ‘λ©ν μ°μ€ λ‘κ·Έμμ μ€λ₯λ₯Ό νμΈνμμμ€. 쿼리νλ €λ λ©νΈλ¦μ΄ μ‘΄μ¬νκ³ νλ‘λ©ν μ°μ€μ μν΄ μ€ν¬λ©λκ³ μλμ§ νμΈνμμμ€.
- μλ¦Όμ΄ λ°μνμ§ μμ: μλ¦Ό κ·μΉμ΄ μ¬λ°λ₯΄κ² μ μλμλμ§ νμΈνμμμ€. νλ‘λ©ν μ°μ€ λ‘κ·Έμμ μ€λ₯λ₯Ό νμΈνμμμ€. μΌλΏλ§€λμ κ° μ€ν μ€μ΄κ³ μ¬λ°λ₯΄κ² ꡬμ±λμλμ§ νμΈνμμμ€.
- μ±λ₯ λ¬Έμ : μ±λ₯ λ¬Έμ κ° λ°μνλ κ²½μ° νλ‘λ©ν μ°μ€ λ° κ·ΈλΌνλ μΈμ€ν΄μ€λ₯Ό μνμΌλ‘ νμ₯νλ κ²μ κ³ λ €νμμμ€. PromQL 쿼리λ₯Ό μ΅μ ννμ¬ νλ‘λ©ν μ°μ€ μλ²μ λΆνλ₯Ό μ€μ΄μμμ€.
λ체 λͺ¨λν°λ§ μ루μ
νλ‘λ©ν μ°μ€μ κ·ΈλΌνλλ κ°λ ₯ν λꡬμ΄μ§λ§ λ©νΈλ¦ μμ§ λ° μκ°νλ₯Ό μν μ μΌν μ΅μ μ μλλλ€. λ€λ₯Έ μΈκΈ° μλ λͺ¨λν°λ§ μ루μ μ λ€μκ³Ό κ°μ΅λλ€:
- Datadog: λ©νΈλ¦ μμ§, λ‘κ·Έ κ΄λ¦¬ λ° μ ν리μΌμ΄μ μ±λ₯ λͺ¨λν°λ§(APM)μ ν¬ν¨ν κ΄λ²μν κΈ°λ₯μ μ 곡νλ μμ© λͺ¨λν°λ§ νλ«νΌμ λλ€.
- New Relic: μ ν리μΌμ΄μ λ° μΈνλΌμ λν ν¬κ΄μ μΈ λͺ¨λν°λ§ κΈ°λ₯μ μ 곡νλ λ λ€λ₯Έ μμ© λͺ¨λν°λ§ νλ«νΌμ λλ€.
- InfluxDB λ° Chronograf: νλ‘λ©ν μ°μ€ λ° κ·ΈλΌνλμ λμμΌλ‘ μμ£Ό μ¬μ©λλ μκ³μ΄ λ°μ΄ν°λ² μ΄μ€ λ° μκ°ν νλ«νΌμ λλ€.
- Elasticsearch, Logstash, Kibana (ELK μ€ν): λ‘κ·Έ κ΄λ¦¬ λ° λΆμμ μν μΈκΈ° μλ μ€νμμ€ μ€νμ λλ€. μ£Όλ‘ λ‘κ·Έμ μ¬μ©λμ§λ§ λ©νΈλ¦ μμ§ λ° μκ°νμλ μ¬μ©ν μ μμ΅λλ€.
- Dynatrace: μ ν리μΌμ΄μ λ° μΈνλΌ μ±λ₯μ λν μλν¬μλ κ°μμ±μ μ 곡νλ AI κΈ°λ° λͺ¨λν°λ§ νλ«νΌμ λλ€.
μ‘°μ§μ κ°μ₯ μ ν©ν λͺ¨λν°λ§ μ루μ μ νΉμ μꡬ μ¬νκ³Ό μμ°μ λ°λΌ λ¬λΌμ§λλ€.
κ²°λ‘
λ©νΈλ¦ μμ§μ μ ν리μΌμ΄μ λ° μΈνλΌμ μνμ μ±λ₯μ μ μ§νλ λ° νμμ μ λλ€. νλ‘λ©ν μ°μ€μ κ·ΈλΌνλλ λ©νΈλ¦μ μμ§, μ μ₯ λ° μκ°ννκΈ° μν κ°λ ₯νκ³ μ μ°ν μ€νμμ€ μ루μ μ μ 곡ν©λλ€. μ΄ κ°μ΄λμ μ€λͺ λ ν΅μ¬ κ°λ μ μ΄ν΄νκ³ λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄λ©΄, νλ‘λ©ν μ°μ€μ κ·ΈλΌνλλ₯Ό νμ©νμ¬ μ‘°μ§μ μꡬλ₯Ό μΆ©μ‘±νλ κ²¬κ³ ν λͺ¨λν°λ§ μμ€ν μ ꡬμΆν μ μμ΅λλ€.
μ¬μ μλ°©μ μλ¦Ό λ° μ μν μ¬κ³ λμκ³Ό κ²°ν©λ ν¨κ³Όμ μΈ λͺ¨λν°λ§μ νλ IT μ΄μμ μ΄μμ λλ€. νλ‘λ©ν μ°μ€μ κ·ΈλΌνλ κ°μ λꡬλ₯Ό λμ νλ©΄ μ‘°μ§μ μμΉλ μ°μ μ κ΄κ³μμ΄ μ¬μ©μμκ² μ λ’°ν μ μκ³ μ±λ₯μ΄ λ°μ΄λ μλΉμ€λ₯Ό μ 곡ν μ μμ΅λλ€.