发布于 2026-01-06 0 阅读
0

使用 Prometheus 和 Grafana 监控 AKS

使用 Prometheus 和 Grafana 监控 AKS

部署任何类型的 Kubernetes 环境时,甚至在部署之前,就应该考虑制定监控和可观测性计划。这样,一旦环境中出现任何问题,您都能全面了解情况,并能以自动化、可重复的方式采取相应措施,必要时还可以手动操作。

在这篇博文中,您将学习如何在 Azure Kubernetes 服务 (AKS) 上设置两种最流行的监控和可观测性工具。

为什么需要监控和可观测性?

首先,我们来谈谈监控和可观测性之间的区别。监控是指您可以实时或根据工具/平台允许的时间范围来查看环境中正在发生的事情。您通常还可以根据监控阈值创建警报。例如,如果 CPU 使用率超过 90% 并持续五分钟。

可观测性的核心在于利用从环境中采集的数据采取行动。它分析日志、指标和追踪信息。例如,/metrics如果 Kubernetes 集群启用了 API,就可以采集数据。然后,如果日志、指标或追踪信息中出现异常,可观测性工具就可以采取行动。这些行动可以是像监控工具那样发出警报,也可以是采取自动化的方式。例如,如果三个工作节点几乎满负荷运转,可观测性工具可以检测到这一点,并自动扩展到四个节点,而无需您进行任何手动干预。

简而言之,监控是指实时查看数据,而可观测性是指在不必实时查看数据的情况下根据数据采取行动。

指标服务器

使用可观测性工具从 Kubernetes 收集指标时,需要注意的一点是确保指标服务器正在运行。默认情况下,指标服务器可能并未运行。例如,本地部署的 Kubernetes 集群可能需要手动启用它。而在 AKS 中,指标服务器默认开启,因此您无需担心。

设置 AKS

要部署 AKS 集群,您可以使用以下几种方法:

  • 通过门户网站(手动)
  • 一种基础设施即代码工具(自动化)

如果您没有 AKS 集群,可以使用此处的代码:https://github.com/AdminTurnedDevOps/Kubernetes-Quickstart-Environments/tree/main/azure/aks

上述 GitHub 仓库中的代码是用于创建 AKS 集群的 Terraform 配置。

如果您没有使用过 Terraform 并且不熟悉它,您可以使用 Azure UI 或其他自动化方法在 AKS 服务下创建 AKS 集群。

一旦您的 AKS 环境启动并运行,请确保使用以下命令连接到它,该命令会在本地启动 Kubeconfig,以便您可以在终端上访问 AKS 集群。

az aks get-credentials -n name_of_k8s_cluster -g resource_group_name 
Enter fullscreen mode Exit fullscreen mode

设置 Grafana 和 Prometheus

现在集群已经启动并运行,接下来需要安装 Grafana 和 Prometheus。安装方法有很多种,包括分别安装 Grafana 和 Prometheus,以及将它们安装在不同的服务器上,也可以使用适用于 Kubernetes 的 Prometheus-Operator。

在这种情况下,您将使用一种流行的方法,即 prometheus-community Helm Chart。

如果您还没有安装 Helm,可以从这里安装:https://helm.sh/docs/intro/install/

💡 我有一个关于 Helm 的在线培训课程,如果你有兴趣可以看看:https://www.oreilly.com/live-events/helm-charts-with-kubernetes/0636920074683/0636920074682/

首先,添加 Prometheus 和 Grafana 的 Helm 仓库。

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts

Enter fullscreen mode Exit fullscreen mode

接下来,请确保代码库是最新的。

helm repo update

Enter fullscreen mode Exit fullscreen mode

最后一步是在名为 的新命名空间中安装 Helm Chart monitoring

helm install prometheus \
  prometheus-community/kube-prometheus-stack \
  --namespace monitoring \
  --create-namespace
Enter fullscreen mode Exit fullscreen mode

你应该会看到类似下图的输出结果。

您可以通过运行以下命令来检查堆栈是否已部署。

kubectl get all -n monitoring
Enter fullscreen mode Exit fullscreen mode

你应该看到以下输出。

