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
是一个常规表,它存储数据库范围的历史错误和警告数据。它被预分区为每月的分区表。分区会根据需要进行两个月的增量添加。管理员必须要删除那些不再需要的月份的旧分区。
列名 | 类型 | 描述 |
---|---|---|
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
数据库:
- 收集日志目录(除了最新的日志,它已被syslogger打开并且正被写入)下的所有
gpdb-alert-*
文件到单个文件alert_log_stage
中。 - 装载
alert_log_stage
文件到gpperfmon
数据库中的log_alert_history
表。 - 清空
alert_log_stage
文件。 - 移除所有的
gp-alert-*
文件,除了最新的那个。
syslogger每24小时或者当当前的日志文件大小超过1M时轮转一次警告日志。如果有单个错误消息包含一个大型SQL语句或者大型的栈追踪,被轮转的日志文件可能会超过1MB。此外,syslogger以块的方式处理错误消息,每个日志进程都会有一个单独的块。块的大小取决于操作系统;比如,在Red Hat Enterprise Linux上,块的大小为4096字节。如果许多Greenplum数据库会话同时产生错误消息,那么在它大小被检查前以及日志选择被触发前,日志文件会显著地增大。
上级主题: gpperfmon数据库