Tutorial untuk mengikis metrik Redis Prometheus di Amazon Fargate ECS - Amazon CloudWatch

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Tutorial untuk mengikis metrik Redis Prometheus di Amazon Fargate ECS

Tutorial ini memberikan pengantar langsung untuk mengikis metrik Prometheus dari contoh aplikasi Redis di cluster Amazon Fargate. ECS Target eksportir Redis Prometheus akan ditemukan secara otomatis oleh CloudWatch agen dengan dukungan metrik Prometheus berdasarkan label docker kontainer.

Redis (https://redis.io/) adalah penyimpanan struktur data dalam memori open source (BSDberlisensi), digunakan sebagai database, cache, dan broker pesan. Untuk informasi selengkapnya, silakan lihat redis.

redis_exporter (MITLisensi berlisensi) digunakan untuk mengekspos metrik Redis prometheus pada port yang ditentukan (default: 0.0.0. 0:9121). Untuk informasi selengkapnya, silakan lihat redis_exporter.

Citra Docker dalam dua repositori Docker Hub berikut digunakan dalam tutorial ini:

Prasyarat

Untuk mengumpulkan metrik dari contoh beban kerja Prometheus untuk ECS Amazon, Anda harus menjalankan Container Insights di cluster. Untuk informasi tentang cara melakukan instalasi Wawasan Kontainer, silakan lihat Menyiapkan Wawasan Kontainer di Amazon ECS.

Mengatur variabel lingkungan klaster Amazon ECS Fargate

Untuk mengatur variabel lingkungan klaster Amazon ECS Fargate
  1. Instal Amazon ECS CLI jika Anda belum melakukannya. Untuk informasi selengkapnya, lihat Menginstal Amazon ECS CLI.

  2. Tetapkan nama dan Wilayah ECS cluster Amazon yang baru. Sebagai contoh:

    ECS_CLUSTER_NAME=ecs-fargate-redis-tutorial AWS_DEFAULT_REGION=ca-central-1
  3. (Opsional) Jika Anda belum memiliki cluster Amazon ECS Fargate tempat Anda ingin menginstal contoh beban kerja dan CloudWatch agen Redis, Anda dapat membuatnya dengan memasukkan perintah berikut.

    ecs-cli up --capability-iam \ --cluster $ECS_CLUSTER_NAME \ --launch-type FARGATE \ --region $AWS_DEFAULT_REGION

    Hasil yang diharapkan dari perintah ini adalah sebagai berikut:

    INFO[0000] Created cluster cluster=ecs-fargate-redis-tutorial region=ca-central-1 INFO[0001] Waiting for your cluster resources to be created... INFO[0001] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS VPC created: vpc-xxxxxxxxxxxxxxxxx Subnet created: subnet-xxxxxxxxxxxxxxxxx Subnet created: subnet-xxxxxxxxxxxxxxxxx Cluster creation succeeded.

Mengatur variabel lingkungan jaringan untuk klaster Amazon ECS Fargate

Untuk mengatur variabel lingkungan jaringan untuk klaster Amazon ECS Fargate
  1. Setel ID subnet Anda VPC dan ECS kluster Amazon. Jika Anda membuat sebuah klaster baru dalam prosedur sebelumnya, maka Anda akan melihat nilai-nilai ini dalam hasil perintah akhir. Jika tidak, gunakan cluster yang ada yang akan Anda gunakan dengan Redis. IDs

    ECS_CLUSTER_VPC=vpc-xxxxxxxxxxxxxxxxx ECS_CLUSTER_SUBNET_1=subnet-xxxxxxxxxxxxxxxxx ECS_CLUSTER_SUBNET_2=subnet-xxxxxxxxxxxxxxxxx
  2. Dalam tutorial ini, kita akan menginstal aplikasi Redis dan CloudWatch agen di grup keamanan default ECS cluster AmazonVPC. Grup keamanan default memungkinkan semua koneksi jaringan dalam grup keamanan yang sama sehingga CloudWatch agen dapat mengikis metrik Prometheus yang terpapar pada wadah Redis. Dalam lingkungan produksi nyata, Anda mungkin ingin membuat grup keamanan khusus untuk aplikasi dan CloudWatch agen Redis dan menetapkan izin khusus untuk mereka.

    Masukkan perintah berikut untuk mendapatkan ID grup keamanan default.

    aws ec2 describe-security-groups \ --filters Name=vpc-id,Values=$ECS_CLUSTER_VPC \ --region $AWS_DEFAULT_REGION

    Kemudian tetapkan variabel kelompok keamanan mandiri klaster Fargate dengan memasukkan perintah berikut, mengganti my-default-security-group dengan nilai yang Anda temukan dari perintah sebelumnya.

    ECS_CLUSTER_SECURITY_GROUP=my-default-security-group

Pasang contoh beban kerja Redis

Untuk melakukan instalasi beban kerja Redis sampel yang membuka metrik Prometheus
  1. Unduh AWS CloudFormation template Redis dengan memasukkan perintah berikut.

    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/redis/redis-traffic-sample.yaml
  2. Tetapkan nama IAM peran yang akan dibuat untuk Redis dengan memasukkan perintah berikut.

    REDIS_ECS_TASK_ROLE_NAME=redis-prometheus-demo-ecs-task-role-name REDIS_ECS_EXECUTION_ROLE_NAME=redis-prometheus-demo-ecs-execution-role-name
  3. Instal beban kerja Redis sampel dengan memasukkan perintah berikut.

    aws cloudformation create-stack --stack-name Redis-Prometheus-Demo-ECS-$ECS_CLUSTER_NAME-fargate-awsvpc \ --template-body file://redis-traffic-sample.yaml \ --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \ ParameterKey=SecurityGroupID,ParameterValue=$ECS_CLUSTER_SECURITY_GROUP \ ParameterKey=SubnetID,ParameterValue=$ECS_CLUSTER_SUBNET_1 \ ParameterKey=TaskRoleName,ParameterValue=$REDIS_ECS_TASK_ROLE_NAME \ ParameterKey=ExecutionRoleName,ParameterValue=$REDIS_ECS_EXECUTION_ROLE_NAME \ --capabilities CAPABILITY_NAMED_IAM \ --region $AWS_DEFAULT_REGION

AWS CloudFormation Tumpukan menciptakan empat sumber daya:

  • Satu peran ECS tugas

  • Satu peran eksekusi ECS tugas

  • Satu penetapan tugas Redis

  • Satu layanan Redis

Dalam penetapan tugas Redis tersebut, ada dua kontainer yang ditentukan:

  • Kontainer utama menjalankan sebuah aplikasi Redis sederhana dan membuka port 6379 agar bisa diakses.

  • Kontainer lainnya yang menjalankan proses pengekspor Redis untuk membuka metrik Prometheus di port 9121. Ini adalah wadah yang akan ditemukan dan dikikis oleh agen. CloudWatch Label docker berikut didefinisikan sehingga CloudWatch agen dapat menemukan wadah ini berdasarkan itu.

    ECS_PROMETHEUS_EXPORTER_PORT: 9121

Konfigurasikan CloudWatch agen untuk mengikis metrik Redis Prometheus

Untuk mengonfigurasi CloudWatch agen untuk mengikis metrik Redis Prometheus
  1. Unduh cwagent-ecs-prometheus-metric-for-awsvpc.yaml versi terbaru dengan memasukkan perintah berikut.

    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. Buka file dengan editor teks, dan temukan konfigurasi CloudWatch agen lengkap di belakang value kunci di resource:CWAgentConfigSSMParameter bagian.

    Kemudian, di ecs_service_discovery bagian yang ditampilkan di sini, penemuan layanan docker_label berbasis diaktifkan dengan pengaturan default yang didasarkanECS_PROMETHEUS_EXPORTER_PORT, yang cocok dengan label docker yang kami definisikan dalam definisi tugas RedisECS. Jadi, kita tidak perlu melakukan perubahan apa pun dalam bagian ini:

    ecs_service_discovery": { "sd_frequency": "1m", "sd_result_file": "/tmp/cwagent_ecs_auto_sd.yaml", * "docker_label": { },* ...

    Untuk bagian metric_declaration, pengaturan bawaan tidak mengizinkan metrik Redis. Tambahkan bagian berikut untuk mengizinkan metrik Redis. Pastikan untuk mengikuti pola indentasi yang ada saat itu.

    { "source_labels": ["container_name"], "label_matcher": "^redis-exporter-.*$", "dimensions": [["ClusterName","TaskDefinitionFamily"]], "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": ["container_name"], "label_matcher": "^redis-exporter-.*$", "dimensions": [["ClusterName","TaskDefinitionFamily","cmd"]], "metric_selectors": [ "^redis_commands_total$" ] }, { "source_labels": ["container_name"], "label_matcher": "^redis-exporter-.*$", "dimensions": [["ClusterName","TaskDefinitionFamily","db"]], "metric_selectors": [ "^redis_db_keys$" ] },
  3. Jika Anda sudah memiliki CloudWatch agen yang digunakan di ECS klaster Amazon oleh AWS CloudFormation, Anda dapat membuat set perubahan dengan memasukkan perintah berikut.

    ECS_LAUNCH_TYPE=FARGATE CREATE_IAM_ROLES=True ECS_CLUSTER_SUBNET=$ECS_CLUSTER_SUBNET_1 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-$ECS_LAUNCH_TYPE-awsvpc \ --template-body file://cwagent-ecs-prometheus-metric-for-awsvpc.yaml \ --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \ ParameterKey=CreateIAMRoles,ParameterValue=$CREATE_IAM_ROLES \ ParameterKey=ECSLaunchType,ParameterValue=$ECS_LAUNCH_TYPE \ ParameterKey=SecurityGroupID,ParameterValue=$ECS_CLUSTER_SECURITY_GROUP \ ParameterKey=SubnetID,ParameterValue=$ECS_CLUSTER_SUBNET \ ParameterKey=TaskRoleName,ParameterValue=$ECS_TASK_ROLE_NAME \ ParameterKey=ExecutionRoleName,ParameterValue=$ECS_EXECUTION_ROLE_NAME \ --capabilities CAPABILITY_NAMED_IAM \ --region ${AWS_DEFAULT_REGION} \ --change-set-name redis-scraping-support
  4. Buka AWS CloudFormation konsol di https://console.aws.amazon.com/cloudformation.

  5. Meninjau changeset redis-scraping-support yang baru saja Anda buat. Anda seharusnya melihat satu perubahan diterapkan ke sumber daya CWAgentConfigSSMParameter. Jalankan changeset dan restart tugas CloudWatch agen dengan memasukkan perintah berikut.

    aws ecs update-service --cluster $ECS_CLUSTER_NAME \ --desired-count 0 \ --service cwagent-prometheus-replica-service-$ECS_LAUNCH_TYPE-awsvpc \ --region ${AWS_DEFAULT_REGION}
  6. Tunggu sekitar 10 detik, kemudian masukkan perintah berikut.

    aws ecs update-service --cluster $ECS_CLUSTER_NAME \ --desired-count 1 \ --service cwagent-prometheus-replica-service-$ECS_LAUNCH_TYPE-awsvpc \ --region ${AWS_DEFAULT_REGION}
  7. Jika Anda menginstal CloudWatch agen dengan pengumpulan metrik Prometheus untuk cluster untuk pertama kalinya, masukkan perintah berikut:

    ECS_LAUNCH_TYPE=FARGATE CREATE_IAM_ROLES=True ECS_CLUSTER_SUBNET=$ECS_CLUSTER_SUBNET_1 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-$ECS_LAUNCH_TYPE-awsvpc \ --template-body file://cwagent-ecs-prometheus-metric-for-awsvpc.yaml \ --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \ ParameterKey=CreateIAMRoles,ParameterValue=$CREATE_IAM_ROLES \ ParameterKey=ECSLaunchType,ParameterValue=$ECS_LAUNCH_TYPE \ ParameterKey=SecurityGroupID,ParameterValue=$ECS_CLUSTER_SECURITY_GROUP \ ParameterKey=SubnetID,ParameterValue=$ECS_CLUSTER_SUBNET \ ParameterKey=TaskRoleName,ParameterValue=$ECS_TASK_ROLE_NAME \ ParameterKey=ExecutionRoleName,ParameterValue=$ECS_EXECUTION_ROLE_NAME \ --capabilities CAPABILITY_NAMED_IAM \ --region ${AWS_DEFAULT_REGION}

Menampilkan metrik Redis

Tutorial ini mengirimkan metrik berikut ke namespace ECSContainerInsights//Prometheus di. CloudWatch Anda dapat menggunakan CloudWatch konsol untuk melihat metrik di namespace tersebut.

Nama Metrik Dimensi

redis_net_input_bytes_total

ClusterName, TaskDefinitionFamily

redis_net_output_bytes_total

ClusterName, TaskDefinitionFamily

redis_expired_keys_total

ClusterName, TaskDefinitionFamily

redis_evicted_keys_total

ClusterName, TaskDefinitionFamily

redis_keyspace_hits_total

ClusterName, TaskDefinitionFamily

redis_keyspace_misses_total

ClusterName, TaskDefinitionFamily

redis_memory_used_bytes

ClusterName, TaskDefinitionFamily

redis_connected_clients

ClusterName, TaskDefinitionFamily

redis_commands_total

ClusterName, TaskDefinitionFamily, cmd

redis_db_keys

ClusterName, TaskDefinitionFamily, db

catatan

Nilai dari dimensi cmd bisa berupa: append, client, command, config, dbsize, flushall, get, incr, info, latency, atau slowlog.

Nilai dari dimensi db bisa db0 hingga db15.

Anda juga dapat membuat CloudWatch dasbor untuk metrik Redis Prometheus Anda.

Cara membuat sebuah dasbor untuk metrik-metrik Redis Prometheus
  1. Buat variabel lingkungan, yang menggantikan nilai di bawah ini untuk menyesuaikan dengan deployment Anda.

    DASHBOARD_NAME=your_cw_dashboard_name ECS_TASK_DEF_FAMILY=redis-prometheus-demo-$ECS_CLUSTER_NAME-fargate-awsvpc
  2. Masukkan perintah berikut untuk membuat dasbor tersebut.

    curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/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" \