From 8ae1c699d69d15b784ab0b59c40b3d47d88e82ba Mon Sep 17 00:00:00 2001 From: fayz131 Date: Thu, 19 Mar 2026 23:29:03 +0300 Subject: [PATCH] Lab08: metrics and monitoring with Prometheus --- app_python/app.py | 154 ++++++- app_python/requirements.txt | 2 + monitoring/docker-compose.yml | 130 ++++++ monitoring/docs/LAB08.md | 443 +++++++++++++++++++++ monitoring/docs/screenshots/Dashboard.jpg | Bin 0 -> 62104 bytes monitoring/docs/screenshots/Prometheus.jpg | Bin 0 -> 65064 bytes monitoring/loki/config.yml | 35 ++ monitoring/prometheus/prometheus.yml | 23 ++ monitoring/promtail/config.yml | 33 ++ 9 files changed, 805 insertions(+), 15 deletions(-) create mode 100644 monitoring/docker-compose.yml create mode 100644 monitoring/docs/LAB08.md create mode 100644 monitoring/docs/screenshots/Dashboard.jpg create mode 100644 monitoring/docs/screenshots/Prometheus.jpg create mode 100644 monitoring/loki/config.yml create mode 100644 monitoring/prometheus/prometheus.yml create mode 100644 monitoring/promtail/config.yml diff --git a/app_python/app.py b/app_python/app.py index 29cb4e95d9..192b259897 100644 --- a/app_python/app.py +++ b/app_python/app.py @@ -7,27 +7,75 @@ import socket import platform import logging +import sys from datetime import datetime, timezone +import time +from fastapi.responses import JSONResponse, Response +from prometheus_client import Counter, Histogram, Gauge, generate_latest, CONTENT_TYPE_LATEST from fastapi import FastAPI, Request -from fastapi.responses import JSONResponse +from pythonjsonlogger import jsonlogger import uvicorn HOST = os.getenv("HOST", "0.0.0.0") PORT = int(os.getenv("PORT", 5000)) -logging.basicConfig( - level=logging.INFO, - format="%(asctime)s - %(levelname)s - %(message)s", + +# Configure JSON logging +logger = logging.getLogger("devops-info-service") +logger.setLevel(logging.INFO) +logger.handlers.clear() + +log_handler = logging.StreamHandler(sys.stdout) +formatter = jsonlogger.JsonFormatter( + "%(asctime)s %(levelname)s %(message)s %(method)s %(path)s %(client_ip)s %(status_code)s" +) +log_handler.setFormatter(formatter) +logger.addHandler(log_handler) +logger.propagate = False + +# Prometheus metrics +HTTP_REQUESTS_TOTAL = Counter( + "http_requests_total", + "Total HTTP requests", + ["method", "endpoint", "status"], ) -logger = logging.getLogger(__name__) +HTTP_REQUEST_DURATION_SECONDS = Histogram( + "http_request_duration_seconds", + "HTTP request duration in seconds", + ["method", "endpoint"], +) + +HTTP_REQUESTS_IN_PROGRESS = Gauge( + "http_requests_in_progress", + "HTTP requests currently being processed", +) + +DEVOPS_INFO_ENDPOINT_CALLS_TOTAL = Counter( + "devops_info_endpoint_calls_total", + "Total endpoint calls in DevOps Info Service", + ["endpoint"], +) + +DEVOPS_INFO_SYSTEM_COLLECTION_SECONDS = Histogram( + "devops_info_system_collection_seconds", + "System information collection duration in seconds", +) START_TIME = datetime.now(timezone.utc) app = FastAPI(title="DevOps Info Service") -logger.info("Application initialized") +logger.info( + "Application initialized", + extra={ + "method": "", + "path": "", + "client_ip": "", + "status_code": "", + }, +) def get_uptime(): @@ -38,10 +86,16 @@ def get_uptime(): minutes = (seconds % 3600) // 60 return seconds, f"{hours} hours, {minutes} minutes" +def normalize_endpoint(path: str) -> str: + if path in ["/", "/health", "/metrics"]: + return path + return "other" def get_system_info(): """Collect system information.""" - return { + start = time.time() + + info = { "hostname": socket.gethostname(), "platform": platform.system(), "platform_version": platform.release(), @@ -50,12 +104,54 @@ def get_system_info(): "python_version": platform.python_version(), } + DEVOPS_INFO_SYSTEM_COLLECTION_SECONDS.observe(time.time() - start) + return info + + +@app.middleware("http") +async def log_requests(request: Request, call_next): + """Log every HTTP request in JSON format and collect Prometheus metrics.""" + endpoint = normalize_endpoint(request.url.path) + method = request.method + + HTTP_REQUESTS_IN_PROGRESS.inc() + DEVOPS_INFO_ENDPOINT_CALLS_TOTAL.labels(endpoint=endpoint).inc() + + start_time = time.time() + response = await call_next(request) + duration = time.time() - start_time + + status = str(response.status_code) + + HTTP_REQUESTS_TOTAL.labels( + method=method, + endpoint=endpoint, + status=status, + ).inc() + + HTTP_REQUEST_DURATION_SECONDS.labels( + method=method, + endpoint=endpoint, + ).observe(duration) + + HTTP_REQUESTS_IN_PROGRESS.dec() + + logger.info( + "HTTP request processed", + extra={ + "method": method, + "path": request.url.path, + "client_ip": request.client.host if request.client else "", + "status_code": response.status_code, + }, + ) + + return response + @app.get("/") async def index(request: Request): """Main endpoint returning service and system information.""" - logger.info("Handling request to '/'") - uptime_seconds, uptime_human = get_uptime() return { @@ -81,6 +177,7 @@ async def index(request: Request): "endpoints": [ {"path": "/", "method": "GET", "description": "Service information"}, {"path": "/health", "method": "GET", "description": "Health check"}, + {"path": "/metrics", "method": "GET", "description": "Prometheus metrics"}, ], } @@ -88,8 +185,6 @@ async def index(request: Request): @app.get("/health") async def health(): """Health check endpoint for monitoring.""" - logger.info("Health check requested") - uptime_seconds, _ = get_uptime() return { "status": "healthy", @@ -97,10 +192,23 @@ async def health(): "uptime_seconds": uptime_seconds, } +@app.get("/metrics") +async def metrics(): + """Prometheus metrics endpoint.""" + return Response(generate_latest(), media_type=CONTENT_TYPE_LATEST) @app.exception_handler(404) async def not_found(request: Request, exc): """Handle 404 errors.""" + logger.warning( + "Endpoint not found", + extra={ + "method": request.method, + "path": request.url.path, + "client_ip": request.client.host if request.client else "", + "status_code": 404, + }, + ) return JSONResponse( status_code=404, content={"error": "Not Found", "message": "Endpoint does not exist"}, @@ -110,13 +218,29 @@ async def not_found(request: Request, exc): @app.exception_handler(500) async def internal_error(request: Request, exc): """Handle unexpected server errors.""" - logger.error(f"Internal server error: {exc}") + logger.error( + "Internal server error", + extra={ + "method": request.method, + "path": request.url.path, + "client_ip": request.client.host if request.client else "", + "status_code": 500, + }, + ) return JSONResponse( status_code=500, content={"error": "Internal Server Error", "message": "An unexpected error occurred"}, ) -if __name__ == "__main__": - logger.info(f"Starting server on {HOST}:{PORT}") - uvicorn.run("app:app", host=HOST, port=PORT) +if __name__ == "__main__": + logger.info( + "Starting server", + extra={ + "method": "", + "path": "", + "client_ip": "", + "status_code": "", + }, + ) + uvicorn.run(app, host=HOST, port=PORT) diff --git a/app_python/requirements.txt b/app_python/requirements.txt index ebc98913e8..ef9f879780 100644 --- a/app_python/requirements.txt +++ b/app_python/requirements.txt @@ -1,2 +1,4 @@ fastapi==0.115.8 uvicorn[standard]==0.32.0 +python-json-logger +prometheus-client==0.23.1 diff --git a/monitoring/docker-compose.yml b/monitoring/docker-compose.yml new file mode 100644 index 0000000000..e5773d69f8 --- /dev/null +++ b/monitoring/docker-compose.yml @@ -0,0 +1,130 @@ +version: "3.8" + +services: + loki: + image: grafana/loki:3.0.0 + container_name: loki + ports: + - "3100:3100" + command: -config.file=/etc/loki/config.yml + volumes: + - ./loki/config.yml:/etc/loki/config.yml:ro + - loki-data:/loki + networks: + - logging + restart: unless-stopped + healthcheck: + test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:3100/ready || exit 1"] + interval: 10s + timeout: 5s + retries: 5 + start_period: 10s + deploy: + resources: + limits: + memory: 1G + cpus: "1.0" + + promtail: + image: grafana/promtail:3.0.0 + container_name: promtail + command: -config.file=/etc/promtail/config.yml + ports: + - "9080:9080" + volumes: + - ./promtail/config.yml:/etc/promtail/config.yml:ro + - /var/lib/docker/containers:/var/lib/docker/containers:ro + - /var/run/docker.sock:/var/run/docker.sock:ro + networks: + - logging + restart: unless-stopped + deploy: + resources: + limits: + memory: 256M + cpus: "0.5" + + grafana: + image: grafana/grafana:12.3.1 + container_name: grafana + ports: + - "3000:3000" + environment: + - GF_AUTH_ANONYMOUS_ENABLED=false + - GF_SECURITY_ADMIN_USER=admin + - GF_SECURITY_ADMIN_PASSWORD=admin123 + volumes: + - grafana-data:/var/lib/grafana + networks: + - logging + restart: unless-stopped + healthcheck: + test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:3000/api/health || exit 1"] + interval: 10s + timeout: 5s + retries: 5 + start_period: 20s + deploy: + resources: + limits: + memory: 512M + cpus: "0.5" + + prometheus: + image: prom/prometheus:v3.9.0 + container_name: prometheus + ports: + - "9090:9090" + command: + - "--config.file=/etc/prometheus/prometheus.yml" + - "--storage.tsdb.retention.time=15d" + - "--storage.tsdb.retention.size=10GB" + volumes: + - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro + - prometheus-data:/prometheus + networks: + - logging + restart: unless-stopped + healthcheck: + test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:9090/-/healthy || exit 1"] + interval: 10s + timeout: 5s + retries: 5 + start_period: 10s + deploy: + resources: + limits: + memory: 1G + cpus: "1.0" + + app-python: + image: fayzullin/devops-info-service:latest + container_name: app-python + ports: + - "8000:5000" + networks: + - logging + labels: + logging: "promtail" + app: "devops-python" + service_name: "devops-python" + restart: unless-stopped + healthcheck: + test: ["CMD-SHELL", "curl -f http://localhost:5000/health || exit 1"] + interval: 10s + timeout: 5s + retries: 5 + deploy: + resources: + limits: + memory: 256M + cpus: "0.5" + +volumes: + loki-data: + grafana-data: + prometheus-data: + +networks: + logging: + driver: bridge diff --git a/monitoring/docs/LAB08.md b/monitoring/docs/LAB08.md new file mode 100644 index 0000000000..63ee3fc179 --- /dev/null +++ b/monitoring/docs/LAB08.md @@ -0,0 +1,443 @@ +# Lab 8 — Metrics & Monitoring with Prometheus + +## Overview + +In this lab, I instrumented my Python application with Prometheus metrics and deployed a complete monitoring stack using Prometheus and Grafana. The application now exposes a `/metrics` endpoint, Prometheus scrapes metrics from all configured targets, and Grafana visualizes the collected data through custom dashboards. + +This lab extends the observability stack from Lab 7 by adding metrics-based monitoring on top of logs. + +Technologies used: + +- FastAPI +- prometheus_client +- Prometheus v3.9.0 +- Grafana v12.3.1 +- Docker Compose + +--- + +## 1. Architecture + +The monitoring architecture is based on a pull model. + +**Metric flow:** + +Application → `/metrics` endpoint → Prometheus scrapes metrics → Grafana queries Prometheus → dashboards visualize metrics + +### Components + +- **Python application** exposes Prometheus metrics on `/metrics` +- **Prometheus** scrapes metrics every 15 seconds +- **Grafana** uses Prometheus as a data source +- **Loki + Promtail** from Lab 7 remain available for logs + +### Monitoring targets + +The following targets were configured in Prometheus: + +- `prometheus` → `localhost:9090` +- `app` → `app-python:5000/metrics` +- `loki` → `loki:3100/metrics` +- `grafana` → `grafana:3000/metrics` + +--- + +## 2. Application Instrumentation + +I added Prometheus instrumentation to the FastAPI application using the `prometheus_client` Python library. + +### Installed dependency + +```txt +prometheus-client==0.23.1 +``` + +Metrics added +1. http_requests_total + +Type: Counter +Purpose: Counts total HTTP requests +Labels: method, endpoint, status + +This metric is used to calculate request rate, request distribution, and error rate. + +2. http_request_duration_seconds + +Type: Histogram +Purpose: Measures request latency in seconds +Labels: method, endpoint + +This metric is used for latency analysis and percentile calculations such as p95. + +3. http_requests_in_progress + +Type: Gauge +Purpose: Tracks active requests currently being processed + +This metric shows concurrency and current request load. + +4. devops_info_endpoint_calls_total + +Type: Counter +Purpose: Tracks how many times each application endpoint was called +Labels: endpoint + +This is an application-specific metric. + +5. devops_info_system_collection_seconds + +Type: Histogram +Purpose: Measures how long system information collection takes + +This is an internal business/application metric. + +Why these metrics were chosen + +The selected metrics follow the RED method: + +Rate → request counters + +Errors → request counters filtered by error status codes + +Duration → latency histogram + +This provides a strong baseline for monitoring a request-driven API service. + +## 3. Metrics Endpoint + +The application exposes a Prometheus-compatible endpoint: + +/metrics + +The endpoint returns metrics in Prometheus text exposition format. + +Example output +# HELP http_requests_total Total HTTP requests +# TYPE http_requests_total counter +http_requests_total{endpoint="/",method="GET",status="200"} 1.0 + +# HELP http_request_duration_seconds HTTP request duration in seconds +# TYPE http_request_duration_seconds histogram + +# HELP http_requests_in_progress HTTP requests currently being processed +# TYPE http_requests_in_progress gauge + +The endpoint was tested locally and also through Docker Compose after deployment. + +## 4. Prometheus Configuration + +Prometheus was added to the Docker Compose monitoring stack. + +Service image +prom/prometheus:v3.9.0 +Exposed port +9090 +Main configuration file + +monitoring/prometheus/prometheus.yml + +Configuration used +global: + scrape_interval: 15s + evaluation_interval: 15s + +scrape_configs: + - job_name: "prometheus" + static_configs: + - targets: ["localhost:9090"] + + - job_name: "app" + static_configs: + - targets: ["app-python:5000"] + metrics_path: /metrics + + - job_name: "loki" + static_configs: + - targets: ["loki:3100"] + metrics_path: /metrics + + - job_name: "grafana" + static_configs: + - targets: ["grafana:3000"] + metrics_path: /metrics +Scrape interval + +scrape_interval: 15s + +evaluation_interval: 15s + +This is frequent enough for lab-scale monitoring and dashboard responsiveness. + +## 5. Prometheus Verification + +After deployment, I verified Prometheus through the web UI. + +Prometheus endpoints tested + +http://localhost:9090 + +http://localhost:9090/targets + +http://localhost:9090/-/healthy + +Result + +All configured targets were successfully scraped and reported as UP: + +app + +grafana + +loki + +prometheus + +This confirmed that the monitoring stack was working correctly and all services were reachable through the Docker network. + +## 6. Grafana Prometheus Data Source + +I added Prometheus as a Grafana data source. + +Configuration + +Type: Prometheus + +URL: http://prometheus:9090 + +The data source test was successful and Grafana was able to query Prometheus metrics. + +## 7. Dashboard Walkthrough + +I created a custom metrics dashboard in Grafana. + +The dashboard includes at least 6 panels and focuses on the RED method. + +Panel 1 — Request Rate + +Type: Time series + +sum(rate(http_requests_total[5m])) by (endpoint) + +Purpose: Shows requests per second for each endpoint. + +Panel 2 — Error Rate + +Type: Time series + +sum(rate(http_requests_total{status=~"5.."}[5m])) + +Purpose: Shows the rate of server-side errors (5xx responses). + +Panel 3 — Requests per Status + +Type: Pie chart / Bar chart + +sum(rate(http_requests_total[5m])) by (status) + +Purpose: Visualizes the distribution of status codes. + +Panel 4 — p95 Latency + +Type: Time series + +histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le)) + +Purpose: Shows the 95th percentile request duration. + +Panel 5 — Active Requests + +Type: Gauge + +http_requests_in_progress + +Purpose: Shows how many requests are currently in progress. + +Panel 6 — Service Uptime + +Type: Stat + +up{job="app"} + +Purpose: Indicates whether the application target is up (1) or down (0). + +Optional extra panel — Endpoint Calls + +Type: Time series + +sum(rate(devops_info_endpoint_calls_total[5m])) by (endpoint) + +Purpose: Shows per-endpoint business metric usage. + +## 8. PromQL Examples + +Below are several PromQL queries I used during testing and dashboard creation. + +1. Check all targets +up +2. Request rate per endpoint +sum(rate(http_requests_total[5m])) by (endpoint) +3. Error rate +sum(rate(http_requests_total{status=~"5.."}[5m])) +4. p95 latency +histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le)) +5. Active requests +http_requests_in_progress +6. Status code distribution +sum(rate(http_requests_total[5m])) by (status) +7. Application-specific endpoint usage +sum(rate(devops_info_endpoint_calls_total[5m])) by (endpoint) +## 9. Production Configuration + +I also applied production-oriented settings to the monitoring stack. + +Health checks + +Health checks were configured for key services: + +Prometheus: http://localhost:9090/-/healthy + +Grafana: http://localhost:3000/api/health + +Loki: http://localhost:3100/ready + +App: http://localhost:5000/health + +This allows Docker to monitor service health and improves reliability. + +Resource limits + +Resource limits were added to prevent uncontrolled resource usage. + +Configured examples: + +Prometheus: 1G memory, 1 CPU + +Loki: 1G memory, 1 CPU + +Grafana: 512M memory, 0.5 CPU + +App: 256M memory, 0.5 CPU + +Data retention + +Prometheus retention was configured with: + +15d time retention + +10GB storage limit + +This helps control disk usage and improve query performance. + +Persistent volumes + +Persistent volumes were configured for: + +Prometheus data + +Loki data + +Grafana data + +This ensures dashboards and collected metrics survive restarts. + +## 10. Testing Results +Metrics endpoint + +The /metrics endpoint successfully returned: + +default Python/process metrics + +custom HTTP request metrics + +custom application-specific metrics + +Prometheus targets + +All targets were visible and UP in the Prometheus /targets page. + +Grafana dashboard + +The Grafana dashboard displayed live data after generating traffic with curl requests. + +Traffic generation used +for i in {1..50}; do curl http://localhost:8000/; done +for i in {1..50}; do curl http://localhost:8000/health; done + +This generated request counters and histogram observations, allowing the dashboard to display non-empty charts. + +## 11. Metrics vs Logs + +This lab builds on Lab 7. + +Logs are useful for: + +investigating specific events + +debugging failures + +analyzing detailed request context + +Metrics are useful for: + +trend analysis + +dashboards + +alerting + +performance and availability monitoring + +Combined value + +Logs explain what happened, while metrics show how much, how often, and how fast. Together they provide stronger observability. + +## 12. Challenges and Solutions +Challenge 1 — Duplicate metrics registration + +Initially, the app crashed due to duplicate Prometheus metric registration. This happened because uvicorn.run("app:app", ...) re-imported the module. + +Solution: +Changed startup to: + +uvicorn.run(app, host=HOST, port=PORT) + +This prevented double import and duplicate metric registration. + +Challenge 2 — Loki config mount issue + +At one point Loki failed because config.yml was accidentally created as a directory instead of a file. + +Solution: +Removed the directory, recreated config.yml as a proper file, and restarted the stack. + +Challenge 3 — Promtail config mount issue + +A similar mount issue occurred with Promtail. + +Solution: +Recreated monitoring/promtail/config.yml as a file and restarted the stack. + +Challenge 4 — Empty graphs in Grafana + +Initially some panels showed no data. + +Solution: +Generated traffic with repeated curl requests to populate the metrics. + +## 13. Conclusion + +In this lab, I successfully instrumented the FastAPI application with Prometheus metrics and deployed a complete monitoring stack with Prometheus and Grafana. + +The final solution includes: + +a working /metrics endpoint + +request counters, latency histograms, and active request gauges + +Prometheus scraping multiple services + +Grafana dashboards for live metric visualization + +production-related health checks, limits, retention, and persistence + +This lab completed the metrics side of observability and complemented the logging setup from Lab 7. diff --git a/monitoring/docs/screenshots/Dashboard.jpg b/monitoring/docs/screenshots/Dashboard.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0f54e61ab9a1c0238829d6e698abca4863fb27f7 GIT binary patch literal 62104 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 oOV literal 0 HcmV?d00001 diff --git a/monitoring/docs/screenshots/Prometheus.jpg b/monitoring/docs/screenshots/Prometheus.jpg new file mode 100644 index 0000000000000000000000000000000000000000..adb94515d2bb8997696758520958ef512dfb3ae1 GIT binary patch literal 65064 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 a_fE>l`+sHskCsE?)TJH8#n&c3Uj7fNnhALT literal 0 HcmV?d00001 diff --git a/monitoring/loki/config.yml b/monitoring/loki/config.yml new file mode 100644 index 0000000000..31fdabb621 --- /dev/null +++ b/monitoring/loki/config.yml @@ -0,0 +1,35 @@ +auth_enabled: false + +server: + http_listen_port: 3100 + +common: + path_prefix: /loki + replication_factor: 1 + ring: + kvstore: + store: inmemory + +schema_config: + configs: + - from: 2024-01-01 + store: tsdb + object_store: filesystem + schema: v13 + index: + prefix: index_ + period: 24h + +storage_config: + filesystem: + directory: /loki/chunks + +limits_config: + retention_period: 168h + allow_structured_metadata: false + +compactor: + working_directory: /loki/compactor + compaction_interval: 10m + retention_enabled: true + delete_request_store: filesystem diff --git a/monitoring/prometheus/prometheus.yml b/monitoring/prometheus/prometheus.yml new file mode 100644 index 0000000000..6e1ae9ff10 --- /dev/null +++ b/monitoring/prometheus/prometheus.yml @@ -0,0 +1,23 @@ +global: + scrape_interval: 15s + evaluation_interval: 15s + +scrape_configs: + - job_name: "prometheus" + static_configs: + - targets: ["localhost:9090"] + + - job_name: "app" + static_configs: + - targets: ["app-python:5000"] + metrics_path: /metrics + + - job_name: "loki" + static_configs: + - targets: ["loki:3100"] + metrics_path: /metrics + + - job_name: "grafana" + static_configs: + - targets: ["grafana:3000"] + metrics_path: /metrics diff --git a/monitoring/promtail/config.yml b/monitoring/promtail/config.yml new file mode 100644 index 0000000000..e54ed1473b --- /dev/null +++ b/monitoring/promtail/config.yml @@ -0,0 +1,33 @@ +server: + http_listen_port: 9080 + grpc_listen_port: 0 + +positions: + filename: /tmp/positions.yaml + +clients: + - url: http://loki:3100/loki/api/v1/push + +scrape_configs: + - job_name: docker + docker_sd_configs: + - host: unix:///var/run/docker.sock + refresh_interval: 5s + + relabel_configs: + - source_labels: ['__meta_docker_container_name'] + regex: '/(.*)' + target_label: 'container' + + - source_labels: ['__meta_docker_container_label_logging'] + regex: 'promtail' + action: keep + + - source_labels: ['__meta_docker_container_label_app'] + target_label: 'app' + + - source_labels: ['__meta_docker_container_label_service_name'] + target_label: 'service_name' + + - target_label: 'job' + replacement: 'docker'