新钛云服已为您服务1095天
Amazon Prometheus托管服务(AMP)是与Prometheus兼容的监控服务,用于容器基础架构和应用程序指标监控,让用户可以轻松并安全地监控大规模容器环境。
Prometheus支持各种度量标准收集机制,其中包括许多库和服务器,这些库和服务器可帮助从第三方系统导出特定于应用程序的度量标准作为Prometheus的度量标准。
你还可以使用AWS Distro for OpenTelemetry从环境中提取应用程序指标。借助AMP,你可以使用与当今相同的开源Prometheus数据模型和查询语言来监视容器的工作负载和性能。使用该服务不需要任何前期投资,你只需为获取的指标数量付费。
在容器环境中使用Prometheus的用户在管理高可用性、可扩展性、服务器环境安全性、长期存储的基础架构以及访问控制方面面临挑战。
AMP通过提供与AWS Identity and Access Management(IAM)紧密集成的完全托管环境来控制身份验证和授权,从而解决了这些问题。你可以按照以下两个简单步骤开始使用AMP:
创建一个AMP工作区
配置Prometheus服务器以远程写入AMP工作区
配置完成后,你将能够使用完全托管的AMP环境来获取,存储和查询指标。在此文章中,我们将逐步介绍设置AMP从部署到Amazon EKS集群的容器化工作负载中收集自定义Prometheus指标所需的步骤,然后使用Grafana对其进行查询和可视化。
基础架构
下图说明了适用于Prometheus的Amazon Managed Service的总体架构及其与其他组件的交互。
设置工作区以收集Prometheus指标
首先,你需要创建一个工作区。工作区是概念性的位置,你可以在其中提取,存储和查询从应用程序工作负载(与其他AMP工区间隔离)中收集的Prometheus指标。
可以在同一AWS账户内的每个区域中创建一个或多个工作区,并且每个工作区可用于从多个工作负载中提取指标,这些工作负载以Prometheus兼容格式导出指标。
用户管理的具有以下权限的IAM策略应与管理工作区的IAM用户关联:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"aps:CreateWorkspace",
"aps:DeleteWorkspace",
"aps:DescribeWorkspace",
"aps:ListWorkspaces",
"aps:UpdateWorkspaceAlias"
],
"Resource": "*"
}
]
}
从AWS管理控制台创建一个工作区,如下所示:
△创建工作区
△工作区列表
接下来,作为可选步骤,你将创建接口VPC端点,以便让VPC内部署的资源安全地访问托管服务。这将确保托管服务提取的数据只保留在你的AWS账户的VPC中。你可以按照以下说明使用AWS CLI进行此操作。确保将占位符字符串(例如VPC_ID,AWS_REGION和其他字符串)替换为适当的值。
aws ec2 create-vpc-endpoint \
--vpc-id <VPC_ID> \
--service-name com.amazonaws.<AWS_REGION>.aps-workspaces \
--security-group-ids <SECURITY_GROUP_IDS> \
--vpc-endpoint-type Interface \
--subnet-ids <SUBNET_IDS>
在以上命令中,SECURITY_GROUP_IDS表示与VPC接口终端节点关联的安全组列表,以允许终端节点网络接口与VPC中的资源(例如Amazon EKS集群的工作节点)之间进行通信。SUBNET_IDS代表这些资源所在的子网列表。
配置权限
指标收集器(例如部署到Amazon EKS集群的Prometheus服务器)从集群中运行的容器化工作负载中抓取运行指标,并将其发送给AMP进行长期存储以及随后通过监控工具进行查询。
数据是使用HTTP请求发送的,必须使用AWS Signature版本4算法并且使用有效的AWS凭证对HTTP请求进行签名,以对托管服务的每个客户端请求进行身份验证和授权。为了简化此过程,将请求发送到一个AWS签名代理实例,该实例会将请求转发到托管服务。
可以将AWS Signing代理部署到Amazon EKS集群以在Kubernetes服务帐户的身份下运行。借助服务帐户(IRSA)的IAM角色,你可以将IAM角色与Kubernetes服务帐户关联,从而为使用该服务帐户的任何Pod提供AWS权限。通过使用IRSA安全配置AWS Signing代理,以帮助将Prometheus指标收集到AMP中,这遵循了最小特权原则。
将占位符变量YOUR_EKS_CLUSTER_NAME替换为Amazon EKS集群的名称后,可以使用以下所示的Shell脚本执行以下操作。
创建具有IAM策略的IAM角色,该IAM策略具有远程写入AMP工作区的权限
创建一个带有IAM角色注释的Kubernetes服务帐户
在IAM角色和Amazon EKS集群中托管的OIDC提供者之间创建信任关系
该脚本要求你已经安装了CLI工具kubectl和eksctl,并配置了它们对Amazon EKS集群的访问权限。
##!/bin/bash
CLUSTER_NAME=YOUR_EKS_CLUSTER_NAME
AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query "Account" --output text)
OIDC_PROVIDER=$(aws eks describe-cluster --name $CLUSTER_NAME --query "cluster.identity.oidc.issuer" --output text | sed -e "s/^https:\/\///")
PROM_SERVICE_ACCOUNT_NAMESPACE=prometheus
GRAFANA_SERVICE_ACCOUNT_NAMESPACE=grafana
SERVICE_ACCOUNT_NAME=iamproxy-service-account
SERVICE_ACCOUNT_IAM_ROLE=EKS-AMP-ServiceAccount-Role
SERVICE_ACCOUNT_IAM_ROLE_DESCRIPTION="IAM role to be used by a K8s service account with write access to AMP"
SERVICE_ACCOUNT_IAM_POLICY=AWSManagedPrometheusWriteAccessPolicy
SERVICE_ACCOUNT_IAM_POLICY_ARN=arn:aws:iam::$AWS_ACCOUNT_ID:policy/$SERVICE_ACCOUNT_IAM_POLICY
#
# Setup a trust policy designed for a specific combination of K8s service a