Skip to content

Commit

Permalink
rename model-monitoring to all-monitoring
Browse files Browse the repository at this point in the history
  • Loading branch information
camila-buzzni committed Apr 21, 2024
1 parent 5f1c5fd commit c963c9b
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 53 deletions.
8 changes: 7 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@

- Tool: [BentoML](https://www.bentoml.com/), [NVIDIA Triton](https://developer.nvidia.com/ko-kr/nvidia-triton-inference-server), GCP VertexAI, AWS Sagemaker

### [Model Monitoring](./model-monitoring/README.md)
### [Model Monitoring](./all-monitoring/README.md)

### [Feature Store]

Expand Down Expand Up @@ -169,6 +169,12 @@ Related Engineering: [Model monitoring](#)

-

## MLOps pipeline practice

### [금융 이상 탐지 수행을 위한 MLOps 파이프라인 구축](./mlops-pipeline1-finance/README.md)

- Tools: Airflow, BentoML, GitLab CI/CD,

## Quick Start

1. make conda virtual evn
Expand Down
108 changes: 56 additions & 52 deletions model-monitoring/README.md → all-monitoring/README.md
Original file line number Diff line number Diff line change
@@ -1,34 +1,38 @@
# 1. Prerequisites
# All About Monitoring

- k8s 환경
- minikube v1.22.0
- helm binary
- helm v3
## MLOps에서 Monitoring할 것들

1. Model 성능 측정/수집
2. ML pipeline 성능 측정/수집
3. Model serving 성능 측정/수집
4. 시계열 대시보드 구성

---
## Related Tools

: Airflow, MLflow, Grafana, Prometheus..

# 2. Prometheus
### 1. Prometheus

[Prometheus](https://github.com/prometheus)

> Prometheus is a free software application used for event monitoring and alerting
- Wikipedia
>
>
- 2012 년 SoundCloud 에서 만든 모니터링 & 알람 프로그램
- 2016 년 CNCF 에 Joined, 2018 년 Graduated 하여 완전 독립형 오픈소스 프로젝트로 발전
- 쿠버네티스에 종속적이지 않고, binary 혹은 docker container 형태로도 사용하고 배포 가능
- 쿠버네티스 생태계의 오픈소스 중에서는 사실상의 표준
- 구조가 쿠버네티스와 궁합이 맞고, 다양한 플러그인이 오픈소스로 제공
- 구조가 쿠버네티스와 궁합이 맞고, 다양한 플러그인이 오픈소스로 제공

### 특징

- 수집하는 Metric 데이터를 다차원의 시계열 데이터 형태로 저장
- 데이터 분석을 위한 자체 쿼리 언어인 PromQL 지원
- 시계열 데이터 저장에 적합한 TimeSeries DB 지원
- **데이터 수집하는 방식이 Pull 방식**
- **모니터링 대상의 Agent 가 Server 로 Metric을 보내는 Push 방식이 아닌, Server 가 직접 정보를 가져가는 Pull 방식**
- 하지만 Pull방식에도 단점, 한계가 있기 때문에 추가로 Push 방식을 위한 Push Gateway 도 지원
- **모니터링 대상의 Agent 가 Server 로 Metric을 보내는 Push 방식이 아닌, Server 가 직접 정보를 가져가는 Pull 방식**
- 하지만 Pull방식에도 단점, 한계가 있기 때문에 추가로 Push 방식을 위한 Push Gateway 도 지원
- Grafana와 같은 다양한 시각화 툴과의 연동 지원
- Slack등으로 alert를 보내는 등의 다양한 방식의 Alarming 지원

Expand All @@ -39,101 +43,102 @@
[https://prometheus.io/docs/introduction/overview/](https://prometheus.io/docs/introduction/overview/)

- **Prometheus Server**
- Pull 방식으로 시계열 데이터를 수집하고 TSDB에 저장
- pull 주기인 metrics 수집 주기를 설치 시 정할 수 있으며 default 는 15초
- Pull 방식으로 시계열 데이터를 수집하고 TSDB에 저장
- pull 주기인 metrics 수집 주기를 설치 시 정할 수 있으며 default 는 15초
- **Service Discovery**
- Monitoring 대상 리스트를 조회
- 사용자는 쿠버네티스에 등록하고, Prometheus Server 는 쿠버네티스 API Server 에게 모니터링 대상을 물어보는 형태
- Monitoring 대상 리스트를 조회
- 사용자는 쿠버네티스에 등록하고, Prometheus Server 는 쿠버네티스 API Server 에게 모니터링 대상을 물어보는 형태
- **Exporter**
- Prometheus 가 metrics 을 수집해갈 수 있도록 정해진 HTTP Endpoint 를 제공하여 정해진 형태로 metrics 를 Export
- Prometheus Server 가 이 Exporter 의 Endpoint 로 HTTP GET Request 를 보내 metrics 를 Pull 하여 저장한다.
- 하지만, 이런 pull 방식은 수집 주기(아래 Pushgateway설명에도 나와있듯이)와 네트워크 단절 등의 이유로 모든 Metrics 데이터를 수집하는 것을 보장할 수 없기 때문에 Push 방식을 위한 Pushgateway 제공
- Prometheus 가 metrics 을 수집해갈 수 있도록 정해진 HTTP Endpoint 를 제공하여 정해진 형태로 metrics 를 Export
- Prometheus Server 가 이 Exporter 의 Endpoint 로 HTTP GET Request 를 보내 metrics 를 Pull 하여 저장한다.
- 하지만, 이런 pull 방식은 수집 주기(아래 Pushgateway설명에도 나와있듯이)와 네트워크 단절 등의 이유로 모든 Metrics 데이터를 수집하는 것을 보장할 수 없기 때문에 Push 방식을 위한 Pushgateway 제공
- **Pushgateway**
- 보통 Prometheus Server 의 pull 주기(period) 보다 짧은 lifecycle 을 지닌 작업의 metrics 수집 보장을 위함
- 보통 Prometheus Server 의 pull 주기(period) 보다 짧은 lifecycle 을 지닌 작업의 metrics 수집 보장을 위함
- **AlertManager**
- PromQL 을 사용해 특정 조건문을 만들고, 해당 조건문이 만족되면 정해진 방식으로 정해진 메시지를 보낼 수 있음
- ex) service A 가 5분간 응답이 없으면, 관리자에게 slack DM 과 e-mail 을 보낸다.
- PromQL 을 사용해 특정 조건문을 만들고, 해당 조건문이 만족되면 정해진 방식으로 정해진 메시지를 보낼 수 있음
- ex) service A 가 5분간 응답이 없으면, 관리자에게 slack DM 과 e-mail 을 보낸다.
- **Grafana**
- Prometheus 와 항상 함께 연동되는 시각화 툴
- Prometheus 자체 UI 도 있고, API 제공을 하기에 직접 시각화 대시보드를 구성할 수도 있지만 Grafana가 너무 잘 되어있어서, Grafana가 Prometheus server로 PromQL로 쿼리를 날려 그 결과를 바탕으로 시각화 해준다고 생각하면 된다.
- Prometheus 와 항상 함께 연동되는 시각화 툴
- Prometheus 자체 UI 도 있고, API 제공을 하기에 직접 시각화 대시보드를 구성할 수도 있지만 Grafana가 너무 잘 되어있어서, Grafana가 Prometheus server로 PromQL로 쿼리를 날려 그 결과를 바탕으로 시각화 해준다고 생각하면 된다.
- **PromQL**
- Prometheus 가 저장한 데이터 중 원하는 정보만 가져오기 위한 Query Language 제공
- Time Series Data 이며, Multi-Dimensional Data 이기 때문에 처음 보면 다소 복잡할 수 있으나 Prometheus 및 Grafana 를 잘 사용하기 위해서는 어느 정도 익혀두어야 함

- Prometheus 가 저장한 데이터 중 원하는 정보만 가져오기 위한 Query Language 제공
- Time Series Data 이며, Multi-Dimensional Data 이기 때문에 처음 보면 다소 복잡할 수 있으나 Prometheus 및 Grafana 를 잘 사용하기 위해서는 어느 정도 익혀두어야 함
[Querying basics | Prometheus](https://prometheus.io/docs/prometheus/latest/querying/basics/)


### 단점

- Scalability, High Availability 보장이 어렵다.
- Prometheus Sever 가 Single node 로 운영되어야 하기 때문에 발생하는 문제
- ⇒ Thanos 라는 오픈소스를 활용해 multi prometheus server 를 운영하는 것으로 해결하고자 함.

[Thanos](https://thanos.io/)

- Scalability, High Availability 보장이 어렵다.
- Prometheus Sever 가 Single node 로 운영되어야 하기 때문에 발생하는 문제
- ⇒ Thanos 라는 오픈소스를 활용해 multi prometheus server 를 운영하는 것으로 해결하고자 함.
[Thanos](https://thanos.io/)

---

# 3. Grafana
### 2. Grafana

[GitHub - grafana/grafana: The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.](https://github.com/grafana/grafana)

> The open and composable observability and data visualization platform.
- grafana
>
>
- 2014 년 릴리즈된 프로젝트로 처음에는 InfluxDB, Prometheus 와 같은 TimeSeriesDB 전용 시각화 툴로 개발되었으나 이후 MySQL, PostgreSQL 과 같은 RDB 도 지원
- 현재는 Grafana Labs 회사에서 관리하고 있으며, 실습을 진행할 Open Source Project 인 **Grafana** 외에도 상용 서비스인 **Grafana Cloud**, **Grafana Enterprise** 제품 존재
- 상용 서비스는 추가 기능을 제공하는 것뿐만 아니라 설치 및 운영 등의 기술 지원까지 포함
- 상용 서비스는 추가 기능을 제공하는 것뿐만 아니라 설치 및 운영 등의 기술 지원까지 포함
- playground 페이지도 제공하여 설치를 반드시 하지 않아도, 쉽고 간편하게 Grafana Dashboard 를 사용해볼 수 있음

[Grafana](http://play.grafana.org)

### 특징

- 마찬가지로 쿠버네티스에 종속적이지는 않고 docker 로 쉽게 설치할 수는 있지만, 여러 Datasource 와의 연동성이 뛰어나고 특히 Prometheus 와의 연동이 뛰어나 함께 발전
- 다양한 외부 Plugins
[Grafana Plugins - extend and customize your Grafana](https://grafana.com/grafana/plugins/)
[Grafana Plugins - extend and customize your Grafana](https://grafana.com/grafana/plugins/)

- 다양한 Grafana Dashboard: 사용자가 dashboard가 커스터마이징 가능한데, 이를 공유하고/받기도 하는데, dashboard ID를 통해서 해당 dashboard를 쉽게 import 가능.
[Dashboards](https://grafana.com/grafana/dashboards/)
- 다양한 Grafana Dashboard: 사용자가 dashboard가 커스터마이징 가능한데, 이를 공유하고/받기도 하는데, dashboard ID를 통해서 해당 dashboard를 쉽게 import 가능.
[Dashboards](https://grafana.com/grafana/dashboards/)

### Grafana Dashboard 모범 사례

- 수많은 Metric 중 모니터링해야할 대상을 정하고 어떤 방식으로 시각화할 것인지에 대한 정답은 없습니다. (Task 마다 달라지는 요구사항)
- 다만, Google 에서 제시한 전통 SW 모니터링을 위한 4 가지 황금 지표는 다음과 같음
- Latency
- 사용자가 요청 후 응답을 받기까지 걸리는 시간
- Traffic
- 시스템이 처리해야 하는 총 부하
- Errors
- 사용자의 요청 중 실패한 비율
- Saturation
- 시스템의 포화 상태
- Latency
- 사용자가 요청 후 응답을 받기까지 걸리는 시간
- Traffic
- 시스템이 처리해야 하는 총 부하
- Errors
- 사용자의 요청 중 실패한 비율
- Saturation
- 시스템의 포화 상태
- ML 기반의 서비스를 모니터링할 때도 위 4가지 지표를 염두에 두고 대시보드를 구성하는 것을 권장
- 다만 처음 시작할 때는 위의 다양한 오픈소스 대시보드 중 하나를 import 하는 것부터 시작

- 다만 처음 시작할 때는 위의 다양한 오픈소스 대시보드 중 하나를 import 하는 것부터 시작

# 4. How to Install

### 1) minikube

see https://minikube.sigs.k8s.io/docs/start/

```bash
brew install minikube
minikube start --driver=docker --cpus='4' --memory='4g'
```

### 2) helm

see https://d8devs.com/helm-cli-installation-on-apple-m1/

```bash
curl -O https://get.helm.sh/helm-v3.6.3-darwin-arm64.tar.gz
tar -zxvf helm-v3.6.3-darwin-arm64.tar.gz
tar -zxvf helm-v3.6.3-darwin-arm64.tar.gz
sudo mv darwin-arm64/helm /usr/local/bin/helm
```

### 3) kube-prometheus-stack Helm Repo 추가

- see [https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack)
- Prometheus, Grafana 등을 k8s 에 쉽게 설치하고 사용할 수 있도록 패키징된 Helm 차트
- **버전 : kube-prometheus-stack-19.0.2**
- **버전 : kube-prometheus-stack-19.0.2**

```bash
# helm repo 추가
Expand All @@ -160,4 +165,3 @@ kubectl get po -n default -w
kubectl get pod -w
kubectl get svc
```

1 comment on commit c963c9b

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MODEL METRICS

Training variance explained: 33.0%
Test variance explained: 32.0%

Data viz

feature_importance
residuals

Please sign in to comment.