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