Conversation
[FEATURE] Prometheus/Grafana νκ²½ μΆκ°
Summary of ChangesHello @youyeon11, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! μ΄ PRμ μ ν리μΌμ΄μ μ ν¬κ΄μ μΈ λͺ¨λν°λ§ κΈ°λ₯μ λμ νμ¬ Prometheusμ Grafanaλ₯Ό ν΅ν©ν©λλ€. FastAPI μ ν리μΌμ΄μ μ κ³μΈ‘νμ¬ μ±λ₯ λ©νΈλ¦μ λ ΈμΆνκ³ , λ°°ν¬ νλ‘μΈμ€λ₯Ό μ λ°μ΄νΈνλ©°, λͺ¨λν°λ§ μ€νμ νμν κ΅¬μ± νμΌμ μΆκ°ν©λλ€. μ΄λ μμ€ν μ κ°μμ±μ ν₯μμν€κ³ μ μ¬μ μΈ λ¬Έμ λ₯Ό μ¬μ μ κ°μ§νλ λ° λμμ΄ λ κ²μ λλ€. Highlights
Ignored Files
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with π and π on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
π€ Gemini μ½λ 리뷰 κ²°κ³Ό1) PR μλ μμ½μ΄λ² PRμ μμ€ν μ μμ μ±κ³Ό κ΄μΈ‘ κ°λ₯μ±(Observability)μ λμ΄κΈ° μν΄ Prometheusμ Grafana κΈ°λ°μ λͺ¨λν°λ§ νκ²½μ λμ νλ κ²μ λͺ©νλ‘ ν©λλ€. μ΄λ₯Ό μν΄ FastAPI μ ν리μΌμ΄μ μ λ©νΈλ¦ μμ§ μλν¬μΈνΈλ₯Ό μΆκ°νκ³ , λͺ¨λν°λ§ μ€νμ Docker Composeλ‘ μ μνμμ΅λλ€. λν, μΈμ€ν΄μ€ λ€μ΄μ΄λ API μ§μ°κ³Ό κ°μ μν©μ λν κ²½κ³ (Alert) κ·μΉμ μ€μ νμ¬ μ₯μ μ μ μνκ² λμν μ μλ κΈ°λ°μ λ§λ ¨νμ΅λλ€. 2) μ λ°μ νκ° (νμ§/κ°λ μ±/ν μ€νΈ/μν€ν μ²)
3) μ°μ μμλ³ νΌλλ°± λͺ©λ‘[P2] νλμ½λ©λ κ²½λ‘λ₯Ό μ¬μ©νμ¬ μ΄μμ± λ° μ μ§λ³΄μμ± μ ν
[P2] λͺ¨λν°λ§ μ€ν λ°°ν¬ μλν λλ½
[P3] νκ²½ λ³μ μ€μ μ λν μ€λͺ λΆμ‘±
[P3] API λ©νΈλ¦ μμ§ μ£ΌκΈ° κ³Όλ€
[P4] λΆνμν μμ‘΄μ± ν¬ν¨
[P5] λ©νΈλ¦ μ΄κΈ°ν λ‘μ§ λΆλ¦¬ μ μ
μ λ°μ μΌλ‘ λͺ¨λν°λ§ νκ²½μ λμ νμ¬ μμ€ν μ μμ μ±κ³Ό κ΄μΈ‘ κ°λ₯μ±μ ν¬κ² λμ΄λ μ€μν PRμ΄λΌκ³ μκ°ν©λλ€. λͺ κ°μ§ μ μ μ¬νμ λ°μνλ©΄ λ κ²¬κ³ νκ³ μ μ§λ³΄μνκΈ° μ’μ κ΅¬μ‘°κ° λ κ² κ°μ΅λλ€. μκ³ νμ ¨μ΅λλ€! π |
There was a problem hiding this comment.
Code Review
μ΄ PRμ Prometheusμ Grafanaλ₯Ό μ¬μ©νμ¬ λͺ¨λν°λ§ νκ²½μ μΆκ°νλ κ²μ λͺ©νλ‘ ν©λλ€. FastAPI μ ν리μΌμ΄μ μ λ©νΈλ¦ μλν¬μΈνΈλ₯Ό μΆκ°νκ³ , λͺ¨λν°λ§ μ€νμ μν Docker Compose μ€μ λ° Prometheus μ€μ νμΌμ μΆκ°νμ΅λλ€. μ λ°μ μΌλ‘ μ’μ λ°©ν₯μ΄μ§λ§, Docker λ€νΈμνΉ μ€μ μ€λ₯λ‘ μΈν΄ λͺ¨λν°λ§μ΄ μ μμ μΌλ‘ λμνμ§ μμ μ μμΌλ©°, Docker μ΄λ―Έμ§ νκ·Έμ λ³Όλ₯¨ μ€μ μ κ°μ μ΄ νμν©λλ€. μλμ μμΈν 리뷰 μ견μ λ¨κ²Όμ΅λλ€.
| - job_name: 'fastapi-actuator-blue' | ||
| metrics_path: '/actuator/prometheus' | ||
| scrape_interval: 1m | ||
| static_configs: | ||
| - targets: [ 'app-blue:8000' ] | ||
| - job_name: 'fastapi-actuator-green' | ||
| metrics_path: '/actuator/prometheus' | ||
| scrape_interval: 1m | ||
| static_configs: | ||
| - targets: [ 'app-green:8001' ] No newline at end of file |
There was a problem hiding this comment.
fastapi-actuator-blueμ fastapi-actuator-green jobμ΄ app-blue:8000, app-green:8001μ νκ²μΌλ‘ νκ³ μμ΅λλ€. νμ§λ§ docker-compose.monitoring.ymlκ³Ό docker-compose.ymlμ΄ λ³λμ νμΌλ‘ κ΄λ¦¬λκ³ μμ΄, Prometheus 컨ν
μ΄λμ μ ν리μΌμ΄μ
컨ν
μ΄λλ€μ΄ μλ‘ λ€λ₯Έ Docker λ€νΈμν¬μ μνκ² λ κ°λ₯μ±μ΄ λμ΅λλ€. μ΄ κ²½μ° Prometheusκ° μ ν리μΌμ΄μ
μ λ©νΈλ¦μ μμ§ν μ μμ΅λλ€. λͺ¨λ 컨ν
μ΄λκ° λμΌν Docker λ€νΈμν¬μ μλλ‘ docker-compose.ymlκ³Ό docker-compose.monitoring.ymlμ λ€νΈμν¬ μ€μ μ λ§μΆ°μ£Όμ΄μΌ ν©λλ€. μλ₯Ό λ€μ΄, κ³΅ν΅ μΈλΆ λ€νΈμν¬(external network)λ₯Ό μ¬μ©νλλ‘ μ€μ ν μ μμ΅λλ€.
| services: | ||
| prometheus: | ||
| user: ${PROMETHEUS_USER} | ||
| image: prom/prometheus:latest |
There was a problem hiding this comment.
prom/prometheus:latestμ κ°μ΄ :latest νκ·Έλ₯Ό μ¬μ©νλ κ²μ νλ‘λμ
νκ²½μμ μκΈ°μΉ μμ λ²μ λ³κ²½μΌλ‘ μΈν λ¬Έμ λ₯Ό μΌμΌν¬ μ μμ΅λλ€. μμ μ μΈ μ΄μμ μν΄ νΉμ λ²μ (μ: v2.51.2)μ λͺ
μνλ κ²μ΄ μ’μ΅λλ€.
image: prom/prometheus:v2.51.2|
|
||
| grafana: | ||
| user: ${GRAFANA_USER} | ||
| image: grafana/grafana:latest |
There was a problem hiding this comment.
grafana/grafana:latestμ κ°μ΄ :latest νκ·Έλ₯Ό μ¬μ©νλ κ²μ νλ‘λμ
νκ²½μμ μκΈ°μΉ μμ λ²μ λ³κ²½μΌλ‘ μΈν λ¬Έμ λ₯Ό μΌμΌν¬ μ μμ΅λλ€. μμ μ μΈ μ΄μμ μν΄ νΉμ λ²μ (μ: 11.0.0)μ λͺ
μνλ κ²μ΄ μ’μ΅λλ€.
image: grafana/grafana:11.0.0| - job_name: 'node' | ||
| static_configs: | ||
| - targets: ['${REMOTE_HOST}:9090'] |
There was a problem hiding this comment.
node jobμ targetsκ° Prometheus μμ μ κ°λ¦¬ν€λ '${REMOTE_HOST}:9090'μΌλ‘ μ€μ λμ΄ μμ΅λλ€. nodeλΌλ μ΄λ¦μΌλ‘ 보μ Node Exporter λ©νΈλ¦μ μμ§νλ €λ μλλ‘ λ³΄μ΄μ§λ§, ν¬νΈκ° μλͺ»λμμ΅λλ€. Node Exporterλ λ³΄ν΅ 9100 ν¬νΈλ₯Ό μ¬μ©ν©λλ€. λ§μ½ Node Exporterλ₯Ό μ¬μ©νμ§ μλλ€λ©΄ μ΄ jobμ λΆνμνκ² Prometheus λ©νΈλ¦μ μ€λ³΅ μμ§νλ―λ‘ μ κ±°νλ κ²μ΄ μ’μ΅λλ€.
- job_name: 'node'
static_configs:
- targets: ['${REMOTE_HOST}:9100']| - /home/ubuntu/dearbelly/deployment/prometheus.yml:/etc/prometheus/prometheus.yml:ro | ||
| - /home/ubuntu/prometheus/volume:/prometheus/data |
There was a problem hiding this comment.
Prometheus λ³Όλ₯¨ κ²½λ‘κ° /home/ubuntu/...μ κ°μ΄ μ λ κ²½λ‘λ‘ νλμ½λ©λμ΄ μμ΄ λ€λ₯Έ νκ²½μμμ μ¬μ¬μ©μ± λ° μ΄μμ±μ΄ λ¨μ΄μ§λλ€. μ€μ νμΌμ μλ κ²½λ‘ (./prometheus.yml)λ₯Ό μ¬μ©νκ³ , λ°μ΄ν° λ³Όλ₯¨μ Dockerμ named volumeμ μ¬μ©νλ κ²μ κΆμ₯ν©λλ€. νμΌ νλ¨μ volumes μΉμ
μ μΆκ°νμ¬ prometheus-data named volumeμ μ μν΄μΌ ν©λλ€.
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
- prometheus-data:/prometheus/data| ports: | ||
| - 3000:3000 | ||
| volumes: | ||
| - /home/ubuntu/grafana/volume:/var/lib/grafana |
There was a problem hiding this comment.
Grafana λ°μ΄ν° λ³Όλ₯¨ κ²½λ‘κ° /home/ubuntu/grafana/volumeμ κ°μ΄ μ λ κ²½λ‘λ‘ νλμ½λ©λμ΄ μμ΄ μ΄μμ±μ΄ λ¨μ΄μ§λλ€. Dockerμ named volumeμ μ¬μ©νμ¬ κ΄λ¦¬νλ κ²μ κΆμ₯ν©λλ€. νμΌ νλ¨μ volumes μΉμ
μ μΆκ°νμ¬ grafana-data named volumeμ μ μν΄μΌ ν©λλ€.
- grafana-data:/var/lib/grafana
π μμ λͺ©μ
π μμ μ ν
π¨ μ£Όμ μμ λ΄μ©
π κ΄λ ¨ μ΄μ