はじめに
先日は、北海道で気温が39度を超えるなど、記録的な暑さになりましたね…
私は北国出身なので、豊橋の夏を乗り切れるのか、今から不安でいっぱいです。
気温が高いといえば、気になるのはサーバーのCPU温度。特に自宅サーバーは燃えないか不安になりますよね。
というわけで、サーバーのCPU温度を取得して、Telegrafで記録するC#のコンソールアプリケーションを作ってみました。
作ったもの
ソースはこちら。
github.com
プログラムを実行すると、標準出力に以下のようなフォーマットでデータが出力されます。
cpu_temperature,core=0,cpu=0,host=itokawa max=57,min=57,value=57 cpu_temperature,core=1,cpu=0,host=itokawa max=55,min=55,value=55 cpu_temperature,core=2,cpu=0,host=itokawa max=52,min=52,value=52 cpu_temperature,core=3,cpu=0,host=itokawa max=58,min=58,value=58 cpu_temperature,core=4,cpu=0,host=itokawa max=56,min=56,value=56 cpu_temperature,core=5,cpu=0,host=itokawa max=57,min=57,value=57 cpu_temperature,core=0,cpu=1,host=itokawa max=56,min=56,value=56 cpu_temperature,core=1,cpu=1,host=itokawa max=62,min=62,value=62 cpu_temperature,core=2,cpu=1,host=itokawa max=52,min=52,value=52 cpu_temperature,core=3,cpu=1,host=itokawa max=55,min=55,value=55 cpu_temperature,core=4,cpu=1,host=itokawa max=57,min=57,value=57 cpu_temperature,core=5,cpu=1,host=itokawa max=54,min=54,value=54
タイムスタンプはTelegraf側で付けてくれます。
あとはTelegrafの設定ファイルに、以下のように追記してサービスを再起動するとデータの記録が始まります。
[[inputs.exec]] commands = [ "C:/path/to/exe/CPUTemperature.exe" ] timeout = "5s" data_format = "influx"
パスはスラッシュで記述してください。
少しだけはまったのが、実行ファイルのパスにスペースが入るとうまく動かないという点です。
例えば、実行ファイルがC:\Program Files\
以下などにあるとうまく動きません。
使ったもの
Linuxの場合はファイルを読み込むだけでCPU温度が取得できるのですが、Windowsの場合はちょっと手間がかかります。
一般的な方法はパフォーマンスモニターやWMIC
コマンドで取得する方法ですが、私の環境ではエラーとなり取得できませんでした。
というわけでほかの方法を探すことにしました。
Nugetパッケージを物色していると、HardwareProvidersというライブラリを見つけました。
github.com
このライブラリを導入し、サンプルコードの通りにプログラムを書いたところ、無事にCPU温度が取得できました。
HardwareProvidersでは、その名の通りCPU温度以外の情報も取得できるようです。
終わりに
想像以上に簡単にCPU温度の取得ができました。
HardwareProvidersは日本語の情報は皆無ですが、とても良いライブラリだと感じました。
とりあえず、学校に行っている間にサーバーが燃えていないか不安になることはなさそうです。
何とか夏を乗り切りたいですね!