Windows PCのゲーミングパフォーマンスをSplunkで可視化する #1 GPU-Zのログ取り込み
概要
Windows PCのゲーミングパフォーマンスのログをSplunkで可視化する話。シリーズとしてちょくちょくやっていこうと思う。
今回は、作成するAppの要件定義からログ取り込みの実装までをまとめた。
Splunk?
様々なログを食わせて相関的に検索することを目的とした、いわゆるSIEM製品。
構造化されてないテキストログにも対応でき(それなりに設定は大変)、検索の結果をレポートとして保存したり、ダッシュボードと呼ばれるビューを作成したりできる。
ログフォーマットの定義やダッシュボードなどは、Appとしてパッケージングすることができる。
- 作者:James D. Miller
- 出版社/メーカー: Packt Publishing
- 発売日: 2018/03/29
- メディア: ペーパーバック
GPU-Z?
GPUの情報を取得、表示する鉄板ソフト。ロギングすることもできる。
モチベーション
- GPUのパフォーマンスをCoolに可視化したい
- 複数の角度からパフォーマンスを比較したい
やったこと
要件定義
このシリーズで作成していくAppの要件は以下のように定義した。
ログ取り込み
- ログは無加工で取り込むことができる
- リアルタイムでログを取り込むことができる
ダッシュボード
- 指定した時間範囲で、以下の内容が表示されること
- 概要 (負荷, 温度などの、最大, 最小, 平均など)
- タイムライン (負荷, 温度などの推移グラフ)
- 2つの時間範囲の表示内容の比較ができること
- 任意の時間範囲を"Activity"として保存できること
- Activityは以下の情報を保持すること
- Activity名
- Activityの説明
- 時間範囲
- 構成情報
- 外観がCoolであること
- そのうちやりたい
- リアルタイムモード
- スマートフォン版
設計
機器構成
構成は以下の通り。 GPU-Zでロギングを行うWindowsPCにForwarderを導入して、スタンドアロンのSplunkからApp(設定)を配布。ログはForwarderからSplunkへ転送する。
ログフォーマット
ログはcsvで出力される。生ログのヘッダーはこんな感じ。
とりあえず既存のcsv sourcetypeを複製して名前をつけたもので取り込むと…意味不明なフィールド名がいくつかある。
csvなのでベタ打ちでカラム名を定義してもいいのだが、おそらくログフォーマットは使うGPUやGPU-Zの設定によって変わる。できるかぎり汎用的なAppを作りたいので、ここはaliasを使う方針でいくことにする。
ダッシュボード
ダッシュボードのイメージは以下。取り込んだログを使って張りぼてを作ってみた。
App
作成するAppは以下のとおり。
App名 | フォルダ名 | 説明 |
---|---|---|
GPU-Z App for Splunk | splunk_app_gpuz | フィールド抽出の設定やダッシュボードなどが含まれる。Search Head向け。 |
GPU-Z Add-on for Splunk | splunk_ta_gpuz | GPU-Z App for Splunk からダッシュボード関連のファイルを抜いたもの。ForwarderやIndexer向け。 |
forwarder_inputs | forwarder_inputs | inputs関連の設定が含まれる。Forwarder向け。 |
実装
ログ取り込み設定
ログ取り込み周りをさくっと実装してく。
App作成
ログフォーマットの設定。"FIELDALIAS-gpuz"でフィールド名を再定義している。元のフィールド名には末尾に隠れスペースがあったりするのでちょっとハマった。
# props.conf [gpuz] HEADER_FIELD_LINE_NUMBER = 1 INDEXED_EXTRACTIONS = csv KV_MODE = none LINE_BREAKER = ([\r\n]+)|([\n]+) NO_BINARY_CHECK = true SHOULD_LINEMERGE = false TRUNCATE = 0 TIME_FORMAT = %Y-%m-%d %H:%M:%S.%3N TIME_PREFIX = ^ TZ = Asia/Tokyo category = Custom description = GPU-Z Sensor Log disabled = false pulldown_type = true FIELDALIAS-gpuz = "Bus Interface Load " AS bus_interface_load_percent "CPU Temperature __xB0C" AS cpu_temperature Date AS datetime "Fan 1 Speed _RPM_ _RPM" AS fan1_speed_rpm "Fan 1 Speed ___ " AS fan1_speed_percent "Fan 2 Speed _RPM_ _RPM" AS fan2_speed_rpm "Fan 2 Speed ___ " AS fan2_speed_percent "GPU Clock _MHz" AS gpu_load_mhz "GPU Load " AS gpu_load_percent "GPU Temperature __xB0C" AS gpu_temperature "Memory Clock _MHz" AS gpu_mem_load_mhz "Memory Controller Load " AS mem_controller_load_percent "Memory Used _MB" AS gpu_mem_used "PerfCap Reason " AS perfcap_reason "Power Consumption _W_ _W" AS gpu_power "Power Consumption ___ __ TDP" AS gpu_power_tdp_percent "System Memory Used _MB" AS mem_used "VDDC _V" AS vddc "Video Engine Load " AS video_engine_load_percent
- forwarder_inputs
ログ転送するファイルのパスなどを指定。
# inputs.conf [monitor://D:\logs\gpuz] index=gpuz sourcetype=gpuz
App配布設定
Splunkサーバーで/opt/splunk/etc/system/local/serverclass.conf
を作成。
splunk_ta_gpuz, forwarder_inputsの2つをForwarderに配る。
# serverclass.conf [serverClass:gpuz] whitelist.0 = FORWARDER_HOSTNAME_OR_IP [serverClass:gpuz:app:splunk_ta_gpuz] restartSplunkWeb = 0 restartSplunkd = 0 stateOnClient = enabled [serverClass:gpuz:app:forwarder_inputs] restartSplunkWeb = 0 restartSplunkd = 0 stateOnClient = enabled
また、splunk_ta_gpuz, forwarder_appを/opt/splunk/etc/deployment-apps/
に配置しておく。
テスト
Appのデプロイ
Forwarderを起動すると、設定に応じてDeployment Server(Splunkサーバー)からAppを取得する。 Forwarderの状態は、SplunkサーバーのForwarder Managementから確認できる。
Windows上からも、Appがデプロイされていることを確認できる。
ログ取り込みとサーチ
GPU-Zを起動して、inputs.confで設定したパスへログを出力する。
Splunkでサーチして、ログがきていることを確認。フィールドも取れてるっぽい。
XIVのベンチを回しながらリアルタイムサーチしてみた。いい感じ。
(リアルタイムサーチはエイリアスが効かない?)
所感と雑記
構造化された今回のログは黒魔法(regex)をこねくりまわすことなくフィールドが取れるので、初心者向けログである感じた。
このAppの肝はダッシュボードなので、新しい事を学びながら実装していけそう。
5.0のベンチが公開されたらこいつで見てみたい。あと眠っているG12、いつ開封しよう…。