添加新 Prometheus 抓取目标的教程: 上的 Memcached Amazon ECS - Amazon CloudWatch
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

添加新 Prometheus 抓取目标的教程: 上的 Memcached Amazon ECS

本教程提供了实践介绍,介绍如何在 EC2 启动类型的 Amazon Amazon ECS 集群上抓取示例 Memcached 应用程序的 Prometheus 指标。代理将通过基于 CloudWatch ECS 任务定义的服务发现自动发现 Memcached Prometheus 导出程序目标。

Memcached 是一种通用型分布式内存缓存系统。它通常用于通过缓存 RAM 中的数据和对象来加快动态数据库驱动的网站,以减少必须读取外部数据源(如数据库或 API)的次数。有关更多信息,请参阅什么是 Memcached?

memchached_exporter (Apache 许可证 2.0) 是 Prometheus 官方导出程序之一。默认情况下,memcache_exporter 在端口 0.0.0.0:9150 上提供服务,地址为 /metrics.

本教程使用以下两个 Docker Hub 存储库中的 Docker 映像:

先决条件

要从 的示例 Prometheus 工作负载收集指标Amazon ECS,您必须在集群中运行 Container Insights。有关安装 Container Insights 的信息,请参阅在 Amazon ECS 上设置 Container Insights

设置 Amazon ECS EC2 集群环境变量

设置 Amazon ECS EC2 集群环境变量

  1. 如果尚未安装 Amazon ECS CLI,请安装它。有关更多信息,请参阅安装 Amazon ECS CLI。

  2. 设置新的Amazon ECS集群名称和区域。例如:

    ECS_CLUSTER_NAME=ecs-ec2-memcached-tutorial AWS_DEFAULT_REGION=ca-central-1
  3. (可选)如果您还没有 EC2 启动类型中要安装示例 Memcached 工作负载和Amazon ECS代理的 CloudWatch 集群,则可以通过输入以下命令创建一个集群。

    ecs-cli up --capability-iam --size 1 \ --instance-type t3.medium \ --cluster $ECS_CLUSTER_NAME \ --region $AWS_REGION

    此命令的预期结果如下所示:

    WARN[0000] You will not be able to SSH into your EC2 instances without a key pair. INFO[0000] Using recommended Amazon Linux 2 AMI with ECS Agent 1.44.4 and Docker version 19.03.6-ce INFO[0001] Created cluster cluster=ecs-ec2-memcached-tutorial region=ca-central-1 INFO[0002] Waiting for your cluster resources to be created... INFO[0002] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS INFO[0063] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS INFO[0124] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS VPC created: vpc-xxxxxxxxxxxxxxxxx Security Group created: sg-xxxxxxxxxxxxxxxxx Subnet created: subnet-xxxxxxxxxxxxxxxxx Subnet created: subnet-xxxxxxxxxxxxxxxxx Cluster creation succeeded.

安装示例 Memcached 工作负载

安装公开 Prometheus 指标的示例 Memcached 工作负载

  1. 输入以下命令以下载 Memcached AWS CloudFormation 模板。

    curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/master/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/sample_traffic/memcached/memcached-traffic-sample.yaml
  2. 通过输入以下命令,设置要为 Memcached 创建IAM的角色名称。

    MEMCACHED_ECS_TASK_ROLE_NAME=memcached-prometheus-demo-ecs-task-role-name MEMCACHED_ECS_EXECUTION_ROLE_NAME=memcached-prometheus-demo-ecs-execution-role-name
  3. 通过输入以下命令安装示例 Memcached 工作负载。此示例以host网络模式安装工作负载。

    MEMCACHED_ECS_NETWORK_MODE=host aws cloudformation create-stack --stack-name Memcached-Prometheus-Demo-ECS-$ECS_CLUSTER_NAME-EC2-$MEMCACHED_ECS_NETWORK_MODE \ --template-body file://memcached-traffic-sample.yaml \ --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \ ParameterKey=ECSNetworkMode,ParameterValue=$MEMCACHED_ECS_NETWORK_MODE \ ParameterKey=TaskRoleName,ParameterValue=$MEMCACHED_ECS_TASK_ROLE_NAME \ ParameterKey=ExecutionRoleName,ParameterValue=$MEMCACHED_ECS_EXECUTION_ROLE_NAME \ --capabilities CAPABILITY_NAMED_IAM \ --region $AWS_REGION

AWS CloudFormation 堆栈创建四个资源:

  • 一个 ECS 任务角色

  • 一个 ECS 任务执行角色

  • 一个 Memcached 任务定义

  • 一个 Memcached 服务

在 Memcached 任务定义中,定义了两个容器:

  • 主容器运行一个简单的 Memcached 应用程序并打开端口 11211 以进行访问。

  • 另一个容器运行 Redis 导出程序以公开端口 9150 上的 Prometheus 指标。这是要由CloudWatch代理发现和抓取的容器。

配置 CloudWatch 代理以抓取 Memcached Prometheus 指标

