proc是Linux系统下一个很重要的目录。 它跟/etc, /home等这些系统目录不同, 它不是一个真正的文件系统, 而是一个虚拟的文件系统。
我们可以通过查看proc目录下的文件来获取操作系统的一些信息,例如内存使用情况, cpu使用情况等等。但是我们怎么在postgresql中通过sql来查看这些文件的内容呢?只需要使用pg内置的file_fdw外部表, 就可以直接读取proc的内容了。
列举一些常用到的指标对应的文件:
- /proc/cpuinifo CPU的信息(型号、家族、缓存大小等)
- /proc/meminfo物理内存、交换空间
- /proc/mounts 已加载的文件系统的列表
- /proc/devices 可用设备的列表
- /proc/filesystems 被支持的文件系统
- /proc/modules 已加载的模块
- /proc/virsion 内核版本
例子:
1、安装file_fdw扩展,创建server
bill=# create extension file_fdw ;
CREATE EXTENSION
bill=# CREATE SERVER fileserver FOREIGN DATA WRAPPER file_fdw;
CREATE SERVER
2、创建对应的外部表
系统负载:
bill=# CREATE FOREIGN TABLE loadavg
bill-# (one text, five text, fifteen text, scheduled text, pid text)
bill-# SERVER fileserver
bill-# OPTIONS (filename '/proc/loadavg', format 'text', delimiter ' ');
CREATE FOREIGN TABLE
内存:
bill=# CREATE FOREIGN TABLE meminfo
bill-# (stat text, value text)
bill-# SERVER fileserver
bill-# OPTIONS (filename '/proc/meminfo', format 'csv', delimiter ':');
CREATE FOREIGN TABLE
3、查看
bill=# select * from loadavg;
one | five | fifteen | scheduled | pid
------+------+---------+-----------+-------
0.08 | 0.13 | 0.29 | 2/1292 | 32704
(1 row)
bill=# select * from meminfo ;
stat | value
-------------------+------------------------
MemTotal | 8174424 kB
MemFree | 84312 kB
MemAvailable | 3207292 kB
Buffers | 0 kB
Cached | 5628872 kB
SwapCached | 26012 kB
Active | 4862388 kB
Inactive | 2531532 kB
Active(anon) | 3378624 kB
Inactive(anon) | 1048416 kB
Active(file) | 1483764 kB
Inactive(file) | 1483116 kB
Unevictable | 0 kB
Mlocked | 0 kB
SwapTotal | 17825788 kB
SwapFree | 16887804 kB
Dirty | 16 kB
Writeback | 16 kB
AnonPages | 1745120 kB
Mapped | 2395368 kB
Shmem | 2661992 kB
Slab | 333952 kB
SReclaimable | 237624 kB
SUnreclaim | 96328 kB
KernelStack | 20688 kB
PageTables | 177952 kB
NFS_Unstable | 0 kB
Bounce | 0 kB
WritebackTmp | 0 kB
CommitLimit | 21913000 kB
Committed_AS | 16193568 kB
VmallocTotal | 34359738367 kB
VmallocUsed | 167036 kB
VmallocChunk | 34359341052 kB
HardwareCorrupted | 0 kB
AnonHugePages | 0 kB
CmaTotal | 0 kB
CmaFree | 0 kB
HugePages_Total | 0
HugePages_Free | 0
同理,想要监控其他的指标我们只需要通过建立对应外部表去解析/proc目录下面相应的文件即可。