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

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

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

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

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

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

先决条件

要从 Amazon ECS 的示例 Prometheus 工作负载收集指标,您必须在集群中运行 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. (可选)如果您还没有要在其中安装示例 Memcached 工作负载和 CloudWatch 代理的、带有 EC2 启动类型的 Amazon ECS 集群,您可以通过输入以下命令来创建一个。

    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/latest/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 OSS 导出器进程,以在端口 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/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/cloudformation-quickstart/cwagent-ecs-prometheus-metric-for-awsvpc.yaml
  2. 使用文本编辑器打开该文件,并在 resource:CWAgentConfigSSMParameter 部分中的 value 密钥后面查找完整的 CloudWatch 代理配置。

    然后,在 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. 如果 AWS CloudFormation 已在 Amazon ECS 集群中部署 CloudWatch 代理,您可以通过输入以下命令来创建更改集。

    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. 打开 AWS CloudFormation 控制台,地址:https://console.aws.amazon.com/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 指标

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

指标名称 尺寸

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、TaskDefinitionFinitionFamy、command

ClusterName、TaskDefinitionFamily、status、command

注意

命令维度的值可以是 deletegetcassetdecrtouchincrflush

状态维度的值可以是 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/latest/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