Greenplum的⽇志管理
Greenplum的⽇志管理
本篇⽂档⾸先介绍GP的⽇志架构,⽇志⼯具的使⽤说明,然后介绍⼀下⽇志的定期清理配置案例
⽬录
⽇志架构
⽇志路径
下⾯的表格展⽰了各种Greenplum数据库⽇志⽂件的位置。在⽂件路径中,date是YYYYMMDD格式的⽇期,instance是当前的实例名称,⽽n是Segment编号。
路径描述
/home/gpadmin/gpadminlogs/*很多不同种类的⽇志⽂件,每台服务器都有的⽬录
/home/gpadmin/gpadminlogs/gpstart_date.log启动⽇志
/home/gpadmin/gpadminlogs/gpstop_date.log停⽌⽇志
/home/gpadmin/gpadminlogs/gpsegstart.py_idb*gpadmin_date.log Segment启动⽇志
/home/gpadmin/gpadminlogs/gpsegstop.py_idb*gpadmin_date.log Segment停⽌⽇志
/greenplum/gpdata/master/gpseg-1/pg_log/startup.log实例启动⽇志
/greenplum/gpdata/master/gpseg-1/gpperfmon/logs/gpmon.*.log gpperfmon⽇志
/greenplum/gpdata/mirror1/gpseg4/pg_log/*.csv镜像Segment⽇志
/greenplum/gpdata/primary1/gpseg0/pg_log/*.csv主Segment⽇志
/home/log/messages全局Linux系统消息
服务器⽇志⽂件被写为逗号分隔值(CSV)格式。不是所有的⽇志项在所有的⽇志域中都有值。例如,只有与查询⼯作者进程相关的⽇志项才会有slice_id值。⼀个特定查询的相关⽇志项可以通过其会话标识符(gp_session_id)和命令标识符(gp_command_count)确定。
#域名数据类型描述
1event_time timestamp with time
zone⽇志项被写到⽇志中的时间
2user_name varchar(100)数据库⽤户名3database_name varchar(100)数据库名
4process_id varchar(10)系统进程ID(带前缀“p”)
5thread_id varchar(50)线程计数(带前缀“th”)
6remote_host varchar(100)在Master上,是客户端机器的主机名/地址。在Segment上,是Master的主机名/地址。7remote_port varchar(10)Segment或Master的端⼝号
8session_start_time timestamp with time
zone
会话连接打开的时间
9transaction_id int Master上的顶层事务ID。这个ID是任何⼦事务的⽗亲。10gp_session_id text会话标识符号(带前缀“con”)
11gp_command_count text会话内部的命令编号(带前缀“cmd”)
12gp_segment text Segment内容标识符(对主Segment带前缀“seg”,镜像Segment带前缀“mir”)。Master的内容id总是-1。
13slice_id text切⽚id(查询计划被执⾏的部分)
14distr_tranx_id text分布式事务ID
15local_tranx_id text本地事务ID
16sub_tranx_id text⼦事务ID
17event_severity varchar(10)值包括:LOG、ERROR、FATAL、PANIC、DEBUG1、DEBUG2
greenplum数据库18sql_state_code varchar(10)与⽇志消息相关的SQL状态代码
19event_message text⽇志或者错误消息⽂本
20event_detail text与错误或者警告消息相关的详细消息⽂本
21event_hint text与错误或者警告消息相关的提⽰消息⽂本
22internal_query text内部产⽣的查询⽂本
23internal_query_pos int指向内部产⽣的查询⽂本中的光标
24event_context text产⽣消息的上下⽂
25debug_query_string text带有完整细节的⽤户提供的查询字符串,⽤于调试。这个字符串可能会由于内部使⽤⽽修改。
26error_cursor_pos int指向查询字符串中的光标
27func_name text产⽣这个消息的函数
28file_name text产⽣消息的内部代码⽂件
29file_line int产⽣消息的内部代码⽂件的⾏号
30stack_trace text与这个消息相关的栈跟踪⽂本
#域名数据类型描述
⽇志说明
1.3.1 pg_log
这个⽇志⼀般是记录服务器与DB的状态,⽐如各种Error信息,定位慢查询SQL,数据库的启动关闭信息,发⽣checkpoint过于频繁等的告警信息,诸如此类。linux⾃带的路径⼀般在/home/log/postgres下⾯。该⽇志有.csv格式和.log。个⼈建议⽤前⼀种,因为⼀般会按⼤⼩和时间⾃动切割,毕竟查看⼀个巨⼤的⽇志⽂件⽐查看不同时间段的多个⽇志要难得多。另外这种⽇志是可以被清理删除,压缩打包或者转移,同时并不影响DB的正常运⾏。当我们有遇到DB⽆法启动或者更改参数没有⽣效时,第⼀个想到的就是查看这个⽇志。
共有四类,FATAL-严重告警,ERROR-错误,WARNING-警告,LOG-操作⽇志。由于是⽂本⽂件所以查询检索很不⽅便,经过观察,发现这些⽂件是有固定格式的,可以采⽤外部表的⽅式进⾏查询,同时可以利⽤相关的⼯具进⾏过滤
1.3.2 pg_xlog
这个⽇志是记录的Postgresql的WAL信息,也就是⼀些事务⽇志信息(transaction log),默认单个⼤⼩是16M,源码安装的时候可以更改其⼤⼩。这些信息通常名字是类似'000000010000000000000013'这样的⽂件,这些⽇志会在定时回滚恢复(PITR),流复制(Replication Stream)以及归档时能被⽤到,这些⽇志是⾮常重要的,记录着数据库发⽣的各种事务信息,不得随意删除或者移动这类⽇志⽂件,不然你的数据库会有⽆法恢复的风险
当你的归档或者流复制发⽣异常的时候,事务⽇志会不断地⽣成,有可能会造成你的磁盘空间被塞满,最终导致DB挂掉或者起不来。遇到这种情况不⽤慌,可以先关闭归档或者流复制功能,备份pg_xlog⽇志到其他地⽅,但请不要删除。然后删除较早时间的的pg_xlog,有⼀定空间后再试着启动Postgres。
⽇志分析可⽤通过如下⼿段(这块内容我会单独整理⼀个blog)
⽂件查看和检索
利⽤外部表⽅式进⾏查询
通过logstash⼯具进⾏定制分析
通过在安装了gpperfmon组件的情况下,通过log_alert_history 进⾏查询
查看系统视图
1. List of relations
2. Schema | Name | Type | Owner | Storage
3. ------------+------------------------+------+----------+---------
4. gp_toolkit | gp_log_command_timings | view | digoal | none -- 统计
5. gp_toolkit | gp_log_database | view | digoal | none -- 这个包含当前数据库⽇志
6. gp_toolkit | gp_log_master_concise | view | digoal | none -- 统计
7. gp_toolkit | gp_log_system | view | digoal | none -- 这个包含所有⽇志
8. (4 rows)
通过gplogfilter⼯具来查匹配指定标准的⽇志数据(包含segment gpssh)
1.3.3 pg_clog
pg_clog这个⽂件也是事务⽇志⽂件,但与pg_xlog不同的是它记录的是事务的元数据(metadata),这个⽇志告诉我们哪些事务完成了,哪些没有完成。这个⽇志⽂件⼀般⾮常⼩,但是重要性也是相当⾼,不得随意删除或者对其更改信息。
总结:
pg_log记录各种Error信息,以及服务器与DB的状态信息,可由⽤户随意更新删除
pg_xlog与pg_clog记录数据库的事务信息,不得随意删除更新,做物理备份时要记得备份着两个⽇志。
1.4 数据库的启动和关闭⽇志
程序⽇志⽂件:使⽤gpstart,gpstop 等相关命令的⽇志 缺省位于~/gpAdminLogs⽬录下 命令⽅式:<script_name>_.log ⽇志记录的格式: ::::[INFO|WARN|FATAL]:
⽇志常⽤的参数和配置⽅案
下⾯是Greenplum与安全相关的审计(或者⽇志)服务器配置参数,它们可以在f配置⽂件中设置:域名值范围默认描述
log_connections Boolean off 这会对服务器⽇志输出⼀⾏详细描述每个成功的连接。某些客户端程序(如psql)在决定是否要求⼝令时会尝试连接两次,因此重复的“connection received”消息并⾮总是表⽰问题。
log_disconnections Boolean off 在⼀个客户端会话终⽌时,这会在服务器⽇志中输出⼀⾏,其中会包括该会话的持续时间。
log_statement NONEDDLMODALL ALL 控制那些SQL语句会被记录。DDL记录所有数据定义命令,如CREATE、ALTER和DROP命令。MOD记录所有DDL语句外加INSERT、UPDATE、DELETE、TRUNCATE以及COPY FROM。如果PREPARE和EXPLAIN ANALYZE语句中如果包含有适当类型的命令,它们也会被⽇志记录。
log_hostname Boolean off 连接⽇志消息默认只显⽰连接主机的IP地址。把这个选项打开会导致主机名也被记录。注意这依赖于⽤户的主机名解析设置,⽽且这有可能会带来不可忽视的性能损失。
log_duration Boolean off致使每⼀个满⾜log_statement的完成语句的持续时间被记录。log_error_verbosity TERSEDEFAULTVERBOSE DEFAULT为被记录的每条消息控制写⼊到服务器⽇志的细节多少。
log_min_duration_statement毫秒数, 0, -1-1如果语句的持续时间⼤于等于指定的毫秒数,则在⼀个⽇志⾏中记录该语句和它的持续时间。将这个参数设置为0将打印出所有的语句及其持续时间。-1禁⽤这⼀特性。例如,如果⽤户将它设置为250,那么所有运⾏时间⼤于等于250ms的SQL语句将被记录。在跟踪应⽤中的未优化查询时,启⽤这⼀选项⾮常有⽤。
log_min_messages DEBUG5 DEBUG4
DEBUG3 DEBUG2
DEBUG1 INFO NOTICE
WARNING ERROR LOG
FATAL PANIC
NOTICE
控制哪些消息级别会被写⼊到服务器⽇志。每个级别包括其后的所有级别。
级别越靠后,发送到⽇志的消息就越少。
log_rotation_age 任意有效的时间表达式(数
字和单位)
1d
决定个体⽇志⽂件的最⼤⽣存时间。在这个时间过去之后,⼀个新的⽇志⽂
件将被创建。设置为零可禁⽤新⽇志⽂件基于时间创建。
log_statement_stats Boolean off 对每个查询,写⼊查询解析器、规划器和执⾏器的整体性能统计信息到服务器⽇志中。这是⼀种粗糙的画像⼿段。
og_truncate_on_rotation Boolean off 截断(重写)⽽不是追加到任何现存的同名⽇志⽂件。仅当⼀个新⽂件由于基于时间的轮转⽽被打开时,截断才会发⽣。例如,使⽤这个设置配合gpseg#-%H.log这样的log_filename会导致产⽣24个每⼩时的⽇志⽂件,然后循环地重写它们。关闭这⼀设置时,预先已经存在的⽂件在所有的情况下都会被追加内容。
如下⼀共三个配置⽅案,可根据业务需求进⾏配置
参数说明
logging_collector是否打印log log_line_prefix⽇志格式
log_directory⽇志保存⽬录
log_statement打印sql 类型
参数说明
log_min_duration_statement*记录超时sql,超时多少秒记录* *log⽇志⽅案(1)每天⽣成⼀个⽇志⽂件*
log_filename = ‘postgresql-%Y-%m-%d_%H%M%S.log⽂件名
log_truncate_on_rotation = off⽂件存在是否覆盖
log_rotation_age = 1d间隔多长时间更换新⽂件
log_rotation_size = 0超过⼤⼩则换⼀个⽂件
log⽇志⽅案(2)每当⽇志写完⼀定⼤⼩,则换⼀个
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log
log_truncate_on_rotation = off
log_rotation_age = 0
log_rotation_size = 10M
*log⽇志⽅案(3)只保留7天的⽇志,循环替换*
log_filename = 'postgresql-%a.log星期
log_truncate_on_rotation = on开启覆盖
log_rotation_age = 1d
log_rotation_size = 0
⽇志过滤⼯作的使⽤
检查segment⽇志
gplogfilter -n 3 输出最后3⾏⽇志
如果想查看segment节点的⽇志,那么可以执⾏以下命令
gpssh -f seg_hosts  #seg_hosts为segment节点的主机列表
=>source /usr/local/greenplum-db/greenplum_path.sh
=>gplogfilter -n 3 /greenplum/gpdata/primary1/gpseg*/pg_log/gpdb-*.csv  #segment节
gplogfilter+gpssh⼯具组合在所有segment节点进⾏查
可以通过gplogfilter+gpssh组合使⽤,集中查看log

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。