亚马逊AWS官方博客

使用 Prometheus 和 PromCat 监控 Kubernetes 使用的 AWS 服务

AWS 提供的 Amazon CloudWatch 可以通过日志、指标和事件让您了解 AWS 资源和应用程序运行状况。CloudWatch 是一种监控和可视化 AWS 资源指标和日志的不错方式。最近,我发现有些客户采用 Prometheus 作为其监控标准,因为通过它可以收集通过导出程序的任何来源的指标,包括提供特定于 Kubernetes 和其他原生云工具的详细指标。同时,这些客户询问有关 CloudWatch 的信息,因为其中有些工具在后台使用了 AWS 服务,例如 AWS ALB Ingress ControllerAWS CSI-Storage 驱动程序,并且他们希望能够通过单一管理平台监控这些服务。

在本博文中,我将演示 Sysdig 最近对 YACE (Yet Another CloudWatch Exporter) 的开源贡献。YACE 是一个 Prometheus 导出程序,旨在引入 CloudWatch 指标并通过 AWS 服务指标丰富现有 Prometheus 设置。Sysdig 通过 PromCat 推出这些增强功能,后者是一种用于 Prometheus 监控的开源资源目录。此外,我查看了一些如何充分利用这些集成的示例,包括:

  • 如何使用提供的出口商配置监控 AWS Elastic Load Balancer (ELB) 等服务
  • CloudWatch 可以为受支持的 AWS 服务提供什么类型的指标
  • 如何使用预构建的 Grafana 和 Sysdig 控制面板可视化 Prometheus 和 CloudWatch 指标

Sysdig 是一家具有 AWS 容器能力的 AWS 合作伙伴网络 (APN) 高级技术合作伙伴,它具有强大的开源背景,其工程师们联合创立了 Wireshark 和 Falco 等项目。

先决条件

首先,您需要设置 Amazon Elastic Kubernetes Service (Amazon EKS) 集群。在本演示中,我们将使用 eksctl 来启动集群。首先,必须下载以下工具:

安装完必备工具之后,启动 Amazon EKS 集群。在本例中,我们会将集群部署到 us-east-1(即 AWS 弗吉尼亚区域)中;您可以将 AWS_REGION 替换为支持 Amazon EKS 的任何区域

部署集群

在创建该文件后,使用 eksctl create cluster 命令创建集群。默认情况下,这将会创建控制平面和两个工作线程节点。

eksctl create cluster promcat --region=us-east-1

完成此操作大约需要 10–15 分钟时间,之后,便可获得可供使用的 Amazon EKS 集群。

如果您的安装已正确完成,则您应该会看到列出的服务。

kubectl get svc

安装 Helm

集群创建完毕之后,您可以按照博文“结合使用 Helm 与 Amazon EKS”中的步骤进行操作,以本地设置 helm。 在完成这些步骤之后,您便可以部署 Prometheus 和 Grafana。

安装 Yace 导出程序

YACE 或“Yet another CloudWatch Exporter”是一个由 Sysdig 创建的开源项目,旨在标准化将 AWS 服务指标引入到 Prometheus 中。与现有 CloudWatch 导出程序相比,YACE 具有以下优势:

  • 通过标签自动发现资源
  • 向指标自动添加标签
  • 具有时间戳的 CloudWatch 指标(默认已禁用)
  • 并发选项
  • 减少 API 限流的批处理请求

首先,我们为 YACE 创建一个 AWS Identity and Access Management (IAM) 服务用户。然后,我们通过创建一个服务 IAM 用户凭证的 Base64 编码哈希来安装 YACE 密钥。我已将凭证添加到了以下本地文件中:~/.aws/yace_user。在 IAM 控制台中将此策略添加到服务用户,以允许收集来自 CloudWatch 的 ELB 指标。这也可以从每个导出程序的“AWS 权限”部分下面的 PromCat 复制。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "CloudWatchExporterPolicy",
            "Effect": "Allow",
            "Action": [
                "tag:GetResources",
                "cloudwatch:ListTagsForResource",
                "cloudwatch:GetMetricStatistics",
                "cloudwatch:GetMetricData",
                "cloudwatch:ListMetrics"
            ],
            "Resource": "*"
        }
    ]
}

接下来,Base64 会将该文件编码以获取哈希。

cat ~/.aws/yace_user | base64

接着,使用前面哈希命令中的导出程序密钥创建一个名为 secret.yaml 的文件,然后将其置于凭证数据中。然后,应用该密钥并检查它是否存在。

apiVersion: v1
kind: Secret
metadata:
  name: yace-credentials
  namespace: monitoring
data:
  # Add in credentials the result of:
  # cat ~/.aws/credentials | base64
  credentials: |
    <REPLACE_WITH_YOUR_HASH>

kubectl apply -f secret.yaml --namespace monitoring
kubectl get secret yace-credentials --namespace monitoring

