サーバ上で稼働しているプロセスの情報を追いかけて稼働状況を把握することは常識だよと言わんばかりに、実施している人も多いと思うけど、Windowsサーバ上のサービスという観点で、稼働しいるべきサービスの状態はどうなっているのか?あるいは、停止していないといけないサービスは、想定通り停止しているよね?といった観点で監視はついつい後回しにしちゃいがち。そんな痛い思いをしたので、New Relicで簡単にできる対策をQiitaで書いてみたよ。
途中でダッシュボードの作成やNRQLの設定を頑張ってもらうところがあるんだけけど、もし、New Relic上でのダッシュボードの作成やNRQLに不安を感じているなら、こちらまでジャンプしてね。不安を取り除く良いきっかけになるかも。
はじめに
つい最近やってしまったのだけれど、パワー不足のWindowsサーバにMySQLサーバを検証目的で導入して、『さてさて、検証しますかねぇ。あれ?アクセスできない。。パワー不足で、まだ起動完了していないのかな??ちょっとコーヒーでも飲んでくるか。』となって、戻ってきても『あれ?まだ?どうした?』って経験ありません?
できる人(そもそも、できる人はこんな状況にならない...)は、原因の確認作業に入るのだけど、自分はその時もう一回コーヒー飲みにいっちゃったんだよね(涙)。
この原因は、導入時に無意識でサービスの起動オプションを手動起動に変更していたからなのだけど、もしこれがもっと重要な環境で、起動しているべきサービスが止まっていたり、停止しているべきサービスが起動していたらと思うと、恐怖で夜しか眠れないよね。
さっそく問題
こんな時どうする?
Widowsサーバのサービス起動状況を管理して、設定の誤りや想定外の状況に早く気づきたい
用意してほしいもの
無料のアカウントで試してみよう!
New Relic フリープランで始めるオブザーバビリティ!
New Relicの環境
- もし持っていない場合は、上記のQiita記事を参考にFreeの環境を取得しよう。
- 業務で既にNew Relicを使っているなら、その時に使っている業務用のメールアドレス以外のものでFreeの環境を取得しよう。
インフラストラクチャエージェントを導入するWindowsサーバ
- 色々な検証のために色々なミドルウェアやデータベースが入っているサーバだと、より効果を感じることができるよ。
今回のサンプルの環境として、AWS上にWindows2025サーバ(英語)を作成して試しているよ
合わせて、MSSQLサーバをこちらからダウンロードしてインストールしているから、余裕があれば試してみて
以前の記事では、手動でインフラストラクチャエージェントをインストールする方法をやってみたけど、ネットワーク要件とかは同じなので、セキュリティが厳しい環境の人は、確認してね。
さぁやってみよう
インフラストラクチャエージェントをGuided Installコマンドで対象Windowsサーバに導入する
こちらの記事を参考にGuided Installを試してみて。
大事なポイントは、検索する際にWindowsで検索するところだよ。
インストール後に、New RelicポータルのAll EntitiesメニューのHostsセクションに対象サーバが表示されればインストール完了だよ。そのサーバをクリックして、こんなUIが確認できたら、ちゃんとデータが収取されているよ
スクリーンショットの右下部分には、プロセスの観点での情報を確認することができるよ
リストの一番上にはsqlservr.exeが表示されていて、MSSQLサーバが稼働していることがわかるよね(プロセス情報を確認する問題も乞うご期待ください!!)
Windows Services Integrationの設定を有効化する
Windowsサーバのサービス情報を取得するには、Windows Services Integrationというインフラストラクチャエージェントの拡張機能を利用するのだけど、その設定ファイルはC:\Program Files\New Relic\newrelic-infra\integrations.dに配置されているよ
Windows Services Integrationの詳細については、公式ドキュメントを確認してね
上記のディレクトリに移動すると、winservices-config.yml.sampleというサンプルファイルが存在しているので、サンプルファイルをコピーするなどして、ymlファイルを作成するよ

サンプルファイルをコピーした場合は、ファイルの中のコメントを外して、こんな感じにあっていればOKだよ
integrations:
- name: nri-winservices
config:
exporter_bind_address: 127.0.0.1
exporter_bind_port: 9182
include_matching_entities:
windowsService.name:
- regex ".*"
#- "newrelic-infra"
#- "MSSQL$SQLEXPRESS"
scrape_interval: 30s
設定後、WindowsサービスからNew Relic Infrastructure Agentを再起動するよ
Windows Services - Dashboardテンプレートを用いて参考用ダッシュボードを作成する
New RelicポータルのDashboardsメニューを選択して、Windows Services - Dashboardをクリックするよ
今回利用しているダッシュボードのテンプレートは、作成から7日経過するとfullplatform userだけしかアクセスできなくるから、で作成するダッシュボードの参考に使うといいよ
右側から導入のためのUIがスライドしてくるよ
次に注意して設定を行うよ
- もし複数のアカウントを導入している環境なら、①で適切なアカウントを選択する必要があるよ(Windows用インフラストラクチャエージェントをインストールする時に使っているアカウントと同じにしてね)
- Widows servicesの設定は既に完了しているから、②のskip this stepをクリックするよ

