Greenplum 日志管理
日志路径
-
$GPADMIN_HOME 是操作系统用户gpadmin的家目录路径。
-
$MASTER_DATA_DIRECTORY是Greenplum数据库master主机的数据目录。
-
$GPDATA_DIR是Greenplum数据库segment主机的数据目录。
-
host表示segment主机的主机名。
-
segprefix是segment前缀。
-
N是segment实例数量。
-
date是YYYYMMDD格式的日期。
日志参数
Greenplum的日志参数基本沿用了postgres的日志参数,主要包括以下三个部分:
-
何处写日志
-
log_destination
日志位置可以输出到stderr, csvlog, syslog
-
logging_collector
使用日志收集器,其是一个收集发送到stderr日志的后台进程,收集日志后该进程会将日志重定向到日志文件
-
log_directory
日志路径,需要logging_collector开启
-
log_filename
日志名字/模式,需要logging_collector开启,采用strftime模式设置
-
log_file_mode
日志文件权限,需要logging_collector开启,采用八进制,默认0600,代表服务拥有者拥有读写权限,
-
log_rotation_age
日志切换间隔,需要logging_collector开启,确认单个日志文件的时间长度,单位分钟,默认是24小时
-
log_rotation_size
日志切换大小,需要logging_collector开启,确认单个日志文件的最大大小,单位kb,默认10M
-
log_truncate_on_rotation
使能同名日志的truncate/overwrite, 需要logging_collector开启,注意:truncate只会基于时间的日志切换,由文件大小或者数据库重启导致的日志切换不会触发日志truncate
设置七日日志轮转:log_filename: server_log.%a
log_rotation_age:1440
log_truncate_on_rotation: on
-
-
何时写日志
-
log_min_messages
控制写入日志等级,有效值有
DEBUG5, DEBUG4, DEBUG3, DEBUG2, DEBUG1, INFO, NOTICE, WARNING, ERROR, LOG, FATAL, and PANIC,默认值为warning,注意其和客户端等级client_min_messages略有区别
-
log_min_error_statement
控制触发服务器日志记录的sql statement,等级和log_min_message相同,但是默认值为ERROR,即当sql statement造成了error或以上级别的错误后,该sql将被记录
-
log_min_duration_statement
当一条statement持续时间超过该参数后,此条statement将被记录,可用于控制慢查询日志的记录,默认单位微秒
-
log_min_duration_sample
和log_min_duration_statement差不多,但是一个采样子集,主要用在traffic过高的情况下
-
log_statement_sample_rate
顾名思义,采样率,范围0-1,默认为1
-
log_transaction_sample_rate
以事务为视角的采样率,它对于事务采样帮助比较大
-
-
记录什么日志
-
application_name
连接数据库的应用名
-
debug_print_parse
-
debug_print_rewritten
-
debug_print_plan
使能不同的调试输入,parse输出解析树,重写输出以及执行计划,这些消息位于LOG层
-
debug_pretty_print
故名思意,增加缩进,打印的更好看
-
log_checkpoints
记录checkpoint点,同时包含写入的缓冲数据以及写入时间等
-
log_connections
记录每一次对服务器的尝试连接
-
log_disconnections
记录连接断开时间和持续时间
-
log_duration
记录每一个完成的statement的持续时间
-
log_error_verbosity
日志的详细等级,VERBOSE甚至会打印源代码文件名,函数名和行号
-
log_hostname
记录客户端主机的主机名
-
log_line_prefix
日志行前缀
-
log_lock_waits
当一个session等待超过deadlock-time后,将会产生一条锁等待日志,这个参数对于诊断锁等待造成的性能问题很有用
-
log_parameter_max_length
确定非错误statement的绑定参数的可打印长度
-
log_parameter_max_length_on_error
确定错误statement的绑定参数的可打印长度
-
log_statement
控制记录哪种类型的SQL,ddl记录所有数据定义语句,mod记录所有ddl+dml
-
log_replication_commands
记录每一个replication命令
-
log_temp_files
记录临时文件名和尺寸,只记录大小大于该参数的临时文件
-
log_timezone
设置服务器日志记录的时区
-
日志视图
gp_toolkit是greenplum的一个管理schema,我们可以使用其中的几个视图查看数据库日志,gp_toolkit不在默认的搜索路径中,需要手动添加。
-
gp_log_command_timings
该视图使用外部表读取master主机上的日志文件以报告sql命令的执行时间,该视图需要超级用户权限,有一点不方便的是,它不能查看具体是哪一条sql语句。
-
gp_log_database
该视图使用外部表读取主机日志(master,segments,mirrors)并列出和当前数据库相关的日志条目,该视图需要超级用户权限,需要查询segment日志可以使用该视图
- gp_log_master_concise
该视图是master日志文件的子集,信息比较简明:
-
gp_log_system
该视图是最全面的一个日志视图,包括整个系统的所有日志条目,日志条目通过session id和logsession的组合主键进行唯一区分,列和gp_log_database差不多,区别是gp_log_database显示当前连接库的日志,而gp_log_system显示所有库的日志信息
日志清理
默认情况下pg_clog文件夹下日志会逐渐增加,日志参数log_truncate_on_rotation
只适用于基于时间的日志切换,在没有日志归档的情况,如果在基于时间切换日志模式下,某时间段内日志膨胀,则可能导致磁盘耗尽,因此需要使用日志归档或者启用linux定时任务。
-
设置log_rotation_age=1d,log_rotation_size=100M(大小可根据磁盘百分比适配)
-
不启用log_truncate_on_rotation,而设置root用户的crontab配置文件:
echo '* * * * * /root/gp_log_clean.sh' >> /var/spool/cron/root 开启定时清理任务
gp_log_clean.sh:
#!/bin/sh
logDir=/data/master/gpseg-1/pg_log
declare -i fileNumber=$(ls ${logDir}/*csv | wc -l)
echo "fileNumber = $fileNumber"
if [ ${fileNumber} -gt 7 ]; then
echo "now do log clean"
echo $(ls -t ${logDir}/*csv | tail -n 1)
rm -f $(ls -t ${logDir}/*csv | tail -n 1)
fi