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日志文件的子集,信息比较简明:

Greenplum 日常巡检 greenplum日志_日志文件

  • 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