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
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
-
Temukan direktori
app
dan bangun sebuah citra dari direktori tersebut:docker build -t web-server-app ./
path-to-app-directory
-
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.conf
File, 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 yangnginx-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.
-
-
Membangun sebuah citra dari file yang ada dalam direktori baru Anda:
docker build -t nginx-reverse-proxy ./
path-to-your-directory
-
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
-
Buat sebuah penetapan tugas file JSON dengan konten berikut. Ganti
your-customized-nginx-iamge
dengan URI gambar untuk gambar NGINX Anda yang disesuaikan, dan gantiyour-web-server-app-image
dengan URI gambar 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" } -
Daftarkan penetapan tugas dengan memasukkan perintah berikut.
aws ecs register-task-definition --cli-input-json file://
path-to-your-task-definition-json
-
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
-
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
-
Buka file dengan editor teks, dan temukan konfirmasi CloudWatch agen lengkap di
value
kunci di bagianresource:CWAgentConfigSSMParameter
. Kemudian, di bagianecs_service_discovery
, tambahkan bagianservice_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$" } ],
-
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_.*$" ] },
-
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 Buka AWS CloudFormation konsol di https://console.aws.amazon.com/cloudformation
. -
Mengungkap changeset yang baru dibuat. nginx-scraping-support Anda akan melihat satu perubahan diterapkan ke sumber daya CWAgentConfig 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
-
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
-
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
Buka CloudWatch konsol di https://console.aws.amazon.com/cloudwatch/
. -
Di Wilayah tempat klaster Anda berjalan, pilih Metrik pada panel navigasi yang ada sebelah kiri. Temukan namespace ContainerInsights/Prometheus untuk melihat metriknya.
-
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