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

 
 
 
 
