Beban kerja NGINX sampel untuk klaster-klaster Amazon ECS - Amazon CloudWatch

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

Beban kerja NGINX sampel untuk klaster-klaster Amazon ECS

Eksportir NGINX Prometheus dapat melakukan scraping dan mengekspos data NGINX sebagai metrik Prometheus. Contoh ini menggunakan pengekspor tersebut bersama dengan layanan proksi terbalik NGINX untuk Amazon ECS.

Untuk informasi lebih lanjut tentang eksportir Prometheus NGINX, lihat di Github. nginx-prometheus-exporter Untuk informasi selengkapnya tentang proxy terbalik NGINX, lihat ecs-nginx-reverse-proxydi Github.

CloudWatch Agen dengan dukungan Prometheus mengikis metrik NGINX Prometheus berdasarkan konfigurasi penemuan layanan di cluster Amazon ECS. Anda dapat mengonfigurasi NGINX Prometheus Exporter untuk mengekspos metrik-metrik sebuah pada port atau jalur yang berbeda. Jika Anda mengubah port atau jalur, perbarui ecs_service_discovery bagian dalam file konfigurasi CloudWatch agen.

Melakukan instalasi beban kerja sampel proksi terbalik NGINX untuk klaster-klaster Amazon ECS

Ikuti langkah-langkah berikut ini untuk melakukan instalasi beban kerja sampel proksi terbalik NGINX.

Membuat citra Docker

