log_alert_*

log_alert_*表存储pg_log的错误和警告。

这里有三种log_alert表,所有的表都有相同的列:

  • log_alert_now是一个外部表,其数据文件存在$MASTER_DATA_DIRECTORY/gpperfmon/data中。在从数据收集代理收集数据和自动提交到log_alert_history表之间的时段,当前的pg_log错误和警告存储在log_alert_now中。
  • log_alert_tail是一个外部表,其数据文件存在$MASTER_DATA_DIRECTORY/gpperfmon/data中。这是一个过渡表,其中存放着已经从log_alert_now中清除但是还没有提交到log_alert_history的pg_log错误和警告。它通常只包含了几分钟的数据。
  • log_alert_history是一个常规表,它存储数据库范围的历史错误和警告数据。它被预分区为每月的分区表。分区会根据需要进行两个月的增量添加。管理员必须要删除那些不再需要的月份的旧分区。
列名类型描述
logtimetimestamp with time zone该条日志的时间戳
logusertext查询的用户
logdatabasetext被访问的数据库
logpidtext进程ID
logthreadtext线程号
loghosttext主机名或者IP地址
logporttext端口号
logsessiontimetimestamp with time zone会话时间戳
logtransactioninteger事务ID
logsessiontext会话ID
logcmdcounttext命令计数
logsegmenttextSegment编号
logslicetext切片编号
logdistxacttext分布式事务
loglocalxacttext本地事务
logsubxacttext子事务
logseveritytext日志严重性
logstatetext状态
logmessagetext日志消息
logdetailtext细节信息
loghinttext提示信息
logquerytext执行的查询
logquerypostext查询位置
logcontexttext上下文信息
logdebugtext调试
logcursorpostext游标位置
logfunctiontext函数信息
logfiletext源代码文件
loglinetext源代码行
logstacktext栈追踪

日志处理和轮转

Greenplum数据系统日志记录器把警告日志写到$MASTER_DATA_DIRECTORY/gpperfmon/logs目录中。

代理进程(gpmmon)执行下面的步骤来合并日志文件然后将它们加载到gpperfmon数据库:

  1. 收集日志目录(除了最新的日志,它已被syslogger打开并且正被写入)下的所有gpdb-alert-*文件到单个文件alert_log_stage中。
  2. 装载alert_log_stage文件到gpperfmon数据库中的log_alert_history表。
  3. 清空alert_log_stage文件。
  4. 移除所有的gp-alert-*文件,除了最新的那个。

syslogger每24小时或者当当前的日志文件大小超过1M时轮转一次警告日志。如果有单个错误消息包含一个大型SQL语句或者大型的栈追踪,被轮转的日志文件可能会超过1MB。此外,syslogger以块的方式处理错误消息,每个日志进程都会有一个单独的块。块的大小取决于操作系统;比如,在Red Hat Enterprise Linux上,块的大小为4096字节。如果许多Greenplum数据库会话同时产生错误消息,那么在它大小被检查前以及日志选择被触发前,日志文件会显著地增大。

上级主题: gpperfmon数据库