作者
digoal
日期
2019-12-19
标签
PostgreSQL , sql审计 , 错误日志 , 慢sql , csvlog , file_fdw , log_fdw , 保留时长
背景
习惯了直接在$PGDATA/log目录文件中查询日志(sql审计 , 错误日志 , 慢sql),发现用了rds后,只能在gui图形化下面查询日志,可能会觉得很别扭。
rds pg插件log_fdw发布,终于可以在数据库中直接查询日志了。用法很简单如下(最后以阿里云rds pg的手册为准)
https://help.aliyun.com/document_detail/142340.html
log_fdw用法
1、创建插件
postgres=> create extension log_fdw cascade;
NOTICE: installing required extension "file_fdw"
CREATE EXTENSION
2、查看插件带了哪些功能
postgres=> \df
List of functions
Schema | Name | Result data type | Argument data types | Type
--------+-----------------------------------+-------------------------------+-----------------------------------------------------------------------+------
public | create_foreign_table_for_log_file | boolean | table_name text, log_server text, log_file text | func
public | file_fdw_handler | fdw_handler | | func
public | file_fdw_validator | void | text[], oid | func
public | list_postgres_log_files | SETOF record | OUT file_name text, OUT file_size_bytes bigint | func
3、列出有哪些日志文件
postgres=> select * from list_postgres_log_files();
WARNING: 1 temporary files and directories not closed at end-of-transaction
file_name | file_size_bytes
----------------------------------+-----------------
postgresql-2019-12-19_054325.csv | 5386
(1 row)
4、创建server,可能会包掉,以后也许不需要手工创建
postgres=> create server log foreign data wrapper file_fdw ;
CREATE SERVER
5、创建指定日志文件对应的外部表
```
postgres=> select create_foreign_table_for_log_file('ft1','log','postgresql-2019-12-19_054325.csv') ;
create_foreign_table_for_log_file
t
(1 row)
```
6、查询这个外部表,相当于即时查询当前日志内容。
```
postgres=> select * from ft1;
-[ RECORD 1 ]----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
log_time | 2019-12-19 13:43:25.275+08
user_name |
database_name |
process_id | 56
connection_from |
session_id | 5dfb0dfd.38
session_line_num | 1
command_tag |
session_start_time | 2019-12-19 13:43:25+08
virtual_transaction_id |
transaction_id | 0
error_severity | LOG
sql_state_code | 00000
message | database system was shut down at 2019-12-19 05:43:18 UTC
detail |
hint |
internal_query |
internal_query_pos |
context |
query |
query_pos |
location | StartupXLOG, xlog.c:6362
application_name |
.......
```
配置日志保留个数
rds_max_log_files参数,设置保留多少个文件。默认20.
单个文件默认100MB
postgres=> select name,setting,unit from pg_settings where name ~ 'log_ro';
name | setting | unit
-------------------+---------+------
log_rotation_age | 0 | min
log_rotation_size | 102400 | kB
(2 rows)
所以默认保留2GB的日志。
参考
https://www.postgresql.org/docs/current/file-fdw.html
PostgreSQL 许愿链接
您的愿望将传达给PG kernel hacker、数据库厂商等, 帮助提高数据库产品质量和功能, 说不定下一个PG版本就有您提出的功能点. 针对非常好的提议,奖励限量版PG文化衫、纪念品、贴纸、PG热门书籍等,奖品丰富,快来许愿。开不开森.