どうもアンバサダーです。
表題の通り、WindowsのCPUコアごとの使用率を出すMackerel Pluginを作ってみました。
このプラグインを使用すると、以下のようなメトリックをMackerelに投稿します。
ps1ファイルへのフルパスでも動くとは思いますが、ps1がPowerShell Coreに関連付けられていたり、PowerShell Scriptの実行が許可されていない、みたいな環境ではbatを指定してください。
これは、CPUの使用率を取得するのにWin32_PerfFormattedData_PerfOS_ProcessorをGet-WmiObject経由で使用しているためです。
気が向いたらGet-CimClassで書き直そうと思います。
■ 各CPUコアごとのprocessorとidleの合計値が100%にならないことがあります
これは、Win32APIの仕様らしいです。(Windows版mackerel-agentで取得できるCPU使用率のメトリックも合計値が100%になっていないのでどうしようもなさげ)
辛い部分は色々とあってそれはまた別のエントリでまとめようと思いますが、公式のプラグイン集が使えないのが一番辛い。ソースを持ってきてビルドすれば動くヤツもあるとは思いますが、基本あそこのプラグインはLinux向けなので厳しいと思います。
ということで、なければ作ればいいじゃないの精神で、とりあえずPowerShell ScriptでMackerel Pluginを書く練習として、簡単そうなものを題材として作成してみました。
なお作ってみた感想としては、思った以上にPowerShellが強力でした。
表題の通り、WindowsのCPUコアごとの使用率を出すMackerel Pluginを作ってみました。
このプラグインを使用すると、以下のようなメトリックをMackerelに投稿します。
使い方
READMEに書いてある通り、batファイルへのフルパスを指定してください。ps1ファイルへのフルパスでも動くとは思いますが、ps1がPowerShell Coreに関連付けられていたり、PowerShell Scriptの実行が許可されていない、みたいな環境ではbatを指定してください。
制限事項
■ PowerShell Coreでは動きません。これは、CPUの使用率を取得するのにWin32_PerfFormattedData_PerfOS_ProcessorをGet-WmiObject経由で使用しているためです。
気が向いたらGet-CimClassで書き直そうと思います。
■ 各CPUコアごとのprocessorとidleの合計値が100%にならないことがあります
これは、Win32APIの仕様らしいです。(Windows版mackerel-agentで取得できるCPU使用率のメトリックも合計値が100%になっていないのでどうしようもなさげ)
作ろうと思った経緯
最近、Windowsにmackerel-agentを入れて遊んでるんですが、これが辛い。辛い部分は色々とあってそれはまた別のエントリでまとめようと思いますが、公式のプラグイン集が使えないのが一番辛い。ソースを持ってきてビルドすれば動くヤツもあるとは思いますが、基本あそこのプラグインはLinux向けなので厳しいと思います。
ということで、なければ作ればいいじゃないの精神で、とりあえずPowerShell ScriptでMackerel Pluginを書く練習として、簡単そうなものを題材として作成してみました。
なお作ってみた感想としては、思った以上にPowerShellが強力でした。
コメント