keroqueue logs

アウトプット癖をつけるために始めました。何を書くかはよくわかりません。


Windows PCのゲーミングパフォーマンスをSplunkで可視化する #1 GPU-Zのログ取り込み

f:id:keroqueue:20190512160922p:plain

概要

Windows PCのゲーミングパフォーマンスのログをSplunkで可視化する話。シリーズとしてちょくちょくやっていこうと思う。
今回は、作成するAppの要件定義からログ取り込みの実装までをまとめた。

Splunk?

様々なログを食わせて相関的に検索することを目的とした、いわゆるSIEM製品。
構造化されてないテキストログにも対応でき(それなりに設定は大変)、検索の結果をレポートとして保存したり、ダッシュボードと呼ばれるビューを作成したりできる。
ログフォーマットの定義やダッシュボードなどは、Appとしてパッケージングすることができる。

www.splunk.com

GPU-Z?

GPUの情報を取得、表示する鉄板ソフト。ロギングすることもできる。

www.techpowerup.com

モチベーション

  • GPUのパフォーマンスをCoolに可視化したい
  • 複数の角度からパフォーマンスを比較したい

やったこと

要件定義

このシリーズで作成していくAppの要件は以下のように定義した。

ログ取り込み

  • ログは無加工で取り込むことができる
  • リアルタイムでログを取り込むことができる

ダッシュボード

  • 指定した時間範囲で、以下の内容が表示されること
    • 概要 (負荷, 温度などの、最大, 最小, 平均など)
    • タイムライン (負荷, 温度などの推移グラフ)
  • 2つの時間範囲の表示内容の比較ができること
  • 任意の時間範囲を"Activity"として保存できること
  • Activityは以下の情報を保持すること
    • Activity名
    • Activityの説明
    • 時間範囲
    • 構成情報
  • 外観がCoolであること
  • そのうちやりたい

設計

機器構成

構成は以下の通り。 GPU-Zでロギングを行うWindowsPCにForwarderを導入して、スタンドアロンのSplunkからApp(設定)を配布。ログはForwarderからSplunkへ転送する。

f:id:keroqueue:20190511033103p:plain

ログフォーマット

ログはcsvで出力される。生ログのヘッダーはこんな感じ。 f:id:keroqueue:20190430183507p:plain

とりあえず既存のcsv sourcetypeを複製して名前をつけたもので取り込むと…意味不明なフィールド名がいくつかある。 f:id:keroqueue:20190430183425p:plain

csvなのでベタ打ちでカラム名を定義してもいいのだが、おそらくログフォーマットは使うGPUGPU-Zの設定によって変わる。できるかぎり汎用的なAppを作りたいので、ここはaliasを使う方針でいくことにする。

ダッシュボード

ダッシュボードのイメージは以下。取り込んだログを使って張りぼてを作ってみた。 f:id:keroqueue:20190512160922p:plain

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作成

  • GPU-Z App for Splunk, GPU-Z Add-on for Splunk

ログフォーマットの設定。"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から確認できる。 f:id:keroqueue:20190514230321p:plain

Windows上からも、Appがデプロイされていることを確認できる。 f:id:keroqueue:20190514230340p:plain

ログ取り込みとサーチ

GPU-Zを起動して、inputs.confで設定したパスへログを出力する。 f:id:keroqueue:20190514230829p:plain

Splunkでサーチして、ログがきていることを確認。フィールドも取れてるっぽい。 f:id:keroqueue:20190514231616p:plain

XIVのベンチを回しながらリアルタイムサーチしてみた。いい感じ。
(リアルタイムサーチはエイリアスが効かない?) f:id:keroqueue:20190515001000p:plain

所感と雑記

構造化された今回のログは黒魔法(regex)をこねくりまわすことなくフィールドが取れるので、初心者向けログである感じた。
このAppの肝はダッシュボードなので、新しい事を学びながら実装していけそう。
5.0のベンチが公開されたらこいつで見てみたい。あと眠っているG12、いつ開封しよう…。