【ISSUE】ディスク空き容量を取得するFluentdのプラグイン作った
2024年12月23日 17:28
fluentdという様々なデータ収集を統一できるオープンソースのソフトウェアがありますが、プラグインを入れることによって様々で種類のデータを取得したり、加工したりすることができるようになります。
今回は、fluentdを動かしているPCのディスク容量を取得したかったのですが、よさげなプラグインがなかったので作ってみました。RubyGemにも公開済みです。OSSなのでPR, issue歓迎です🙇♂
https://github.com/nomunomu0504/fluent-plugin-diskfree
https://rubygems.org/gems/fluent-plugin-diskfree
プラグインをGemでインストールします。
これでプラグインが利用できるようになるので、fluentdの設定ファイルに追記します。
それぞれの設定値は以下の通りです。
オプション | 型 | デフォルト値 | 説明 |
---|---|---|---|
option | string | -k | dfコマンドに渡すオプション。 デフォルトはblock-sizeを1Kとして 表示するオプションが設定されています。 |
refresh_interval | integer | 5 | dfコマンドを実行する間隔。 デフォルトは5秒です。 |
mounted_path | string | / | チェック対象のマウントパスを指定します。 デフォルトはルートディレクトリとなっています。 |
trim_percent | bool | true | dfコマンド結果に現れる% を削除します。trueの場合、返却される値の型はint falseの場合は、返却される値の型はstringになります。 |
replace_separator | bool | true | mounted_pathで指定したパスの/ を_ に変換してから返却します。 |
tag_prefix | string | diskfree | fluentdのタグに接頭語を追加します。 |
上記のfluent.confの状態で、fluentdを実行すると以下のようなログを取得することができます。
fluentd公式サイトに、プラグインの作成方法が掲載されています。基本的にはその方法に従って作成します。
(※ 今回のプラグインを作るときには、fluentd公式の方法を見つけていなくて普通のGemを作る方法で実装してました...🥺)
このプラグインの主要な部分だけ軽く解説しておきます。ソース全体はGithub上に公開されています。
@execute_command
には実行する df コマンドを指定します。@execute_command
の定義はこんな感じです。
fluent.conf で指定した option や mounted_path を展開して実行する df コマンド作りあげます。上記のconf設定だと、このような df コマンドが実行されます。
このコマンドを実行すると以下のような結果が返ってきます。それを result の中に格納します。
(※ 表示内容は実行している端末によって異なります。)
そして result.shift
を実行することで、df コマンドのヘッダー部分を削除して、必要な情報だけが result の中に残るようにします。
ヘッダーを削除した状態で、データを分割して配列化します。
結果を出力するために必要なデータを取得できなかった場合には、エラーログを出力するようにしておきます。
あとは必要なデータから、出力するデータを生成して終了です。
[cv:issue_marketplace_engineer]
診断を受けるとあなたの現在の業務委託単価を算出します。今後副業やフリーランスで単価を交渉する際の参考になります。また次の単価レンジに到達するためのヒントも確認できます。