log_alert_*

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_historypg_log错误和警告。它通常只包含了几分钟的数据。
  • log_alert_history是一个常规表,它存储数据库范围的历史错误和警告数据。它被预分区为每月的分区表。分区会根据需要进行两个月的增量添加。管理员必须要删除那些不再需要的月份的旧分区。
列名 类型 描述
logtime timestamp with time zone 该条日志的时间戳
loguser text 查询的用户
logdatabase text 被访问的数据库
logpid text 进程ID
logthread text 线程号
loghost text 主机名或者IP地址
logport text 端口号
logsessiontime timestamp with time zone 会话时间戳
logtransaction integer 事务ID
logsession text 会话ID
logcmdcount text 命令计数
logsegment text Segment编号
logslice text 切片编号
logdistxact text 分布式事务
loglocalxact text 本地事务
logsubxact text 子事务
logseverity text 日志严重性
logstate text 状态
logmessage text 日志消息
logdetail text 细节信息
loghint text 提示信息
logquery text 执行的查询
logquerypos text 查询位置
logcontext text 上下文信息
logdebug text 调试
logcursorpos text 游标位置
logfunction text 函数信息
logfile text 源代码文件
logline text 源代码行
logstack text 栈追踪

日志处理和轮转

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数据库会话同时产生错误消息,那么在它大小被检查前以及日志选择被触发前,日志文件会显著地增大。