タイトルままということで。
goでゼロからexporterを書こう、sysloadの実装を今更ながら把握しておこうというモチベーションのもとsysloadをprometheusのexporterとして実装してみました。
Dashboardも公開しているの動かして見るぜーという方はこちらもどうぞ。 クエリみて頂ければわかりますが、設計上sysloadの値は単純なgaugeなので既存のノード用ダッシュボードに組み込むのも簡単だとおもいます。
sysload is 何
詳細はこちらの記事とgithubレポジトリを参照頂ければとおもいます。
もともとLoad Averageの不具合を起因としてサーバ負荷(システムリソースのsaturation)を0-100で表す指標として開発されたものです。 単純なCPU負荷だけでなく、nicからの割り込みを受けているCPU群とIOを考慮して高い値が採用される設計になっているのでいずれかのリソースが飽和状態であるということがわかりやすく表すことができるようになっています。
exporterの実装について
基本は写経スタイルで、一部パラメータまわりを扱いやすくしたり細かい部分を調整しつつ、メトリクスの構造をexporter的な形式に寄せた感じ(のつもり)になってます。
prometheusのexporterはcounterで扱うスタイルが基本ですが、sysload自体はgaugeの値ですしその他追加で取得しているメトリクスや1,5,15分平均もそのまま計算した値を採用しています。
移植にあたって変更した点は細かい点ですが
- 外部コマンドなど細かい部分の依存をなくした
- interruptチェックにあたってのデバイス候補のデフォルト値変更(追加)
- その他データ構造を取り回ししやすいようにいくつか修正
あたりになります。
個人的にメンテしてる環境でさくっと使いたいということで簡易なdebパッケージのみ提供してますが、systemdを前提にしているのでubuntuであれば16.04xenial以降の環境であれば動作するとおもいます、バイナリは大体どこでも動くかと。
ライセンスはオリジナル実装がGPL 2.0なのでそのようになっています。
今後のメンテなど
せっかく実装してみたのでぼちぼち動かしつつメンテしていきたいと思います。
- とりあえず実装して個人のサーバで動作確認しましたというレベルなので、とりあえず何らかのテストを実装したい
- interruptチェックまわりはパラメータ依存ではなくもう少し賢くできるといいんじゃないかと思っているのでここらへんはなにか良き方法があればどーにしかしたい
- issueにとりあえず入れてるけどコンテナから動かせるように/procのマウントパスオプションを追加する
などなど