Prometheus 指标 - Amazon EKS

Prometheus 指标

Prometheus 是一个用于抓取端点的监控和时间序列数据库。提供查询、聚合和存储收集的数据的功能。您还可以将其用于警报和警报聚合。本主题介绍了如何将 Prometheus 设置为托管或开源选项。一个常见用例为监控 Amazon EKS 控制面板指标。

Amazon Managed Service for Prometheus 是一项与 Prometheus 兼容的监控和警报服务,可以轻松实现对容器化应用程序和基础设施的大规模监控。这是一项完全托管的服务,可自动扩展指标的提取、存储、查询和警报。这项服务还集成了 AWS 安全服务,可以快速安全地访问您的数据。您可以使用开源 ProMQL 查询语言来查询指标并发出警报。

有关开启指标后如何使用 Prometheus 指标的详细信息,请参阅 《Amazon Managed Service for Prometheus 用户指南》

创建集群时开启 Prometheus 指标

重要

适用于 Prometheus 的 Amazon 托管服务资源不在集群生命周期内,需要独立于集群进行维护。删除集群时,请务必同时删除所有适用的抓取器以停止适用的费用。有关更多信息,请参阅《Amazon Managed Service for Prometheus 用户指南》中的查找和删除抓取程序

创建新集群时,您可以开启向 Prometheus 发送指标的选项。在 AWS Management Console 中,此选项位于创建新集群的配置可观测性步骤中。有关更多信息,请参阅 创建 Amazon EKS 集群

Prometheus 通过一个名为抓取的拉取模型从集群中发现和收集指标。设置抓取程序以从您的集群基础设施和容器化应用程序中收集数据。

当您开启发送 Prometheus 指标的选项时,Amazon Managed Service for Prometheus 会提供一个完全托管的无代理抓取程序。使用以下高级配置选项,根据需要自定义默认抓取程序。

抓取程序别名

(可选)输入抓取程序的唯一别名。

目标位置

选择 Amazon Managed Service for Prometheus 工作区。工作区是专用于存储和查询 Prometheus 指标的逻辑空间。借助此工作区,您将能够查看有权访问该工作区账户的 Prometheus 指标。创建新工作区选项指示 Amazon EKS 使用您提供的工作区别名,来代表您创建工作区。您可以使用选择现有工作区选项,从下拉列表中选择一个现有工作区。有关工作区的更多信息,请参阅《Amazon Managed Service for Prometheus 用户指南》中的管理工作区

服务访问

本节总结了您在发送 Prometheus 指标时授予的权限:

  • 允许 Amazon Managed Service for Prometheus 描述抓取的 Amazon EKS 集群

  • 允许远程写入 Amazon Managed Prometheus 工作区

如果 AmazonManagedScraperRole 已存在,抓取程序会进行使用。选择 AmazonManagedScraperRole 链接以查看权限详细信息。如果 AmazonManagedScraperRole 尚不存在,请选择查看权限详细信息链接,以查看您通过发送 Prometheus 指标授予的特定权限。

子网

查看抓取程序将继承的子网。如果需要进行更改,请返回创建集群指定网络步骤。

安全组

查看抓取程序将继承的安全组。如果需要进行更改,请返回创建集群指定网络步骤。

抓取程序配置

根据需要修改 YAML 格式的抓取程序进行配置。为此,请使用表单或上传替换的 YAML 文件。有关更多信息,请参阅《Amazon Managed Service for Prometheus 用户指南》中的抓取程序配置

Amazon Managed Service for Prometheus 指的是与集群一起创建的无代理抓取程序,作为 AWS 托管的收集器。有关 AWS 托管的收集器的更多信息,请参阅《Amazon Managed Service for Prometheus 用户指南》中的 AWS 托管的收集器

重要

您必须设置 aws-auth ConfigMap 才能向抓取程序提供集群内权限。有关更多信息,请参阅《Amazon Managed Service for Prometheus 用户指南》中的配置您的 Amazon EKS 集群

查看 Prometheus 抓取程序详情

在创建集群并开启 Prometheus 指标选项的情况下,您可以查看 Prometheus 抓取程序详细信息。在 AWS Management Console 中查看集群时,请选择可观测性选项卡。一个显示集群抓取程序列表的表格,包括抓取程序 ID、别名、状态和创建日期等信息。

要查看有关抓取程序的更多详细信息,请选择抓取程序 ID 链接。例如,您可以查看抓取程序配置、Amazon 资源名称(ARN)、远程写入 URL 和网络信息。您可以使用抓取程序 ID 作为 Amazon Managed Service for Prometheus API 操作的输入,例如 DescribeScraperDeleteScraper。您还可以使用 API 创建更多抓取程序。

有关使用 Prometheus API 的更多信息,请参阅 Amazon Managed Service for Prometheus API 参考

