PostgreSQL の Foreign Data Wrapper (FDW) で Linux サーバーのメモリー情報を取得する


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