NAME                                                         READY   STATUS    RESTARTS      AGE
pod/alertmanager-prometheus-kube-prometheus-alertmanager-0   2/2     Running   1 (39s ago)   71s
pod/prometheus-grafana-5fcf8745df-lnnn7                      3/3     Running   0             98s
pod/prometheus-kube-prometheus-operator-78fdf6678c-xwxm9     1/1     Running   0             98s
pod/prometheus-kube-state-metrics-65997fd766-tbkdm           1/1     Running   0             98s
pod/prometheus-prometheus-kube-prometheus-prometheus-0       2/2     Running   0             70s
pod/prometheus-prometheus-node-exporter-tbmm6                1/1     Running   0             98s

NAME                                              TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
service/alertmanager-operated                     ClusterIP   None           <none>        9093/TCP,9094/TCP,9094/UDP   71s
service/prometheus-grafana                        ClusterIP   10.0.44.237    <none>        80/TCP                       98s
service/prometheus-kube-prometheus-alertmanager   ClusterIP   10.0.242.19    <none>        9093/TCP                     98s
service/prometheus-kube-prometheus-operator       ClusterIP   10.0.84.154    <none>        443/TCP                      98s
service/prometheus-kube-prometheus-prometheus     ClusterIP   10.0.237.68    <none>        9090/TCP                     98s
service/prometheus-kube-state-metrics             ClusterIP   10.0.120.173   <none>        8080/TCP                     98s
service/prometheus-operated                       ClusterIP   None           <none>        9090/TCP                     70s
service/prometheus-prometheus-node-exporter       ClusterIP   10.0.182.255   <none>        9100/TCP                     98s

NAME                                                 DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/prometheus-prometheus-node-exporter   1         1         1       1            1           <none>          98s

NAME                                                  READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/prometheus-grafana                    1/1     1            1           98s
deployment.apps/prometheus-kube-prometheus-operator   1/1     1            1           98s
deployment.apps/prometheus-kube-state-metrics         1/1     1            1           98s

NAME                                                             DESIRED   CURRENT   READY   AGE
replicaset.apps/prometheus-grafana-5fcf8745df                    1         1         1       98s
replicaset.apps/prometheus-kube-prometheus-operator-78fdf6678c   1         1         1       98s
replicaset.apps/prometheus-kube-state-metrics-65997fd766         1         1         1       98s

NAME                                                                    READY   AGE
statefulset.apps/alertmanager-prometheus-kube-prometheus-alertmanager   1/1     71s
statefulset.apps/prometheus-prometheus-kube-prometheus-prometheus       1/1     70s
Enter fullscreen mode Exit fullscreen mode

登录 Grafana 和 Prometheus

Helm Chart 的功能之一是为 Grafana 和 Prometheus 创建 Kubernetes 服务。要访问它们,您需要在两个不同的终端中运行以下命令。

首先,揭露 Grafana。

kubectl port-forward svc/prometheus-grafana -n monitoring 4000:80

Grafana 的默认用户名/密码是 admin/prom-operator。

接下来,揭露普罗米修斯的真面目。

kubectl port-forward svc/prometheus-kube-prometheus-prometheus -n monitoring 4001:9090

一旦你能够访问这两个用户界面,点击看起来像四个方块的图标,进入 Grafana 控制面板。

接下来,点击 Pods 的仪表盘。

将命名空间更改为kube-system,您将看到在该命名空间中运行的所有 Pod。

部署应用程序

如上图所示,Grafana 显示的是开箱即​​用的 Pod 已被成功摄取数据,但未来部署的 Pod 呢?让我们来看看如何确认这一点。

部署以下 Kubernetes 清单,它将部署一个无状态的 Nginx Web 应用程序。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginxdeployment
  replicas: 2
  template:
    metadata:
      labels:
        app: nginxdeployment
    spec:
      containers:
      - name: nginxdeployment
        image: nginx:latest
        ports:
        - containerPort: 80
Enter fullscreen mode Exit fullscreen mode

接下来,返回到上一节中打开的 Pods 控制面板,但现在将命名空间更改为default.

几秒钟后,您会看到两个 Nginx Pod 出现。

恭喜!您已成功配置 Prometheus 和 Grafana。您还学习了如何通过确认 Pod 正在运行,来利用 Prometheus 指标确认应用数据导入是否正常工作。

文章来源:https://dev.to/thenjdevopsguy/monitoring-aks-with-prometheus-and-grafana-9o8