夏休みもそろそろ終わりですね。 イカしたエンジニアを目指してる駆け出しエンジニアのイカちゃんです。
初記事はプログラミングについてでも、Linuxについてでもなく、WindowsゲーミングPCのモニタリングについてです。
PCでゲームを行っていると、最近なんだかPCが調子悪い、ゲームが重たくなったと感じることがあります。 それって、CPU、GPUの性能不足?それともその他に問題があるの? こういう問題の特定するのって難しいですよね。
自作erのように複数台あり、パーツごとに交換して問題を見つけることができるならいいのですが・・・
そういった逸般の誤家庭のように複数台もPCないのが一般的かと思います。
そこで、prometheusとgrafanaを入れて日々のリソースをロギングし、 PCのモニタリング環境を構築していきたいと思います。 モニタリング環境があれば、何か調子が悪い時の調査が少しは行いやすくなるかと思います。
0. 事前準備 wslの有効化 & docker install
prometheusとgrafanaはdockerで動かしていきますので、dockerを入れてない方は先にdocker for windowsを入れておいてください。 docker for windows導入にはwslの有効化が必要なため、先にwslの有効化を行います。
- wslの有効化 learn.microsoft.com
microsoft公式の導入手順通りにwslを有効化します
- docker install docs.docker.jp
docker documentを参考にdockerをinstallします。
1. 導入するアプリケーション一覧
- exporter ( windows pcのリソース情報の取得 )
- prometheus ( exporterからリソース情報を取得 )
- grafana ( prometheusが集めたリソース情報のビジュアル化 )
これら3つを導入し、導入したアプリがPCの起動時に自動起動するように設定を行っていきます。
自動起動の方法として、exporterはwindows serviceに登録 prometheus, grafanaはdockerで構築し、restart=alwaysでコンテナを自動起動させるようにします。
2. exporterの導入
windowsのリソース取得として使えるexporterは、
の2種類がメジャーなのかと思いますが、今回はOhmGraphiteだけを入れていきます。
OhmGraphiteは、マザボ,cpu,gpuの温度やファンの回転数なども取ってくれるので自宅PCのリソース監視としてはかなり使い勝手がよいと思います。 windows_exporterはvmのリソース監視と同じような感じになるので温度などは取得されていないようです。
必要に応じて使い分けてください。必要なら両方入れてもいいかと思います。
OhmGraphiteの導入
- OhmGraphiteをダウンロード
OhmGraphite GitHub から zipファイルを落としてきて、適当なところに展開をしてください。 - prometheus用にconfig修正
OhmGraphiteのreadmeのprometheus configurationを参考に、解答したzipの中にあるOhmGraphite.exe.configを編集します。 編集後のconfigは下記のような感じになるかと思います。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <add key="type" value="prometheus" /> <add key="host" value="localhost" /> <add key="port" value="4445" /> <add key="interval" value="5" /> </appSettings> </configuration>
- 動作確認
$ curl http://localhost:4445/metrics
でデータが取得できるか確認する
- windows serviceへの登録
service への登録は、SCコマンドを使用して登録します。 ターミナルを管理者権限で実行します。
$ C:\Windows\System32\sc.exe create ohmgraphite binPath= "E:\exporter\ohmgraphite\OhmGraphite.exe" start= auto
system32へのpathは通ってたのですが、scコマンドが エラー: 認識されないコマンドです
となってしまったのでフルパスで sc.exe
を実行しています。
OhmGraphite.exe
のpathは展開している場所を指定してください。私の環境では余っていたEドライブに全部配置しています。
- serviceの登録確認
windowsツールの中にある 「サービス」を開いて、ohmgraphiteが登録されているか確認を行います。 参考画像のように登録されていればOKです。
prometheusとgrafanaの導入
prometheus configの準備
prometheus config yamlのテンプレートとして、GitHubからconfigを落とすことにします。
prometheus default config から、windows-amd64.zip のものをダウンロードしその中にある prometheus.yaml
に下記を追記し、任意の場所に配置します。
scrape_configs: - job_name: "ohmgraphite" static_configs: - targets: ["host.docker.internal:4445"]
targetのhostは、dockerコンテナからホストマシンへのアクセスになるので、localhost
ではなく、host.docker.internal
になります。
docker-compose.yamlの準備
prometheus, grafanaをまとめて管理するためにdocker composeを使用します。 versionはlatestで最新版を使用するようにしていますが、version固定したい場合はversion指定を行って下さい。 prometheusのコンテナが消えた時に、過去のメトリクスも消えてしまわないようにprometheusのデータディレクトリのホストとマウントさせています。 これで、コンテナを作り直した場合にもメトリクスは残っている状態を保つことができます。
version: '3' services: prometheus: image: prom/prometheus container_name: prometheus volumes: - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml - ./prometheus/data:/prometheus command: > "--config.file=/etc/prometheus/prometheus.yml" "--storage.tsdb.retention.time=90d" ports: - 9090:9090 restart: always grafana: image: grafana/grafana container_name: grafana ports: - 3000:3000 restart: always
docker の起動
prometheus.yaml, docker-compose.yamlの準備ができたら、docker-compose.yamlを配置しているディレクトリで
docker-composeを起動させます。
※ terminal wslから /mnt/${drive}/${docker-compose のpath}
で実行
$ docker-compose up -d
初回はimageのダウンロードなどで多少時間がかかる場合があります。 起動が完了したら、コンテナが起動しているか確認を行います。
> docker-compose ps Name Command State Ports ---------------------------------------------------------------------------- grafana /run.sh Up 0.0.0.0:3000->3000/tcp prometheus /bin/prometheus --config.f ... Up 0.0.0.0:9090->9090/tcp
prometheusの動作確認
ブラウザで、prometheus http://localhost:9090
を開き
Status > Targetsを開きます。
target に、ohmgraphite のstateがupになっていれば、promethuesの設定は成功です。
endopointが表示されていない場合は、prometheus.yamlが間違っているか、dockerコンテナにconfigを配置できていないかだと思います。 endpointが表示されていて、stateがdownになっている場合は、prometheusからexpoterへのアクセスができていない状態になるので、こちらの場合は。prometheusのconfigが間違っているか、exporterが動いていないのどちらかかと思ういますので、設定を見直してください。
補足
prometheusのデータ保持期間はデフォルト15日と短いので prometheus起動時引数で期間を変更しています。 compose.yamlのcommandで渡している
--storage.tsdb.retention.time=90d
で保持期間を変更しています。 ここはストレージ容量と相談しつつ好きに変更してください。
grafanaの設定
promtheusまで動けばあとはGUIでポチポチ設定するだけで完了です。
ブラウザでgrafanaを http://localhost:3000
を開きます。
初回ログイン時は id/password は admin/admin
になります。
Data Sourceの設定
ログイン後
Configuration > Data source
AddData source
から prometheusを選択します
docker コンテナの grafana -> prometheusになるので、
HTTP URLが、http://prometheus:9090
になります。
※ コンテナ名などでホストは変わるので適時読み替えてください。
他の設定はデフォルトのままでも動きます。
設定後、Save & Test
を押して、 Data source is working
が表示されたらOKです。
Dashbordの設定
Dashbordには、Ohm Windows Desktop を設定します。 Dashbords > Import
Import via grafana.com
に、 11587
を入力し Load
します。
ダッシュボードの名前はお好きなものに、
Data sorusは先ほど設定したprometheusを選択します。
選択後 import
を実行します。
import後リソースが表示されていれば成功です。 No Dataなど表示されない場合はどこか設定を間違っているか起動していないものがいるので見直しをおこなってください。
上手く設定できていれば、画像のように現在のリソース状況が表示されています。
PC再起動後
再起動後も自動で、exporter, docker, prometheus, grafanaが動いているはずですが、何かしらが動かないなどある場合は自動起動の設定がうまくいっていないので設定の見直しを行ってください。
モニタを一つ追加して、常にgrafana表示させてモニタリングしている気分を味わえます。 注意としては、データ保持期間次第ではストレージを圧迫しますので、いい感じに調整してください。 メトリクス取得しご計画的にPCのアップグレード計画を立てましょう!
ではでは、みなさんも良きゲーミングライフを