现在,我们将为要监控的每个服务创建 YACE 导出程序部署。在本演示中,我们将监控 AWS Classic ELB,并且将应用示例 GitHub 存储库中的文件。这将创建一个采用我们在前面创建的 yace-credential 密钥的卷映射,以授予导出程序访问权限。

kubectl apply -f https://raw.githubusercontent.com/jonahjon/promcat/master/yace/yace_elb.yaml --namespace monitoring
kubectl get deployment yace-elb --namespace monitoring

此文件当前已设置完毕,可获取来自 us-east-1 的指标。您可以在 yace_elb.yaml 中更改区域配置参数。

要验证我们正在获取的 Prometheus 指标,我们可以尝试部署上的指标终端节点。我们将本地包转发部署,并导航至 http://localhost:5000/metrics

port-forward -n monitoring deploy/yace-elb 5000:5000

太好了,我们可以看到导出程序正在获取我们的指标,并且这些指标已向 Prometheus 公开。

安装 Prometheus

接下来,我们将创建一个监控命名空间,并将 Prometheus 部署到该命名空间。

kubectl create namespace prometheus
helm install stable/prometheus \ 
             --name prometheus \
             --namespace prometheus \
             --set alertmanager.persistentVolume.storageClass="gp2",server.persistentVolume.storageClass="gp2",server.service.type=LoadBalancer

让我们来获取负载均衡器 URL 并导航至 Prometheus,以检查自动发现机制是否正在通过查询“aws_elb_latency_p95”指标来获取 YACE 导出程序 ELB 指标。

看起来不错!接下来,我们来借助 PromCat 设置 Grafana 控制面板,以监控 ELB 指标。

安装 Grafana

让我们来安装已安装了预加载 PromCat ELB Golden Signal 控制面板的 Grafana。这使我们能够可视化从上一步骤中获取的 Prometheus 指标。在安装中,将控制面板 URL 设置为预配置的 URL,并将服务设置为使用负载均衡器类型。

helm upgrade -i grafana stable/grafana \
    --namespace monitoring \
    --set persistence.storageClassName="gp2" \
    --set adminPassword='P@ssword123!' \
    --set datasources."datasources\.yaml".apiVersion=1 \
    --set datasources."datasources\.yaml".datasources[0].name=Prometheus \
    --set datasources."datasources\.yaml".datasources[0].type=prometheus \
    --set datasources."datasources\.yaml".datasources[0].url=http://prometheus-server.monitoring.svc.cluster.local \
    --set datasources."datasources\.yaml".datasources[0].access=proxy \
    --set datasources."datasources\.yaml".datasources[0].isDefault=true \
    --set dashboardProviders."dashboardproviders\.yaml".apiVersion=1 \
    --set dashboardProviders."dashboardproviders\.yaml".providers[0].name=default \
    --set dashboardProviders."dashboardproviders\.yaml".providers[0].orgId=1 \
    --set dashboardProviders."dashboardproviders\.yaml".providers[0].folder="" \
    --set dashboardProviders."dashboardproviders\.yaml".providers[0].type=file \
    --set dashboardProviders."dashboardproviders\.yaml".providers[0].disableDeletion=false \
    --set dashboardProviders."dashboardproviders\.yaml".providers[0].editable=true \
    --set dashboardProviders."dashboardproviders\.yaml".providers[0].options.path=/var/lib/grafana/dashboards/default \
    --set dashboards.default.elb.url="https://raw.githubusercontent.com/sysdiglabs/promcat-resources/master/resources/aws-elb/dashboards.yaml" \
    --set service.type=LoadBalancer

现在,我们来获取负载均衡器 URL,在浏览器中导航到该 URL,并使用命令中的演示密码登录:

kubectl get svc --namespace monitoring grafana -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'

Username:Admin
Password:P@ssword123!

登录后,导航到控制面板 > AWS ELB Golden Signal,当前 AWS 区域中与 ELB Prometheus 相关的指标将显示在此处。

清理

为了避免您的 AWS 账户在未来产生费用,为此项目删除在您的 AWS 账户中创建的资源。

helm delete grafana
helm delete prometheus
eksctl delete cluster promcat

小结

在本文中,我们演示了 Sysdig PromCat 如何与 Amazon EKS 集成,以便您:

  • 在 Amazon EKS 中使用 YACE 导出程序收集 AWS 服务指标。
  • 通过在 Amazon EKS 中启动的 Prometheus 查看 AWS 资源指标。
  • 使用由 PromCat 提供的控制面板可视化 YACE 抓取的 AWS 服务指标。

后续步骤

查看适用于企业级 Prometheus 目录的 PromCat 或 YACE GitHub,以查看为 24 项 AWS 服务提供的配置选项。有关 Sysdig 构建 YACE 和 PromCat 的原因和方法的更多信息,请查看工程博客文章

若要为 PromCat 做贡献,请访问 Github 上的 PromCat 资源。在 GitHub 上了解关于 AWS 容器路线图的更多信息。

图片精选自 Pixabay