Cara membuat citra Docker untuk beban kerja sampel proksi terbalik NGINX
  1. Unduh folder berikut dari repo proxy terbalik NGINX: https://github.com/awslabs/ /tree/master/reverse-proxy/. ecs-nginx-reverse-proxy

  2. Temukan direktori app dan bangun sebuah citra dari direktori tersebut:

    docker build -t web-server-app ./path-to-app-directory
  3. Buat sebuah citra kustom untuk NGINX. Pertama, buat sebuah direktori dengan dua file berikut:

    • Dockerfile sampel:

      FROM nginx COPY nginx.conf /etc/nginx/nginx.conf
    • nginx.confFile, dimodifikasi dari https://github.com/awslabs/ ecs-nginx-reverse-proxy /tree/master/reverse-proxy/:

      events { worker_connections 768; } http { # Nginx will handle gzip compression of responses from the app server gzip on; gzip_proxied any; gzip_types text/plain application/json; gzip_min_length 1000; server{ listen 8080; location /stub_status { stub_status on; } } server { listen 80; # Nginx will reject anything not matching /api location /api { # Reject requests with unsupported HTTP method if ($request_method !~ ^(GET|POST|HEAD|OPTIONS|PUT|DELETE)$) { return 405; } # Only requests matching the whitelist expectations will # get sent to the application server proxy_pass http://app:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_cache_bypass $http_upgrade; } } }
      catatan

      stub_status harus diaktifkan pada port yang sama yang nginx-prometheus-exporter dikonfigurasi untuk mengikis metrik-metrik darinya. Dalam penetapan tugas contoh kita, nginx-prometheus-exporter dikonfigurasi untuk melakukan scraping pada metrik-metrik dari port 8080.

  4. Membangun sebuah citra dari file yang ada dalam direktori baru Anda:

    docker build -t nginx-reverse-proxy ./path-to-your-directory
  5. Unggah citra baru Anda ke sebuah repositori citra yang akan digunakan nanti.

Buat penetapan tugas untuk menjalankan NGINX dan aplikasi web server di Amazon ECS

Berikutnya, Anda menyiapkan penetapan tugas.

Penetapan tugas ini memungkinkan pengumpulan dan ekspor metrik-metrik NGINX Prometheus. Kontainer NGINX melacak masukan dari aplikasi, dan membuka data itu ke port 8080, sebagaimana diatur dalam nginx.conf. Wadah eksportir prometheus NGINX menggores metrik ini, dan mempostingnya ke port 9113, untuk digunakan di. CloudWatch

Cara menyiapkan penetapan tugas untuk beban kerja Amazon ECS sampel NGINX
  1. Buat sebuah penetapan tugas file JSON dengan konten berikut. Ganti your-customized-nginx-iamgedengan URI gambar untuk image NGINX Anda yang disesuaikan, dan ganti your-web-server-app-image dengan URI image untuk image aplikasi server web Anda.

    { "containerDefinitions": [ { "name": "nginx", "image": "your-customized-nginx-image", "memory": 256, "cpu": 256, "essential": true, "portMappings": [ { "containerPort": 80, "protocol": "tcp" } ], "links": [ "app" ] }, { "name": "app", "image": "your-web-server-app-image", "memory": 256, "cpu": 256, "essential": true }, { "name": "nginx-prometheus-exporter", "image": "docker.io/nginx/nginx-prometheus-exporter:0.8.0", "memory": 256, "cpu": 256, "essential": true, "command": [ "-nginx.scrape-uri", "http://nginx:8080/stub_status" ], "links":[ "nginx" ], "portMappings":[ { "containerPort": 9113, "protocol": "tcp" } ] } ], "networkMode": "bridge", "placementConstraints": [], "family": "nginx-sample-stack" }
  2. Daftarkan penetapan tugas dengan memasukkan perintah berikut.

    aws ecs register-task-definition --cli-input-json file://path-to-your-task-definition-json
  3. Untuk membuat sebuah layanan untuk menjalankan tugas dengan memasukkan perintah berikut:

    Pastikan untuk tidak mengubah nama layanan. Kami akan menjalankan layanan CloudWatch agen menggunakan konfigurasi yang mencari tugas menggunakan pola nama layanan yang memulainya. Misalnya, bagi CloudWatch agen untuk menemukan tugas yang diluncurkan oleh perintah ini, Anda dapat menentukan nilai sd_service_name_pattern menjadi^nginx-service$. Bagian selanjutnya menyediakan detail yang lebih lengkap.

    aws ecs create-service \ --cluster your-cluster-name \ --service-name nginx-service \ --task-definition nginx-sample-stack:1 \ --desired-count 1

Konfigurasikan CloudWatch agen untuk mengikis metrik Prometheus NGINX

Langkah terakhir adalah mengonfigurasi CloudWatch agen untuk mengikis metrik NGINX. Dalam contoh ini, CloudWatch agen menemukan tugas melalui pola nama layanan, dan port 9113, di mana eksportir mengekspos metrik prometheus untuk NGINX. Dengan tugas yang ditemukan dan metrik yang tersedia, CloudWatch agen mulai memposting metrik yang dikumpulkan ke aliran log. nginx-prometheus-exporter

Untuk mengonfigurasi CloudWatch agen untuk mengikis metrik NGINX
  1. Unduh file YAML versi terbaru yang diperlukan 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-bridge-host.yaml
  2. Buka file dengan editor teks, dan temukan konfgurasi CloudWatch agen lengkap di value kunci di bagianresource:CWAgentConfigSSMParameter. Kemudian, di bagian ecs_service_discovery, tambahkan bagian service_name_list_for_tasks berikut.

    "service_name_list_for_tasks": [ { "sd_job_name": "nginx-prometheus-exporter", "sd_metrics_path": "/metrics", "sd_metrics_ports": "9113", "sd_service_name_pattern": "^nginx-service$" } ],
  3. Dalam file yang sama, tambahkan bagian berikut di bagian metric_declaration untuk mengizinkan metrik NGINX. Pastikan untuk mengikuti pola indentasi yang ada saat itu.

    { "source_labels": ["job"], "label_matcher": ".*nginx.*", "dimensions": [["ClusterName", "TaskDefinitionFamily", "ServiceName"]], "metric_selectors": [ "^nginx_.*$" ] },
  4. Jika Anda belum memiliki CloudWatch agen yang digunakan di cluster ini, lewati ke langkah 8.

    Jika Anda sudah memiliki CloudWatch agen yang disebarkan di cluster Amazon ECS dengan menggunakan AWS CloudFormation, Anda dapat membuat set perubahan dengan memasukkan perintah berikut:

    ECS_CLUSTER_NAME=your_cluster_name AWS_REGION=your_aws_region 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 nginx-scraping-support
  5. Buka AWS CloudFormation konsol di https://console.aws.amazon.com/cloudformation.

  6. Mengungkap changeset yang baru dibuat. nginx-scraping-support Anda akan melihat satu perubahan diterapkan ke sumber daya CW AgentConfig SSMParameter. 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-EC2-$ECS_NETWORK_MODE \ --region $AWS_REGION
  7. Tunggu sekitar 10 detik, kemudian masukkan perintah berikut.

    aws ecs update-service --cluster $ECS_CLUSTER_NAME \ --desired-count 1 \ --service cwagent-prometheus-replica-service-EC2-$ECS_NETWORK_MODE \ --region $AWS_REGION
  8. Jika Anda menginstal CloudWatch agen dengan pengumpulan metrik Prometheus di cluster untuk pertama kalinya, masukkan perintah berikut.

    ECS_CLUSTER_NAME=your_cluster_name AWS_REGION=your_aws_region 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-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

Menampilkan metrik dan log NGINX Anda

Sekarang Anda dapat menampilkan metrik NGINX yang sedang dikumpulkan.

Cara menampilkan metrik untuk sampel beban kerja NGINX Anda
  1. Buka CloudWatch konsol di https://console.aws.amazon.com/cloudwatch/.

  2. Di Wilayah tempat klaster Anda berjalan, pilih Metrik pada panel navigasi yang ada sebelah kiri. Temukan namespace ContainerInsights/Prometheus untuk melihat metriknya.

  3. Untuk melihat peristiwa CloudWatch Log, pilih Grup log di panel navigasi. Peristiwa ada di grup log /aws/containerinsights/ your_cluster_name /prometheus, di aliran log. nginx-prometheus-exporter