Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Beban kerja NGINX Plus sampel untuk klaster-klaster Amazon ECS
NGINX Plus adalah NGINX versi komersial. Anda harus memiliki sebuah lisensi untuk menggunakannya. Untuk informasi selengkapnya, silakan lihat NGINX Plus
Eksportir NGINX Prometheus dapat melakukan scraping dan mengekspos data NGINX sebagai metrik Prometheus. Contoh ini menggunakan pengekspor tersebut bersama dengan layanan proksi terbalik NGINX Plus untuk Amazon ECS.
Untuk informasi lebih lanjut tentang eksportir Prometheus NGINX, lihat di Github. nginx-prometheus-exporter
CloudWatch Agen dengan dukungan Prometheus menggores metrik NGINX Plus 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 Plus 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 Plus
-
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 Plus. Sebelum Anda dapat membangun citra untuk NGINX Plus, Anda harus mendapatkan kunci bernama
nginx-repo.key
dan sertifikat SSLnginx-repo.crt
untuk NGINX Plus berlisensi Anda. Buat sebuah direktori dan simpan filenginx-repo.key
dannginx-repo.crt
di dalamnya.Dalam direktori yang baru saja Anda buat, buatlah dua file berikut:
-
Sebuah Dockerfile sampel dengan konten berikut. File docker ini diadopsi dari file sampel yang disediakan di https://docs.nginx.com/nginx/admin- guide/installing-nginx/installing -nginx-docker/
#docker_plus_image. Perubahan penting yang kita lakukan adalah kita memuat file terpisah, yang disebut nginx.conf
, yang akan dibuat pada langkah berikutnya.FROM debian:buster-slim LABEL maintainer="NGINX Docker Maintainers <docker-maint@nginx.com>“ # Define NGINX versions for NGINX Plus and NGINX Plus modules # Uncomment this block and the versioned nginxPackages block in the main RUN # instruction to install a specific release # ENV NGINX_VERSION 21 # ENV NJS_VERSION 0.3.9 # ENV PKG_RELEASE 1~buster # Download certificate and key from the customer portal (https://cs.nginx.com (https://cs.nginx.com/)) # and copy to the build context COPY nginx-repo.crt /etc/ssl/nginx/ COPY nginx-repo.key /etc/ssl/nginx/ # COPY nginx.conf /etc/ssl/nginx/nginx.conf RUN set -x \ # Create nginx user/group first, to be consistent throughout Docker variants && addgroup --system --gid 101 nginx \ && adduser --system --disabled-login --ingroup nginx --no-create-home --home /nonexistent --gecos "nginx user" --shell /bin/false --uid 101 nginx \ && apt-get update \ && apt-get install --no-install-recommends --no-install-suggests -y ca-certificates gnupg1 \ && \ NGINX_GPGKEY=573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62; \ found=''; \ for server in \ ha.pool.sks-keyservers.net (http://ha.pool.sks-keyservers.net/) \ hkp://keyserver.ubuntu.com:80 \ hkp://p80.pool.sks-keyservers.net:80 \ pgp.mit.edu (http://pgp.mit.edu/) \ ; do \ echo "Fetching GPG key $NGINX_GPGKEY from $server"; \ apt-key adv --keyserver "$server" --keyserver-options timeout=10 --recv-keys "$NGINX_GPGKEY" && found=yes && break; \ done; \ test -z "$found" && echo >&2 "error: failed to fetch GPG key $NGINX_GPGKEY" && exit 1; \ apt-get remove --purge --auto-remove -y gnupg1 && rm -rf /var/lib/apt/lists/* \ # Install the latest release of NGINX Plus and/or NGINX Plus modules # Uncomment individual modules if necessary # Use versioned packages over defaults to specify a release && nginxPackages=" \ nginx-plus \ # nginx-plus=${NGINX_VERSION}-${PKG_RELEASE} \ # nginx-plus-module-xslt \ # nginx-plus-module-xslt=${NGINX_VERSION}-${PKG_RELEASE} \ # nginx-plus-module-geoip \ # nginx-plus-module-geoip=${NGINX_VERSION}-${PKG_RELEASE} \ # nginx-plus-module-image-filter \ # nginx-plus-module-image-filter=${NGINX_VERSION}-${PKG_RELEASE} \ # nginx-plus-module-perl \ # nginx-plus-module-perl=${NGINX_VERSION}-${PKG_RELEASE} \ # nginx-plus-module-njs \ # nginx-plus-module-njs=${NGINX_VERSION}+${NJS_VERSION}-${PKG_RELEASE} \ " \ && echo "Acquire::https::plus-pkgs.nginx.com::Verify-Peer \"true\";" >> /etc/apt/apt.conf.d/90nginx \ && echo "Acquire::https::plus-pkgs.nginx.com::Verify-Host \"true\";" >> /etc/apt/apt.conf.d/90nginx \ && echo "Acquire::https::plus-pkgs.nginx.com::SslCert \"/etc/ssl/nginx/nginx-repo.crt\";" >> /etc/apt/apt.conf.d/90nginx \ && echo "Acquire::https::plus-pkgs.nginx.com::SslKey \"/etc/ssl/nginx/nginx-repo.key\";" >> /etc/apt/apt.conf.d/90nginx \ && printf "deb https://plus-pkgs.nginx.com/debian buster nginx-plus\n" > /etc/apt/sources.list.d/nginx-plus.list \ && apt-get update \ && apt-get install --no-install-recommends --no-install-suggests -y \ $nginxPackages \ gettext-base \ curl \ && apt-get remove --purge --auto-remove -y && rm -rf /var/lib/apt/lists/* /etc/apt/sources.list.d/nginx-plus.list \ && rm -rf /etc/apt/apt.conf.d/90nginx /etc/ssl/nginx # Forward request logs to Docker log collector RUN ln -sf /dev/stdout /var/log/nginx/access.log \ && ln -sf /dev/stderr /var/log/nginx/error.log COPY nginx.conf /etc/nginx/nginx.conf EXPOSE 80 STOPSIGNAL SIGTERM CMD ["nginx", "-g", "daemon off;"]
-
nginx.conf
File, dimodifikasi dari https://github.com/awslabs/ecs-nginx-reverse-proxy/tree/master/reverse-proxy/nginx. 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; upstream backend { zone name 10m; server app:3000 weight=2; server app2:3000 weight=1; } server{ listen 8080; location /api { api write=on; } } match server_ok { status 100-599; } server { listen 80; status_zone zone; # 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://backend; health_check uri=/lorem-ipsum match=server_ok; 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; } } }
-
-
Membangun sebuah citra dari file yang ada dalam direktori baru Anda:
docker build -t nginx-plus-reverse-proxy ./
path-to-your-directory
-
Unggah citra baru Anda ke sebuah repositori citra yang akan digunakan nanti.
Buat penetapan tugas untuk menjalankan NGINX Plus dan aplikasi web server di Amazon ECS
Berikutnya, Anda menyiapkan penetapan tugas.
Penetapan tugas ini memungkinkan dilakukannya pengumpulan dan ekspor 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-plus-image
dengan URI gambar untuk gambar NGINX Plus 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-plus-image
", "memory": 256, "cpu": 256, "essential": true, "portMappings": [ { "containerPort": 80, "protocol": "tcp" } ], "links": [ "app", "app2" ] }, { "name": "app", "image": "your-web-server-app-image
", "memory": 256, "cpu": 128, "essential": true }, { "name": "app2", "image": "your-web-server-app-image
", "memory": 256, "cpu": 128, "essential": true }, { "name": "nginx-prometheus-exporter", "image": "docker.io/nginx/nginx-prometheus-exporter:0.8.0", "memory": 256, "cpu": 256, "essential": true, "command": [ "-nginx.plus", "-nginx.scrape-uri", "http://nginx:8080/api" ], "links":[ "nginx" ], "portMappings":[ { "containerPort": 9113, "protocol": "tcp" } ] } ], "networkMode": "bridge", "placementConstraints": [], "family": "nginx-plus-sample-stack" } -
Mendaftarkan penetapan tugas:
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:
aws ecs create-service \ --cluster
your-cluster-name
\ --service-name nginx-plus-service \ --task-definition nginx-plus-sample-stack:1 \ --desired-count 1Pastikan 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-plus-service$
. Bagian selanjutnya menyediakan detail yang lebih lengkap.
Konfigurasikan CloudWatch agen untuk mengikis metrik Prometheus NGINX Plus
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-plus-prometheus-exporter", "sd_metrics_path": "/metrics", "sd_metrics_ports": "9113", "sd_service_name_pattern": "^nginx-plus.*" } ],
-
Dalam file yang sama, tambahkan bagian berikut di bagian
metric_declaration
untuk mengizinkan metrik NGINX Plus. Pastikan untuk mengikuti pola indentasi yang ada saat itu.{ "source_labels": ["job"], "label_matcher": "^nginx-plus.*", "dimensions": [["ClusterName", "TaskDefinitionFamily", "ServiceName"]], "metric_selectors": [ "^nginxplus_connections_accepted$", "^nginxplus_connections_active$", "^nginxplus_connections_dropped$", "^nginxplus_connections_idle$", "^nginxplus_http_requests_total$", "^nginxplus_ssl_handshakes$", "^nginxplus_ssl_handshakes_failed$", "^nginxplus_up$", "^nginxplus_upstream_server_health_checks_fails$" ] }, { "source_labels": ["job"], "label_matcher": "^nginx-plus.*", "dimensions": [["ClusterName", "TaskDefinitionFamily", "ServiceName", "upstream"]], "metric_selectors": [ "^nginxplus_upstream_server_response_time$" ] }, { "source_labels": ["job"], "label_matcher": "^nginx-plus.*", "dimensions": [["ClusterName", "TaskDefinitionFamily", "ServiceName", "code"]], "metric_selectors": [ "^nginxplus_upstream_server_responses$", "^nginxplus_server_zone_responses$" ] },
-
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-plus-scraping-support Buka AWS CloudFormation konsol di https://console.aws.amazon.com/cloudformation
. -
Mengungkap changeset yang baru dibuat. nginx-plus-scraping-support Anda akan melihat satu perubahan diterapkan ke sumber daya CWAgentConfig SSMParameter. Jalankan changeset dan tahan 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 Plus Anda
Sekarang Anda dapat menampilkan metrik NGINX Plus 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-plus-prometheus-exporter