使用 Helm 部署 Prometheus

或者,您可以使用 Helm V3 将 Prometheus 部署到您的集群。如果您已经安装 Helm,可以使用 helm version 命令检查您的版本。Helm 是 Kubernetes 集群的包管理器。有关 Helm 以及如何安装的更多信息,请参阅 将 Helm 与 Amazon EKS 结合使用

在为您的 Amazon EKS 集群配置 Helm 后,您可以使用其通过以下步骤来部署 Prometheus。

要使用 Helm 部署 Prometheus
  1. 创建 Prometheus 命名空间。

    kubectl create namespace prometheus
  2. 添加 prometheus-community 图表存储库。

    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
  3. 部署 Prometheus。

    helm upgrade -i prometheus prometheus-community/prometheus \ --namespace prometheus \ --set alertmanager.persistentVolume.storageClass="gp2",server.persistentVolume.storageClass="gp2"
    注意

    如果您在执行此命令时收到错误 Error: failed to download "stable/prometheus" (hint: running `helm repo update` may help),请运行 helm repo update prometheus-community,然后尝试再次运行第 2 步命令。

    如果您收到错误 Error: rendered manifests contain a resource that already exists,请运行 helm uninstall your-release-name -n namespace,然后尝试再次运行第 3 步命令。

  4. 确认 prometheus 命名空间中的所有 Pods 均处于 READY 状态。

    kubectl get pods -n prometheus

    示例输出如下。

    NAME READY STATUS RESTARTS AGE prometheus-alertmanager-59b4c8c744-r7bgp 1/2 Running 0 48s prometheus-kube-state-metrics-7cfd87cf99-jkz2f 1/1 Running 0 48s prometheus-node-exporter-jcjqz 1/1 Running 0 48s prometheus-node-exporter-jxv2h 1/1 Running 0 48s prometheus-node-exporter-vbdks 1/1 Running 0 48s prometheus-pushgateway-76c444b68c-82tnw 1/1 Running 0 48s prometheus-server-775957f748-mmht9 1/2 Running 0 48s
  5. 使用 kubectl 将 Prometheus 控制台端口转发到本地计算机。

    kubectl --namespace=prometheus port-forward deploy/prometheus-server 9090
  6. 将 Web 浏览器指向 http://localhost:9090 来查看 Prometheus 控制台。

  7. - insert metric at cursor (- 在光标位置插入指标) 菜单选择一个指标,然后选择 Execute (执行)。选择 Graph (图表) 选项卡显示一段时间内的指标。下图显示了一段时间内的 container_memory_usage_bytes

    Prometheus 指标
  8. 在顶部导航栏中,选择 Status (状态),然后选择 Targets (目标)

    Prometheus 控制台

    显示使用服务发现连接到 Prometheus 的所有 Kubernetes 端点。

查看控制面板原始指标

作为部署 Prometheus 的替代方案,Kubernetes API 服务器公开了许多以 Prometheus 格式表示的指标。这些指标对于监控和分析非常有用。这些指标通过引用 /metrics HTTP API 的指标端点在内部公开。与其他端点一样,此端点在 Amazon EKS 控制层面上公开。此端点主要用于查看特定指标。要分析一段时间内的指标,我们建议部署 Prometheus。

要查看原始指标输出,请使用带有 --raw 标志的 kubectl。此命令允许您传递任何 HTTP 路径,并返回原始响应。

kubectl get --raw /metrics

示例输出如下。

[...]
# HELP rest_client_requests_total Number of HTTP requests, partitioned by status code, method, and host.
# TYPE rest_client_requests_total counter
rest_client_requests_total{code="200",host="127.0.0.1:21362",method="POST"} 4994
rest_client_requests_total{code="200",host="127.0.0.1:443",method="DELETE"} 1
rest_client_requests_total{code="200",host="127.0.0.1:443",method="GET"} 1.326086e+06
rest_client_requests_total{code="200",host="127.0.0.1:443",method="PUT"} 862173
rest_client_requests_total{code="404",host="127.0.0.1:443",method="GET"} 2
rest_client_requests_total{code="409",host="127.0.0.1:443",method="POST"} 3
rest_client_requests_total{code="409",host="127.0.0.1:443",method="PUT"} 8
# HELP ssh_tunnel_open_count Counter of ssh tunnel total open attempts
# TYPE ssh_tunnel_open_count counter
ssh_tunnel_open_count 0
# HELP ssh_tunnel_open_fail_count Counter of ssh tunnel failed open attempts
# TYPE ssh_tunnel_open_fail_count counter
ssh_tunnel_open_fail_count 0

此原始输出逐字返回 API 服务器公开的内容。不同的指标按行列出,每行都包含指标名称、标签和值。

metric_name{"tag"="value"[,...]}
            value