显然,利用kube-prometheus-stack对AI的公开样本进行监视
首先
根据上次的实验,显然 AI 在 Kubernetes 上进行了公开样本的执行。这次继续进行实验,尝试使用 kube-prometheus-stack 监控其结果。
我在prometheus/grafana中使用kube-prometheus-stack这个开源软件来监控通过prometheus-community提供的Kubernetes资源,并且它还预先定义了许多用于可视化的专用仪表板。在这些仪表板中,我考虑是否可以同时监控Evidently AI的公开样本指标。
系统环境
-
- PC: Windows 11
-
- WSL2: Ubuntu 20.04
-
- Docker 20.10.17
-
- Python 3.8.10
-
- Amazon Elastic Container Registry (ECR)
AWS CLIがインストールされていることが必要です。
这次我们使用ECR作为Kubernetes获取Docker映像的注册表,但是您可以使用另一个容器注册表来替代它。
建造步骤
作为前提,需要确保 Evidently AI 公开示例已在 Kubernetes 上进行了全面的执行。
1. 环境准备就绪。
首先,启动minikube。
# minikubeの起動
minikube start --kubernetes-version=v1.23.2 --memory=6g \
--bootstrapper=kubeadm \
--extra-config=kubelet.authentication-token-webhook=true \
--extra-config=kubelet.authorization-mode=Webhook \
--extra-config=scheduler.bind-address=0.0.0.0 \
--extra-config=controller-manager.bind-address=0.0.0.0
# 認証情報の設定(新規にminikubeクラスタを作成した場合)
# ECRにアクセスするために設定します。対話形式でAWSの認証情報を入力します。
minikube addons configure registry-creds
#----- 対話形式での入力(ここから) -----
Do you want to enable AWS Elastic Container Registry? [y/n]: y
-- Enter AWS Access Key ID: <アクセスキーID>
-- Enter AWS Secret Access Key: <シークレットキー>
-- (Optional) Enter AWS Session Token: <空のままEnter>
-- Enter AWS Region: <リージョン名>
-- Enter 12 digit AWS Account ID (Comma separated list): <AWSアカウントID>
-- (Optional) Enter ARN of AWS role to assume: <空のままEnter>
# これ以降の質問はすべて"n"を入力
#----- 対話形式での入力(ここまで) -----
# 認証設定の有効化
minikube addons enable registry-creds
接下来,我们要安装kube-prometheus-stack。安装需要使用helm,而helm则使用asdf来进行准备。
# helmのインストール
# 安定版の最新バージョンをインストールする
asdf plugin-add helm
asdf list-all helm
asdf install helm 3.9.0
asdf global helm 3.9.0
# Helmリポジトリ情報の取得
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
# kube-prometheus-stackのインストール
helm upgrade kube-prometheus-stack prometheus-community/kube-prometheus-stack \
--install --version 35.2.0 \
--namespace prometheus --create-namespace \
--set grafana.ingress.enabled=true \
--set grafana.ingress.ingressClassName=nginx \
--wait
2. 添加 kube-prometheus-stack 的 ServiceMonitor
为了从AI监控中计算的指标中读取,kube-prometheus-stack需要设置一个名为ServiceMonitor的自定义资源。因此,需要创建一个用于这个目的的清单文件。
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: ai-monitor-clusterip
namespace: default
labels:
release: kube-prometheus-stack
spec:
endpoints:
- path: /metrics
targetPort: 8085
interval: 10s
selector:
matchLabels:
app: ai-monitor-clusterip
- ai-monitorのアプリはPrometheus向けに/metricsのパスでメトリクスを取得できる口を設定しています。
3. 生成各种Kubernetes资源
生成Kubernetes资源。要执行以下命令,需要在Kubernetes上运行Evidently AI公开示例,执行步骤包括“3. 构建AI监控的Docker镜像并推送到ECR”和“4. 创建Kubernetes清单文件”。
# ai-monitorのリソース生成
kubectl apply -f manifests/depsvc_ai-monitor.yaml
# ServiceMonitorの生成
kubectl apply -f manifests/servicemonitor_ai-monitor.yaml
4. 进行端口转发
我们将进行端口转发,以便从Minikube的外部进行访问。
# prometheusのポートフォワード(バックグラウンド実行)
kubectl --namespace prometheus port-forward svc/kube-prometheus-stack-prometheus --address 0.0.0.0 9090:9090 >/dev/null &
# grafanaのポートフォワード(バックグラウンド実行)
kubectl --namespace prometheus port-forward svc/kube-prometheus-stack-grafana --address 0.0.0.0 3000:80 >/dev/null &
# ai-monitorのポートフォワード(バックグラウンド実行)
kubectl port-forward svc/ai-monitor-clusterip --address 0.0.0.0 8085 >/dev/null &
5. 发送数据并确认仪表板
从客户端发送数据,并在Grafana仪表盘上确认结果。
# Evidently AIサンプルのフォルダに移動
cd evidently/examples/integrations/grafana_monitoring_service
# データ送信のClient App実行
# これを実行すると2秒間隔で連続的にデータ送信する処理が約20分間動きます。
python scripts/example_run_request.py
一旦数据发送开始后,访问Grafana仪表板的网址 http//localhost:3000。
在kube-prometheus-stack中,Grafana的管理员用户密码是通过Kubernetes的Secret进行单独设置的。可以用以下命令确认密码。
# grafanaのadminユーザのパスワード確認
kubectl get secret kube-prometheus-stack-grafana -n prometheus \
-o jsonpath='{.data.admin-password}' | base64 --decode; echo
在登录 Grafana 后,从菜单中选择 Create > Import。
请将位于这里的json文件粘贴到evidently/examples/integrations/grafana_monitoring_service/dashboards文件夹中,并加载它。
在此过程中,请删除json文件中的UID部分的描述(可能有多个地方)。
"datasource": {
"type": "prometheus",
"uid": "PBFA97CFB590B2093" ← この部分を削除。複数個所あるのでそれぞれ削除します。
},
完成和刪除步驟
我们将对此次创建的资源进行结束和删除,具体操作如下。
# ポートフォワードの終了
# job番号は実際の数値に変更してください
jobs
kill %1
kill %2
kill %3
# kubernetesリソースの削除
cd ~
kubectl delete -f manifests/depsvc_ai-monitor.yaml \
-f manifests/servicemonitor_ai-monitor.yaml
# kube-prometheus-stackのアンインストール
helm uninstall kube-prometheus-stack -n prometheus
# minikubeの停止
minikube stop
最后
kube-prometheus-stack的安装即可立即使用,非常方便。只需添加ServiceMonitor即可获取应用程序的指标,因此可以同时进行基础设施监控和应用程序监控,非常好。