本日も乙

ただの自己満足な備忘録。

PrometheusでWindows ServerのIISメトリクスを取得する

過去に技術検証で、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 を選択すると、メトリクスが取得できていることが確認できます。

prometheus-wmi-iis-request-total

http://localhost:9090/targets にアクセスすると、スクレイピングしたホストとラベルなどの情報が確認できます。

prometheus-targets

wmi_iis_requests_total{app="mediadrive-ocr-service"} のように app で絞り込むことができます。

prometheus-wmi-iis-request-total-filstered

wmi_exporter のリソース使用量

スクレイピング間隔(設定ファイルでは 15秒)毎にCPU使用率が数%程度、メモリ使用量が 10MB 以下ととてもエコに動作してくれます。

task-manager-wmi-exporter

参考