導入はすぐに完了するから、Dashboardsメニュー内にWindows Services - Dashboardが追加されるよ
サービス情報が収集できていれば、そのダッシュボードにアクセスするとこんなダッシュボードがみえるよ

サービス情報が取得できない場合は、winservices-config.ymlを再確認してね
windowsService.name:配下の設定が正しくなっていないことが多いよ
用途に合わせたダッシュボードを作成する
ここからダッシュボードを自分で作ってみるよ
次のQiita記事が参考になるから、ダッシュボードの作り方に自信がない人は一度読んでみるといいよ
例えば、こんな感じで必要な情報だけ集めて自分専用のダッシュボードを作ると便利だよね
ダッシュボードの全ての作り方をここで伝えるのは情報量が多すぎるから、それぞれのチャート(色が緑や黄色になっているところ)をどうやって設定したかを共有するね
特定のサービスに対してホスト名を表示してステータスを表す

各チャートには以下のNRQLを参考に設定してね
FROM Metric
SELECT if(latest(state) = 'running', 1, if(latest(state) = 'paused', 0, -1) )
WHERE hostname = 'ここに対象となるホスト名を記載する' and metricName = 'windows_service_state'
AND display_name = '対象とするサービス名を記載する'
FACET hostname
FROM Metric
SELECT if(latest(state) = 'running', 1, if(latest(state) = 'paused', 0, -1) )
WHERE hostname = 'EC2AMAZ-XXXXXXX' and metricName = 'windows_service_state'
AND display_name = 'New Relic Infrastructure Agent'
FACET hostname
表示するデータはNRQLを記載することで定義できたから、次は表示スタイルを変更するよ
Chart type: Billboard
Visualizationパラメータ
Thresholds:
パターン1:
From: 1
To: 1
Severity level: Good
パターン2:
From: 0
To: 0
Severity level: Warning
パターン3:
From: -1
To: -1
Severity level: Critical
Billboard settings:
Visual style:
Display mode: Label only
その他のパラメータはデフォルトなままで問題ないよ
念の為、設定したパラメータのスクリーンショットを残しておくね


Chart typeで指定しているように、これはBillboardという表示スタイルを利用しているよ
すごく便利なスタイルだから、より詳細な使い方を知りたいなら次のQiita記事を読んでみて
特定のホストに対してサービス名を表示してステータスを表す

各チャートには以下のNRQLを参考に設定してね
FROM Metric
SELECT if(latest(state) = 'running', 1, if(latest(state) = 'paused', 0, -1) )
WHERE hostname = 'ここに対象となるホスト名を記載する' and metricName = 'windows_service_state'
AND display_name = '対象とするサービス名を記載する'
FACET display_name
FROM Metric
SELECT if(latest(state) = 'running', 1, if(latest(state) = 'paused', 0, -1) )
WHERE hostname = 'EC2AMAZ-XXXXXXX' and metricName = 'windows_service_state'
AND display_name = 'Windows Defender Firewall'
FACET display_name
表示スタイルのパラメータは と同じものを使ってね
重要なポイント(違い)は、FACET句にしている変数名(attribute)が、hostnameを指定しているかdisplay_nameを指定してるかの違いだよ
サービスのステータスを変更して表示変更のテストをする
ここまで到達できたら、最後にダッシュボードへ登録したサービスのステータスを変こすることで、ダッシュボード上の表示がどう変わるか試してみてね
どう?みんなうまくステータスが反映できるように設定ができたかな?
あとは、サービスのステータスを反映した時に、どれだけスムーズにステータスの表示が変わったかも合わせて体感してね
さいごに
監視したいデータを収集する設定をして、集めたデータを可視化するという流れで色々やってみてもらったけど、どうだった?一生懸命簡単になるように書いてみたけど、細かなところがうまく伝わったか本当は心配なんだよね。もし、もっと詳細に書いて欲しいと思ったら、コメントくださいな。
あと、そんな人にお勧めなオンデマンドの情報があるよ。(下の画像をクリック!!)
このトレーニングは1時間の長さなんだけど、手を動かしながら理解できる作りになっているから、1回受けてもらうと、理解度が大きく深まるよ。
New Relicは他にもみんなの役にたつ機能やサービスを提供しているから、これからも利用方法を問題形式にして、安心して触ってもらえる情報を出していくよ。
New Relic株式会社のQiita Organizationでは、
新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。