使用GCE创建的nginx Docker容器可以在Cloud Monitoring上进行监视
首先
-
- 業務でGCEのVMを使って、nginxのリバースプロキシを作成する必要がありましたので、その際のCloud Monitoringの設定方法を説明したものになります。
-
- Stackdriver公式からnginxのモニタリング用プラグインが提供されており、本記事ではそれを使用しています。
- 以下の公式ドキュメントはVMに直接nginxをインストールするやり方を説明しているのですが、本記事ではDockerコンテナでnginxを作成する際の設定方法になります。
Nginx插件
GCP环境
本次验证的环境如下。需要构建相似的环境并可以通过SSH登录到虚拟机。
-
- GCE VM N1 n1-standard-1 CentOS7
-
- Docker version 20.10.3
-
- ゾーン:asia-northeast1-b
- 外部IPがあることも前提です(内部IPのみは検証していません)
在虚拟机上安装云监控代理。
请根据以下文章中的说明,在VM上安装Cloud Monitoring代理。
安装Cloud Monitoring代理到单个虚拟机
- エージェントのパッケージ リポジトリを追加します。
curl -sSO https://dl.google.com/cloudagents/add-monitoring-agent-repo.sh
sudo bash add-monitoring-agent-repo.sh
- エージェントのバージョン一覧を確認します。
sudo yum list --showduplicates stackdriver-agent
- 今回は6.1.1のバージョンのエージェントをインストールしました。
sudo yum install -y stackdriver-agent-6.1.1
- エージェント サービスを開始します
sudo service stackdriver-agent start
- エージェントが期待どおりに動作していることを確認します
sudo service stackdriver-agent status
stackdriver-agent is running [ OK ]
- 正常にエージェントのインストールが終了すると、Monitoring > ダッシュボード画面でMonitoringエージェントのステータスが緑色であるのを確認できます。
启用Nginx监控插件。
根据以下文章的指示,安装Nginx监控插件。还有其他插件,如Apache和MySQL等。
- Nginx のステータス情報ハンドラを有効にする必要があります。まずは、以下からファイルstatus.confを取得する。
curl -O https://raw.githubusercontent.com/Stackdriver/stackdriver-agent-service-configs/master/etc/nginx/conf.d/status.conf
server {
listen 80;
server_name local-stackdriver-agent.stackdriver.com;
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
location / {
root /dev/null;
}
}
-
- 以下のようなdefault.confファイルを用意し、上でダウンロードしてきたstatus.confの情報を記載します
VMにインストールされたエージェントがDockerコンテナ内のNginxのステータスを取得できるように、location /nginx_statusのallowにVMの内部IPを記載します。
server {
listen 80;
listen [::]:80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
allow xxx.xxx.xxx.xxx; # ←VMの内部IPを記載する
deny all;
}
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
-
- NginxのDockerコンテナを以下のコマンドで起動します。
今回、–network=”host”を指定して起動することで、ホストのネットワークを利用するようにコンテナを作成しています。こうすることで、VMのMonitoringエージェントが、VMの内部IPを指定し、http://VM内部IP:80/nginx_statusと通信できるようにしました。
sudo docker run --name nginx-server \
-v $PWD/default.conf:/etc/nginx/conf.d/default.conf \
-d --network="host" nginx
- curlコマンドでnginxのステータス情報を取得してみます。
curl http://VMの内部IP/nginx_status
- 以下のようなステータス情報が取得できます。
Active connections: 2
server accepts handled requests
5 5 14
Reading: 0 Writing: 1 Waiting: 1
- nginxのモニタリングプラグインの設定ファイルを取得します。
(cd /etc/stackdriver/collectd.d/ && sudo curl -O https://raw.githubusercontent.com/Stackdriver/stackdriver-agent-service-configs/master/etc/collectd.d/nginx.conf)
- 取得したnginx.confのファイルを以下のように書き換えます。
sudo vi /etc/stackdriver/collectd.d/nginx.conf
# This is the monitoring configuration for Nginx.
# Make sure to enable stub_status in your Nginx configuration.
# Look for NGINX_HOST and NGINX_PORT to adjust your configuration file.
LoadPlugin nginx
<Plugin "nginx">
# When using non-standard Nginx configurations, replace the below with
#URL "http://NGINX_HOST:NGINX_PORT/nginx_status"
#URL "http://local-stackdriver-agent.stackdriver.com:80/nginx_status"
URL "http://VMの内部IP:80/nginx_status"
</Plugin>
- モニタリングエージェントを再起動します。
sudo service stackdriver-agent restart
-
- GCPのMonitoring > ダッシュボード > VM Instances > VM名をクリックします。正常に設定できていると、以下のようにNGINXタブがありますので、クリックする。
nginxへのコネクション数やリクエスト数が確認できます。
nginxのエージェント指標を知りたい方は、このリンクを参照ください。
以上就是在Cloud Monitoring中监控Docker容器内的nginx的配置完成了。
请查阅文献
-
- 単一のVMにCloud Monitoring エージェントをインストールする
-
- Nginxプラグイン
- Dockerのbridgeとhostネットワークについて勉強する