有关添加新的 Prometheus 刮取目标的教程:亚马逊 EKS 和库贝内特群集上的 Redis - Amazon CloudWatch
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

有关添加新的 Prometheus 刮取目标的教程:亚马逊 EKS 和库贝内特群集上的 Redis

本教程将为您提供实践经验,告诉您如何在亚马逊 EKS 和 Kubernetes 上抓取 Redis 应用程序的 Prometheus 指标。Redis (https://redis.io/) 是一个开源(BSD 许可)的内存中数据结构存储,用作数据库、缓存和消息代理。有关更多信息,请参阅 。redis

redis_exporter(MIT 许可证许可)用于在指定端口上公开 Redis 普罗米修斯指标(默认值:0.0.0. 0:9121)。有关更多信息,请参阅 。复制导出器

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

安装公开 Prometheus 度量的示例 Redis 工作负载

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

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

    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

开始在 CloudWatch 中收集 Redis Prometheus 指标的步骤

  1. 下载最新版本的kubernetes-eks.yaml或者kubernetes-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

    对于具有 Fargate 启动类型的 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-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 代理。ReplaceMyCluster区域以匹配您的设置。

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

    kubectl apply -f prometheus-eks.yaml

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

    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 指标

本教程会向集装箱景观/Prometheus命名 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维度可以是:appendclientcommandconfigdbsizeflushallgetincrinfolatency,或者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" \