過去に技術検証で、Prometheus を試した際に、Windows Server の IIS メトリクスを取得する方法についてまとめました。
構成
- GCP(GCE)上で構築
- 東京リージョン(asia-northeast1)
- Prometheus サーバ
- Ubuntu Server 18.04 LTS
- 監視対象サーバ
- Windows Server 2019 × 2
Prometheus のインストール
Ubuntu Server で Prometheus を起動します。リリースページからバイナリファイルを落としてきます。
% wget https://github.com/prometheus/prometheus/releases/download/v2.10.0/prometheus-2.10.0.linux-amd64.tar.gz % tar xfz prometheus-*.tar.gz
systemd で起動できるようにします。
% useradd -s /usr/sbin/nologin -M prometheus % mv prometheus /usr/local/bin/ && chown prometheus:prometheus /usr/local/bin/prometheus % mv prometheus-* /etc/default/prometheus && chown -R prometheus:prometheus /etc/default/prometheus % mkdir -p /var/lib/prometheus && chown -R prometheus:prometheus /var/lib/prometheus % vim /etc/systemd/system/prometheus.service
# /etc/systemd/system/prometheus.service [Unit] Description=Prometheus Wants=network-online.target After=network-online.target [Service] User=prometheus Group=prometheus Type=simple ExecStart=/usr/local/bin/prometheus \ --config.file /etc/default/prometheus/prometheus.yml \ --log.level=warn \ --storage.tsdb.path /var/lib/prometheus/ \ --web.console.templates=/etc/default/prometheus/consoles \ --web.console.libraries=/etc/default/prometheus/console_libraries [Install] WantedBy=multi-user.target
起動できれば OK です。
% systemctl daemon-reload % systemctl enable prometheus % systemctl start prometheus % systemctl status prometheus
WMI Exporter のインストール
Windows は Node exporter ではなく、WMI Exporter が推奨されています。
リリースページから最新のインストーラをダウンロードします。
PS> Invoke-WebRequest -Uri "https://github.com/martinlindhe/wmi_exporter/releases/download/v0.7.0/wmi_exporter-0.7.0-amd64.msi" -OutFile "C:\wmi_exporter-0.7.0-amd64.msi" PS> msiexec /i C:\wmi_exporter-0.7.0-amd64.msi ENABLED_COLLECTORS=os,iis LISTEN_PORT=5000 PS> Remove-Item C:\wmi_exporter-0.7.0-amd64.msi
Prometheus サーバから Windows サーバに /metrics
でアクセスできれば OK です。
$ curl http://<Windows サーバ>:5000/metrics
監視設定
Prometheus サーバに戻って、設定ファイル prometheus.yml
を編集し scrape_configs.gce_sd_configs
を追加します。
# my global config global: scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. # scrape_timeout is set to the global default (10s). # Alertmanager configuration alerting: alertmanagers: - static_configs: - targets: # - alertmanager:9093 # Load rules once and periodically evaluate them according to the global 'evaluation_interval'. rule_files: # - "first_rules.yml" # - "second_rules.yml" # A scrape configuration containing exactly one endpoint to scrape: # Here it's Prometheus itself. scrape_configs: # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. - job_name: 'prometheus' # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ['localhost:9090'] # GCEのサービスディスカバリ gce_sd_configs: - project: test-project zone: asia-northeast1-a port: 5000 filter: labels.app:* # app ラベルがついたGCEインスタンスのみをフィルタ - project: test-project zone: asia-northeast1-b port: 5000 filter: labels.app:* - project: test-project zone: asia-northeast1-c port: 5000 filter: labels.app:* # PrometheusでGCEインスタンスのappラベルが検索できるようにする relabel_configs: - source_labels: [__meta_gce_label_app] target_label: app
再起動
% systemctl restart prometheus
Web UI を見るには、Nginx などのリバプロやロードバランサを作ってもいいですが、面倒であればポートフォワードしてもいいです。
$ gcloud compute ssh <踏み台サーバ> --project test-project -- -L 9090:<Prometheus サーバ>:9090
http://localhost:9090/graph
にアクセスして、 - insert metric at cursor -
のドロップダウンから wmi_iis_request_total
を選択すると、メトリクスが取得できていることが確認できます。
http://localhost:9090/targets
にアクセスすると、スクレイピングしたホストとラベルなどの情報が確認できます。
wmi_iis_requests_total{app="mediadrive-ocr-service"}
のように app で絞り込むことができます。
wmi_exporter のリソース使用量
スクレイピング間隔(設定ファイルでは 15秒)毎にCPU使用率が数%程度、メモリ使用量が 10MB 以下ととてもエコに動作してくれます。