将 CloudWatch 代理配置为抓取 Memcached Prometheus 指标

  1. cwagent-ecs-prometheus-metric-for-awsvpc.yaml 输入以下命令以下载最新版本的 。

    curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/master/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/cloudformation-quickstart/cwagent-ecs-prometheus-metric-for-bridge-host.yaml
  2. 使用文本编辑器打开 文件,并在 CloudWatch 部分中找到 value 键后面的完整resource:CWAgentConfigSSMParameter代理配置。

    然后,在 ecs_service_discovery 部分中,将以下配置添加到 task_definition_list 部分中。

    { "sd_job_name": "ecs-memcached", "sd_metrics_ports": "9150", "sd_task_definition_arn_pattern": ".*:task-definition/memcached-prometheus-demo.*:[0-9]+" },

    对于 metric_declaration 部分,默认设置不允许任何 Memcached 指标。添加以下部分以允许 Memcached 指标。请务必遵循现有缩进模式。

    { "source_labels": ["container_name"], "label_matcher": "memcached-exporter-.*", "dimensions": [["ClusterName", "TaskDefinitionFamily"]], "metric_selectors": [ "^memcached_current_(bytes|items|connections)$", "^memcached_items_(reclaimed|evicted)_total$", "^memcached_(written|read)_bytes_total$", "^memcached_limit_bytes$", "^memcached_commands_total$" ] }, { "source_labels": ["container_name"], "label_matcher": "memcached-exporter-.*", "dimensions": [["ClusterName", "TaskDefinitionFamily","status","command"], ["ClusterName", "TaskDefinitionFamily","command"]], "metric_selectors": [ "^memcached_commands_total$" ] },
  3. 如果您已经通过 在CloudWatch集群中部署了 Amazon ECS 代理AWS CloudFormation,则可以通过输入以下命令来创建更改集。

    ECS_NETWORK_MODE=bridge CREATE_IAM_ROLES=True ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name aws cloudformation create-change-set --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-EC2-${ECS_NETWORK_MODE} \ --template-body file://cwagent-ecs-prometheus-metric-for-bridge-host.yaml \ --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \ ParameterKey=CreateIAMRoles,ParameterValue=$CREATE_IAM_ROLES \ ParameterKey=ECSNetworkMode,ParameterValue=$ECS_NETWORK_MODE \ ParameterKey=TaskRoleName,ParameterValue=$ECS_TASK_ROLE_NAME \ ParameterKey=ExecutionRoleName,ParameterValue=$ECS_EXECUTION_ROLE_NAME \ --capabilities CAPABILITY_NAMED_IAM \ --region $AWS_REGION \ --change-set-name memcached-scraping-support
  4. https://console.amazonaws.cn/cloudformation 打开 AWS CloudFormation 控制台。

  5. 查看新创建的更改集 memcached-scraping-support。您应该看到一个更改应用于CWAgentConfigSSMParameter资源。执行更改集,并输入以下命令以重新启动CloudWatch代理任务。

    aws ecs update-service --cluster $ECS_CLUSTER_NAME \ --desired-count 0 \ --service cwagent-prometheus-replica-service-EC2-$ECS_NETWORK_MODE \ --region $AWS_REGION
  6. 等待大约 10 秒,然后输入以下命令。

    aws ecs update-service --cluster $ECS_CLUSTER_NAME \ --desired-count 1 \ --service cwagent-prometheus-replica-service-EC2-$ECS_NETWORK_MODE \ --region $AWS_REGION
  7. 如果您是首次安装具有为集群收集的 Prometheus 指标的 CloudWatch 代理,请输入以下命令:

    ECS_NETWORK_MODEE=bridge CREATE_IAM_ROLES=True ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name aws cloudformation create-stack --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-EC2-${ECS_NETWORK_MODE} \ --template-body file://cwagent-ecs-prometheus-metric-for-bridge-host.yaml \ --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \ ParameterKey=CreateIAMRoles,ParameterValue=$CREATE_IAM_ROLES \ ParameterKey=ECSNetworkMode,ParameterValue=$ECS_NETWORK_MODE \ ParameterKey=TaskRoleName,ParameterValue=$ECS_TASK_ROLE_NAME \ ParameterKey=ExecutionRoleName,ParameterValue=$ECS_EXECUTION_ROLE_NAME \ --capabilities CAPABILITY_NAMED_IAM \ --region $AWS_REGION

查看 Memcached 指标

本教程将以下指标发送到 中的 ContainerInsights 命名空间CloudWatch。您可以使用 CloudWatch 控制台查看该命名空间中的指标。

指标名称 Dimensions

memcached_current_items

ClusterName、TaskDefinitionFamily

memcached_current_connections

ClusterName、TaskDefinitionFamily

memcached_limit_bytes

ClusterName、TaskDefinitionFamily

memcached_current_bytes

ClusterName、TaskDefinitionFamily

memcached_written_bytes_total

ClusterName、TaskDefinitionFamily

memcached_read_bytes_total

ClusterName、TaskDefinitionFamily

memcached_items_evicted_total

ClusterName、TaskDefinitionFamily

memcached_items_reclaimed_total

ClusterName、TaskDefinitionFamily

memcached_commands_total

ClusterName、TaskDefinitionFamily

ClusterName、TaskDefinitionFamily、command

ClusterName、TaskDefinitionFamily、status、command

注意

命令维度的值可以是delete:、getcassetdecrtouchincrflush

状态维度的值可以是 hitmissbadval

您还可以为 Memcached Prometheus 指标创建CloudWatch控制面板。

为 Memcached Prometheus 指标创建控制面板

  1. 创建环境变量,替换下面的值以匹配您的部署。

    DASHBOARD_NAME=your_memcached_cw_dashboard_name ECS_TASK_DEF_FAMILY=memcached-prometheus-demo-$ECS_CLUSTER_NAME-EC2-$MEMCACHED_ECS_NETWORK_MOD
  2. 输入以下命令以创建控制面板。

    curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/master/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/sample_cloudwatch_dashboards/memcached/cw_dashboard_memcached.json \ | sed "s/{{YOUR_AWS_REGION}}/$AWS_REGION/g" \ | sed "s/{{YOUR_CLUSTER_NAME}}/$ECS_CLUSTER_NAME/g" \ | sed "s/{{YOUR_TASK_DEF_FAMILY}}/$ECS_TASK_DEF_FAMILY/g" \ | xargs -0 aws cloudwatch put-dashboard --dashboard-name ${DASHBOARD_NAME} --region $AWS_REGION --dashboard-body