PostgreSQL の Foreign Data Wrapper (FDW) で Linux メモリ情報取得
PostgreSQL の Foreign Data Wrapper (FDW) という外部テーブル機能を利用すると 様々な情報を取得できますが、通常は外部のデータベースと接続して他のデータベースの情報を 取り込む利用法が多いかと思います。しかしここでは PostgreSQL データベースが稼働している Linux サーバーのメモリー情報を外部テーブル機能を使って取得してみます。
Linux では /proc/meminfo というデバイス(ファイルのように扱える)からメモリー情報を取得できますので、 /proc/meminfo を外部テーブルを通して情報を取得します。
file_fdw をインストールする
まず最初に file_fdw というファイルにアクセスする為の外部テーブル機能を導入します。CREATE EXTENSION file_fdw;
外部サーバーを作成
次に外部ーサーバーと呼ばれるものを作成します。外部サーバーには fs という名称を付けています。CREATE SERVER fs FOREIGN DATA WRAPPER file_fdw;
外部テーブルの作成
そしてさらに外部テーブルを作成します。CREATE FOREIGN TABLE meminfo ( stat text, value text ) SERVER fs OPTIONS ( filename '/proc/meminfo', format 'csv', DELIMITER ':' );
このテーブルの定義ですが、/proc/meminfo が次のような情報を表示しますので 2つの列を定義し、区切り文字を ":" とすることで各列値を区切って定義します。
$ cat /proc/meminfo MemTotal: 32880156 kB MemFree: 2832728 kB Buffers: 274364 kB Cached: 28281376 kB SwapCached: 412 kB Active: 19553140 kB Inactive: 9559724 kB ..... (以下省略) .....
外部テーブルを SELECT してメモリー情報を取得
これで外部テーブル経由で /proc/meminfo にアクセスできる準備が整いましたので、 "SELECT * FROM meminfo;" を実行してみましょう。# SELECT * FROM meminfo; -------------------+------------------------ stat | value -------------------+------------------------ MemTotal | 32880156 kB MemFree | 2835800 kB Buffers | 274364 kB Cached | 28281204 kB SwapCached | 412 kB Active | 19549488 kB Inactive | 9559648 kB Active(anon) | 2553204 kB Inactive(anon) | 201040 kB Active(file) | 16996284 kB Inactive(file) | 9358608 kB Unevictable | 0 kB Mlocked | 0 kB SwapTotal | 6709244 kB SwapFree | 6706184 kB Dirty | 88 kB Writeback | 0 kB AnonPages | 553228 kB Mapped | 2223200 kB Shmem | 2200676 kB Slab | 679648 kB SReclaimable | 644328 kB SUnreclaim | 35320 kB KernelStack | 4080 kB PageTables | 21064 kB NFS_Unstable | 0 kB Bounce | 0 kB WritebackTmp | 0 kB CommitLimit | 23149320 kB Committed_AS | 3233904 kB VmallocTotal | 34359738367 kB VmallocUsed | 205240 kB VmallocChunk | 34359526576 kB HardwareCorrupted | 0 kB AnonHugePages | 491520 kB HugePages_Total | 0 HugePages_Free | 0 HugePages_Rsvd | 0 HugePages_Surp | 0 Hugepagesize | 2048 kB DirectMap4k | 10240 kB DirectMap2M | 33544192 kB -------------------+------------------------ (42 rows)
上記の通り問題無行く情報が取得できています。/proc/meminfo だけでなく /proc/cpuinfo やその他の情報も PostgreSQL 経由で取得できます。