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 経由で取得できます。
