node_exporter
Linux/UNIXマシン自体のハードウェア・OSレベルのメトリクス(CPU、メモリ、ディスクI/O、ネットワーク、ファイルシステムなど)をPrometheus形式で公開する公式exporter。Go製のシングルバイナリで、/proc・/sys以下の仮想ファイルシステムをパースしてメトリクス化する「collector」がドメインごとにプラグイン的に実装されている(cpu、meminfo、diskstats、filesystemなど)。各collectorは共通のCollectorインターフェースを実装し、/metricsへのスクレイプ時にNodeCollectorが全collectorのUpdate()を呼び出してメトリクスを集約する。
動作モデル
Prometheus本体と同じくpull型。node_exporterはHTTPサーバーとして起動し(デフォルトポート9100)、Prometheusサーバー側が/metricsエンドポイントを定期的にスクレイプしに来る。
textfile collector
--collector.textfile.directory=<dir>フラグで指定したディレクトリ内の*.promファイル(Prometheusのtext exposition format)をスクレイプのたびに読み込み、そのままメトリクスとしてマージして公開する機能。node_exporter自身が対応していない独自メトリクスや、cronジョブの実行結果(“最後に成功した時刻"など)を後付けで露出させたい場合に使う。
- ファイルごとに
node_textfile_mtime_seconds{file="..."}(最終読み込み成功時のmtime)が自動付与される - タイムスタンプ付きの行(
metric_name 1 1234567890000のような3カラム目)はサポートされておらず、含まれているとそのファイル全体がパース不可としてスキップされる(他の.promファイルには影響しない、ファイル単位のエラー)。この場合node_textfile_scrape_errorが1になる - 書き込み中の不完全な内容を読まれないよう、一時ファイルに書いてから
mvでリネームするatomicな置き換えが推奨パターンとして機能することを実験で確認した(詳細はtextfile collectorを動かした実験記録参照)