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

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

添加新的 Prometheus 抓取目标的教程: Amazon EKS 和 Kubernetes 集群上的 Redis

本教程提供了实践介绍,以抓取 Amazon EKS 和 Kubernetes 上示例 Redis 应用程序的 Prometheus 指标。Redis (https://redis.io/) 是开源(BSD 许可)、内存中数据结构存储,用作数据库、缓存和消息代理。有关更多信息,请参阅 redis。

redis_exporter(经 MIT 许可的许可证)用于在指定的端口(默认值:0.0.0.0:9121)上公开 Redis prometheus 指标。有关更多信息,请参阅 redis_exporter。

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

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

  1. 设置示例 Redis 工作负载的命名空间。

    REDIS_NAMESPACE=redis-sample
  2. 如果您在具有 Fargate 启动类型的集群上运行 Redis,则需要设置Fargate配置文件。要设置 配置文件,请输入以下命令。Replace MyCluster 替换为集群的名称。

    eksctl create fargateprofile --cluster MyCluster \ --namespace $REDIS_NAMESPACE --name $REDIS_NAMESPACE
  3. 输入以下命令以安装示例 Redis 工作负载。

    curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_traffic/redis/redis-traffic-sample.yaml \ | sed "s/{{namespace}}/$REDIS_NAMESPACE/g" \ | kubectl apply -f -
  4. 安装包括一个名为 的服务my-redis-metrics,该服务在端口 9121 上公开 Redis Prometheus 指标 输入以下命令以获取服务的详细信息:

    kubectl describe service/my-redis-metrics -n $REDIS_NAMESPACE

    在结果的 Annotations 部分中,您将看到两个与 CloudWatch 代理的 Prometheus 抓取配置匹配的注释,以便它可以自动发现工作负载:

    prometheus.io/port: 9121 prometheus.io/scrape: true

    相关的 Prometheus 抓取配置可在 - job_name: kubernetes-service-endpoints 或 的 kubernetes-eks.yaml 部分中找到kubernetes-k8s.yaml

开始在 中收集 Redis Prometheus 指标 CloudWatch

  1. 输入以下命令之一以下载 kubernetes-eks.yamlkubernetes-k8s.yaml 文件的最新版本。对于具有 EC2 启动类型的 Amazon EKS 集群,请输入此命令。

    curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks.yaml

    对于具有 Amazon EKS 启动类型的 Fargate 集群,请输入此命令。

    curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks-fargate.yaml

    对于在 Amazon EC2 实例上运行的 Kubernetes 集群,请输入此命令。

    curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-k8s.yaml
  2. 使用文本编辑器打开 文件,然后找到 cwagentconfig.json 部分。添加以下子部分并保存更改。确保缩进遵循现有模式。

    { "source_labels": ["pod_name"], "label_matcher": "^redis-instance$", "dimensions": [["Namespace","ClusterName"]], "metric_selectors": [ "^redis_net_(in|out)put_bytes_total$", "^redis_(expired|evicted)_keys_total$", "^redis_keyspace_(hits|misses)_total$", "^redis_memory_used_bytes$", "^redis_connected_clients$" ] }, { "source_labels": ["pod_name"], "label_matcher": "^redis-instance$", "dimensions": [["Namespace","ClusterName","cmd"]], "metric_selectors": [ "^redis_commands_total$" ] }, { "source_labels": ["pod_name"], "label_matcher": "^redis-instance$", "dimensions": [["Namespace","ClusterName","db"]], "metric_selectors": [ "^redis_db_keys$" ] },

    您添加的部分将 Redis 指标放在CloudWatch代理允许列表中。有关这些指标的列表,请参阅以下部分。

  3. 如果已在此集群中部署具有 Prometheus 支持的 CloudWatch 代理,则必须通过输入以下命令来删除它。

    kubectl delete deployment cwagent-prometheus -n amazon-cloudwatch
  4. 通过输入以下命令之一,使用更新的配置部署 CloudWatch 代理。Replace MyClusterregion 以匹配您的设置。

    对于具有 EC2 启动类型的 Amazon EKS 集群,请输入此命令。

    kubectl apply -f prometheus-eks.yaml

    对于具有 Amazon EKS 启动类型的 Fargate 集群,请输入此命令。

    cat prometheus-eks-fargate.yaml \ | sed "s/{{cluster_name}}/MyCluster/;s/{{region_name}}/region/" \ | kubectl apply -f -

    对于 Kubernetes 集群,请输入此命令。

    cat prometheus-k8s.yaml \ | sed "s/{{cluster_name}}/MyCluster/;s/{{region_name}}/region/" \ | kubectl apply -f -

查看 Redis Prometheus 指标

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

指标名称 Dimensions

redis_net_input_bytes_total

ClusterName,Namespace

redis_net_output_bytes_total

ClusterName,Namespace

redis_expired_keys_total

ClusterName,Namespace

redis_evicted_keys_total

ClusterName,Namespace

redis_keyspace_hits_total

ClusterName,Namespace

redis_keyspace_misses_total

ClusterName,Namespace

redis_memory_used_bytes

ClusterName,Namespace

redis_connected_clients

ClusterName,Namespace

redis_commands_total

ClusterName,Namespace,cmd

redis_db_keys

ClusterName,Namespace,db

注意

cmd 维度的值可以是append:、clientcommandconfigdbsizeflushallgetincrinfolatency、 或 slowlog

db 维度的值可以是 db0db15

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

为 Redis Prometheus 指标创建控制面板

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

    DASHBOARD_NAME=your_cw_dashboard_name REGION_NAME=your_metric_region_such_as_us-east-1 CLUSTER_NAME=your_k8s_cluster_name_here NAMESPACE=your_redis_service_namespace_here
  2. 输入以下命令以创建控制面板。

    curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/master/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_cloudwatch_dashboards/redis/cw_dashboard_redis.json \ | sed "s/{{YOUR_AWS_REGION}}/${REGION_NAME}/g" \ | sed "s/{{YOUR_CLUSTER_NAME}}/${CLUSTER_NAME}/g" \ | sed "s/{{YOUR_NAMESPACE}}/${NAMESPACE}/g" \