HAWQ技术解析(十六) —— 运维监控

        与任何IT系统一样,为了保证HAWQ集群的高可用和高性能,需要进行一系列监控与维护活动。本篇讨论HAWQ推荐的运维与监控活动。

一、推荐的监控与维护任务

        表1至表5是HAWQ向系统管理员推荐定期执行的活动,包括系统与数据库监控、数据与数据库的维护、补丁与升级等,目的是要确认系统的所有组件都可以正常工作。监控工作有助于在早期发现和诊断问题。维护任务帮助用户保持系统是最新的,应用了所有错误修复和功能性改进,并且避免性能衰减。例如,解决由于臃肿的系统表或逐渐减少的剩余磁盘空间引发的问题。
        最好但不是必须在每个集群中实施所有的建议。可以根据自身的服务需求,参考执行频率和严重性级别建议,将其作为实施运维监控的指南。

1. 数据库状态监控活动

表1为推荐的数据库监控活动。

活动

过程

改进措施

列出当前down的段。如果返回任何行,这应该生成一个警告。

推荐频率:每5到10分钟运行一次。

重要性:重要

在‘postgres’数据库中运行下面的查询:

SELECT * FROM gp_segment_configuration

WHERE status <> 'u';

如果查询返回任何行,执行下面的步骤修正问题:

1.  验证down段所在主机有响应。

2.  如果主机OK,为down段检查pg_log文件,寻找段down掉的根本原因。

运行一个分布式查询检测它在所有段上运行。每个段应该返回一行。

推荐频率:每5到10分钟运行一次。

重要性:极为重要

在‘postgres’数据库中执行下面的查询:

SELECT gp_segment_id, count(*)

FROM gp_dist_random('pg_class')

GROUP BY 1;

如果查询失败,说明对集群中某些段的任务分发有问题。这是很少见的情况。检查不能被分派任务的主机,确认没有硬件或网络问题。

执行一个基本的检查,看主节点是否启动并工作。

推荐频率:每5到10分钟运行一次。

重要性:极为重要

在‘postgres’数据库中执行下面的查询:

SELECT count(*) FROM gp_segment_configuration;

如果此查询失败,主节点可能down了。重试几次并手工检查主节点的活动。如果主节点down,重启或在主主节点没有遗留进程时激活从主节点。

表1

2. 硬件与操作系统监控

表2为推荐的硬件与系统监控活动。

活动

过程

改进措施

底层平台检查,维护需求或硬件的系统停机。

推荐频率:如果可能,实时,或者每15分钟。

重要性:极为重要

设置硬件和OS错误检查。

如果需要,从HAWQ集群中移除存在硬件或OS问题的主机,解决后在添加回来。

检查HAWQ数据存储和OS的磁盘空间使用情况。

推荐频率:5到30分钟。

重要性:极为重要

设置磁盘空间检查。

. 设置阈值,当磁盘达到使用的百分比产生警告。推荐阈值为全部空间的75%。

. 不推荐空间使用接近100%时运行系统。

删除数据或文件,释放系统空间。

检查网卡错误或删除包

推荐频率:每小时。

重要性:重要

设置网卡检查。

与网络或系统团队一起解决问题。

检查RAID错误或RAID性能衰减。

推荐频率:每5分钟。

重要性:极为重要

设置RAID检查。

. 尽快替换失败的磁盘。

. 与系统管理团队一起尽快解决其它RAID或控制器问题。

检查是否有足够的I/O带宽,或I/O倾斜。

推荐频率:创建集群或怀疑硬件问题时。

运行‘hawq checkperf’应用

如果数据传输率与以下不相似,集群带宽可能不足。

. 每秒2GB的磁盘读

. 每秒1GB的磁盘写

. 每秒10GB的网络读写

如果传输率慢于期望,考虑期望的性能咨询你的架构顾问。

如果集群的机器显示出参差不齐的剖析,与系统管理团队一起解决机器错误。

表2

3. 数据维护

表3为推荐的数据维护活动。

活动

过程

改进措施

检查缺少统计信息的表。

 检查每个数据库中的‘hawq_stats_missing’视图:
SELECT * FROM hawq_toolkit.hawq_stats_missing;

在缺少统计信息的表上运行ANALYZE。

表3

4. 数据库维护

表4为推荐的数据库维护活动。

活动

过程

改进措施

标记HAWQ系统目录中被删除的行(‘pg_catalog’表模式中的表)以重用它们占用的空间。
推荐频率:每天
重要性:极为重要

清空每个系统目录:
VACUUM <table>;

定期清空系统目录,避免膨胀。

清空所有接近vacuum_freeze_min_age值的系统目录,(‘pg_catalog’模式中的表)
推荐频率:每天
重要性:极为重要

清空单个系统目录表:
VACUUM <table>;

在到达vacuum_freeze_min_age值后,VACUUM扫描表时,不再用FrozenXID替换事务ID。对这些表到达限制之前上执行vacuum。

修改表的统计信息。
推荐频率:装载数据后,执行查询前。
重要性:极为重要

分析用户表:
analyzedb -d <database> -a

定期分析更新的表,使得查询优化器能够产生高效的执行计划。

备份数据库数据。
推荐频率:每天或依照备份计划的需求
重要性:极为重要

使用PXF

最佳实践是,当数据库必须还原时,有一个当前数据库的备份。

清空系统目录(‘pg_catalog’模式中的表),维护高效目录。
推荐频率:每周,如果经常创建或删除数据库对象,可以更频繁。

VACUUM每个数据库的系统表。

优化器从系统表查询信息创建查询计划。如果系统表和索引被允许随着时间膨胀,扫描系统表会增加查询时间。

表4

5. 补丁与升级

表5为推荐的补丁与升级活动。

活动

过程

改进措施

保证任何修复的bug和提升被应用到核心。

推荐频率:至少每六个月

重要性:重要

按照厂商的指导更新Linux核心。

保持当前核心包含修复的bug和安全性问题,避免将来困难的升级。

安装HAWQ次要版本

Recommended

推荐频率:每季度

重要性:重要

总是升级到最新的系列。

保持当前的HAWQ软件包含修复的bug,性能提升,以及HAWQ集群的提升特性。

表5

        为保持HAWQ系统高效运行,必须执行这些例行系统维护任务。如数据库必须定期清理过期数据,并且更新表的统计,让查询优化器能够获得精确的信息。HAWQ DBA可以使用标准的类UNIX工具,如cron脚本,自动执行这些任务。脚本至少应该能够提供任务是否执行成功和执行时间等信息,比如使用最简单的输出日志方式实现。
除了系统级的运维,还有一项重要的工作是维护HAWQ日志文件。HAWQ中的每个数据库实例,包括master和segment,都会运行一个PostgreSQL数据库服务器,例如下面ps命令所示的master和segment数据库服务器进程:
gpadmin  655225      1  0 Apr24 ?        00:01:52 /usr/local/hawq_2_1_1_0/bin/postgres -D /data/hawq/master -i -M master -p 5432 --silent-mode=true
gpadmin  655753      1  0 Apr24 ?        00:04:28 /usr/local/hawq_2_1_1_0/bin/postgres -D /data/hawq/segment -i -M segment -p 40000 --silent-mode=true
        每个postgres都有自己的服务器日志文件。HAWQ管理应用程序,例如hawq start和gpfdist,也会生成相应的日志文件。后面会讨论这些日志文件的信息和维护策略。

二、监控HAWQ系统

        观察HAWQ系统的日常性能帮助管理员理解系统行为,计划工作流程,或排查系统问题。可以使用多种工具监控HAWQ,包括系统工具或附加组件。本节讨论监控数据库性能与行为的监控方法。可以脚本化这些监控活动,快速检查系统中存在的问题。

1. hawq_toolkit模式

        hawq_toolkit是HAWQ的一个管理模式,使用与下面类似的命令在模式的查询路径中增加hawq_toolkit模式:
db1=# set role 'gpadmin' ;
SET
db1=# set search_path to public, hawq_toolkit ;
SET
db1=#
        该模式中包含若干可以使用SQL命令访问的视图。
db1=# \dv
                                 List of relations
    Schema    |                   Name                   | Type |  Owner  | Storage 
--------------+------------------------------------------+------+---------+---------
 hawq_toolkit | __hawq_fullname                          | view | gpadmin | none
 hawq_toolkit | __hawq_is_append_only                    | view | gpadmin | none
 hawq_toolkit | __hawq_user_data_tables                  | view | gpadmin | none
 hawq_toolkit | __hawq_user_data_tables_readable         | view | gpadmin | none
 hawq_toolkit | __hawq_user_namespaces                   | view | gpadmin | none
 hawq_toolkit | __hawq_user_tables                       | view | gpadmin | none
 hawq_toolkit | hawq_log_command_timings                 | view | gpadmin | none
 hawq_toolkit | hawq_log_master_concise                  | view | gpadmin | none
 hawq_toolkit | hawq_size_of_all_table_indexes           | view | gpadmin | none
 hawq_toolkit | hawq_size_of_database                    | view | gpadmin | none
 hawq_toolkit | hawq_size_of_index                       | view | gpadmin | none
 hawq_toolkit | hawq_size_of_partition_and_indexes_disk  | view | gpadmin | none
 hawq_toolkit | hawq_size_of_schema_disk                 | view | gpadmin | none
 hawq_toolkit | hawq_size_of_table_and_indexes_disk      | view | gpadmin | none
 hawq_toolkit | hawq_size_of_table_and_indexes_licensing | view | gpadmin | none
 hawq_toolkit | hawq_size_of_table_disk                  | view | gpadmin | none
 hawq_toolkit | hawq_size_of_table_uncompressed          | view | gpadmin | none
 hawq_toolkit | hawq_stats_missing                       | view | gpadmin | none
 hawq_toolkit | hawq_table_indexes                       | view | gpadmin | none
(19 rows)
        可以使用hawq_toolkit模式中的视图查询系统目录表、日志文件、操作环境,以及获取系统状态信息。hawq_toolkit可被所有数据库用户访问,hawq_log_command_timings、hawq_log_master_concise、hawq_size_of_table_and_indexes_licensing、hawq_size_of_table_uncompressed视图的查询需要超级用户权限。

2. 监控系统状态

        HAWQ管理员必须监控系统事件,尤其是如段宕机或段主机磁盘空间不足等严重问题。下面描述如何监控HAWQ系统的健康状况,并检查HAWQ系统的状态信息。

(1)检查系统状态
        一个HAWQ系统由分布于多台机器的多个PostgreSQL实例(master和segment)构成。监控一个HAWQ系统,需要知道系统的整体信息,也要知道单个实例的状态信息。hawq state应用程序提供HAWQ系统的状态信息。
        查看master和segment的状态与配置:hawq state缺省检查segment实例,显示可用segment的和失效segment的简要状态。例如,查看HAWQ系统的状态:
[gpadmin@hdp3 ~]$ hawq state -b
20170427:10:56:54:403768 hawq_state:hdp3:gpadmin-[INFO]:--HAWQ instance status summary
20170427:10:56:54:403768 hawq_state:hdp3:gpadmin-[INFO]:------------------------------------------------------
20170427:10:56:54:403768 hawq_state:hdp3:gpadmin-[INFO]:--   Master instance                                = Active
20170427:10:56:54:403768 hawq_state:hdp3:gpadmin-[INFO]:--   Master standby                                 = hdp2
20170427:10:56:54:403768 hawq_state:hdp3:gpadmin-[INFO]:--   Standby master state                           = Standby host passive
20170427:10:56:54:403768 hawq_state:hdp3:gpadmin-[INFO]:--   Total segment instance count from config file  = 4
20170427:10:56:54:403768 hawq_state:hdp3:gpadmin-[INFO]:------------------------------------------------------ 
20170427:10:56:54:403768 hawq_state:hdp3:gpadmin-[INFO]:--   Segment Status                                    
20170427:10:56:54:403768 hawq_state:hdp3:gpadmin-[INFO]:------------------------------------------------------ 
20170427:10:56:54:403768 hawq_state:hdp3:gpadmin-[INFO]:--   Total segments count from catalog      = 4
20170427:10:56:54:403768 hawq_state:hdp3:gpadmin-[INFO]:--   Total segment valid (at master)        = 4
20170427:10:56:54:403768 hawq_state:hdp3:gpadmin-[INFO]:--   Total segment failures (at master)     = 0
20170427:10:56:54:403768 hawq_state:hdp3:gpadmin-[INFO]:--   Total number of postmaster.pid files missing   = 0
20170427:10:56:54:403768 hawq_state:hdp3:gpadmin-[INFO]:--   Total number of postmaster.pid files found     = 4
[gpadmin@hdp3 ~]$
        -b选项表示简要显示集群状态。也可以使用hawq state的-d选项,显示HAWQ master数据目录的信息:
[gpadmin@hdp3 ~]$ hawq state -d /data/hawq/master/
        该命令的输出与hawq state -b相同。

(2)检查磁盘空间使用
        查看分布式数据库和表的大小:hawq_toolkit管理模式包含几个分别用来确认的HAWQ数据库、模式、表和索引的磁盘空间使用的视图。
        查看数据库的磁盘空间使用:为了查看数据库的总大小(以字节表示),使用hawq_toolkit管理模式中的hawq_size_of_database视图,例如:
db1=# select * from hawq_toolkit.hawq_size_of_database
db1-#  order by sodddatname;
 sodddatname | sodddatsize 
-------------+-------------
 db1         |    16129012
 gpadmin     |    10394524
(2 rows)
        查看一个表使用的磁盘空间:hawq_toolkit管理模式包含几个视图用以查看表大小。表大小视图列出表的对象ID(不是表名)。为了通过表名检查其大小,必须与pg_class表中的关系名(relname)关联查询。例如:
db1=# select relname as name, sotdsize as size, sotdtoastsize as toast, sotdadditionalsize as other
db1-#   from hawq_toolkit.hawq_size_of_table_disk as sotd, pg_class
db1-#  where sotd.sotdoid=pg_class.oid order by relname;
        name         | size | toast | other 
---------------------+------+-------+-------
 sales               |    0 |     0 | 32768
 sales_1_prt_p201701 |   40 |     0 | 98304
 sales_1_prt_p201702 |    0 |     0 | 32768
 sales_1_prt_p201703 |    0 |     0 | 32768
 sales_1_prt_p201704 |    0 |     0 | 32768
 sales_1_prt_p201705 |    0 |     0 | 32768
 sales_1_prt_p201706 |    0 |     0 | 32768
 sales_1_prt_p201707 |    0 |     0 | 32768
 sales_1_prt_p201708 |    0 |     0 | 32768
 sales_1_prt_p201709 |    0 |     0 | 32768
 sales_1_prt_p201710 |    0 |     0 | 32768
 sales_1_prt_p201711 |    0 |     0 | 32768
 sales_1_prt_p201712 |    0 |     0 | 32768
 t                   |   48 |     0 | 98304
(14 rows)
        查看索引使用空间(HAWQ目前不支持索引):hawq_toolkit管理模式包含一些视图用以查看索引大小。查看一个表中所有索引的大小,使用hawq_size_of_all_table_indexes视图。查看一个特定索引的大小,使用hawq_size_of_index视图。索引大小视图通过对象ID列出表和索引(不是通过名字)。为了通过索引名检查其大小,必须与pg_class表中的关系名(relname)关联查询。例如:
db1=# select soisize, relname as indexname
db1-#   from pg_class, hawq_toolkit.hawq_size_of_index
db1-#  where pg_class.oid=hawq_size_of_index.soioid
db1-#    and pg_class.relkind='i';
 soisize | indexname 
---------+-----------
(0 rows)
(3)查看数据库对象的元数据信息
        HAWQ使用它的系统目录跟踪数据库中存储的不同对象(表、视图、索引等等)的元数据信息,还包括角色、表空间等全局对象。
        查看最后执行的操作:可以使用pg_stat_operations和pg_stat_partition_operations系统视图查找一个数据库对象上执行的操作。例如,查看t表何时创建,何时做的最后的分析:
db1=# select schemaname as schema, objname as table,
db1-#      usename as role, actionname as action,
db1-#      subtype as type, statime as time
db1-#    from pg_stat_operations
db1-#    where objname='t';
 schema | table |  role   | action  | type  |             time              
--------+-------+---------+---------+-------+-------------------------------
 public | t     | gpadmin | CREATE  | TABLE | 2017-04-18 15:39:38.858007+08
 public | t     | gpadmin | ANALYZE |       | 2017-04-21 10:16:32.42202+08
(2 rows)
        查看对象定义:可以使用\d元命令显示一个对象的定义,如表或视图。例如,查看一个名为t的表的定义:
db1=# \d t
 Append-Only Table "public.t"
 Column |  Type   | Modifiers 
--------+---------+-----------
 i      | integer | 
Compression Type: None
Compression Level: 0
Block Size: 32768
Checksum: f
Distributed randomly
(4)查看查询工作文件使用信息(文档中提到,但HAWQ 2.1.1的hawq_toolkit中没有找到)
        HAWQ的hawq_toolkit管理模式包含有关HAWQ工作文件信息的视图。当没有足够的内存在内存中执行查询时,HAWQ在磁盘上创建工作文件。工作文件信息常被用于查询的调优和排错。视图中的信息还可以用于为HAWQ配置参数hawq_workfile_limit_per_query和hawq_workfile_limit_per_segment赋值。
        hawq_toolkit模式中的视图包括:
  • hawq_workfile_entries - 当前在段上每个在磁盘上创建工作文件的运算符一行
  • hawq_workfile_usage_per_query - 当前段上每个使用磁盘空间运行的查询一行
  • hawq_workfile_usage_per_segment - 每个段一行,显示当前段上用于工作文件的磁盘空间总计。

3. HAWQ错误代码

        下面讨论描述特定数据库事件的SQL错误代码。

(1)SQL标准错误代码
        HAWQ Error Codes列出了所有错误码的定义及其所属的错误分类。有一些没有使用,但是由SQL标准定义。对于每一类错误,有一个包含最后三位字符000的标准错误码。该编码表示错误情况应列入此分类,但没有分配任何特定编码的情况。
        每个错误码的PL/pgSQL条件名与表中描述的相同,只是用下划线代替了空格。例如,错误码22012,DIVISION BY ZERO,条件名是DIVISION_BY_ZERO。条件名可能是大写或小写。
        注意:与错误不同,PL/pgSQL条件名不识别警告,这些分类是00、01和02。

三、HAWQ日志文件管理

        日志文件中包含HAWQ数据库和应用程序部署的相关信息。HAWQ的管理性日志文件保存在预定义或配置的HAWQ节点的本地文件系统上。这些日志文件有各自的位置和格式,被分别配置和管理。
        前面提到,HAWQ中的每个数据库实例(主master、从master、segment)运行一个PostgreSQL数据库进程,该进程有它自己的服务器日志文件。当用户直接运行HAWQ管理应用程序时,或者通过Ambari间接进行管理操作时,会生成相应的日志文件。另外,HAWQ集群中的其它组件(如PXF、HDFS等)也会生成它们自己的日志文件。
        可配的日志参数影响何时、在哪里记录什么消息。可以通过HAWQ服务器配置参数或者命令行选项配置HAWQ管理性日志。
        日志文件能以预定义或配置的时间间隔创建或轮换。注意,管理性日志文件不会自动截断或删除。管理员应该实施定期运行的脚本清除这些日志文件。

1. HAWQ服务器日志文件

(1)HAWQ日志文件位置
        日常日志文件分别在master和segment节点数据目录的pg_log子目录中被创建。可以从$GPHOME/etc/hawq-site.xml配置文件中的hawq_master_directory和hawq_segment_directory属性值获得master与segment数据目录的位置。
        HAWQ数据库服务器日志文件的命名习惯是hawq-<date>_<time>.[csv|log]。例如hawq-2017-01-02_061611.csv或hawq-2017-01-03_001704.log。目前,一个给定日期的日志文件的数量和大小,依赖于HAWQ服务器相关配置参数的值。

(2)HAWQ日志格式
        HAWQ服务器日志文件是文本或是逗号分隔值(CSV)格式,日志条目可能包括表6中所示的字段。

#

字段名

数据类型

描述

1

event_time

timestamp with time zone

日志条目写入时间

2

user_name

varchar(100)

数据库用户名

3

database_name

varchar(100)

数据库名

4

process_id

varchar(10)

系统进程ID(以“p”为前缀)

5

thread_id

varchar(50)

线程ID(以“th-”为前缀)

6

remote_host

varchar(100)

客户端机器的主机名/IP(如果在主节点上)。或主节点的主机名/IP(如果在段节点上)。

7

remote_port

varchar(10)

段或主节点的端口号

8

session_start_time

timestamp with time zone

会话连接打开的时间

9

transaction_id

int

主节点上的最上级的事务ID;是任何子事务的父ID。

10

gp_session_id

text

会话标识号(以“con”为前缀)

11

gp_command_count

text

一个会话中的命令数(以“cmd”为前缀)

12

gp_segment

text

段内容标识符。主节点的内容标识符恒为-1。

13

slice_id

text

片段ID(查询计划中被执行的部分)

14

distr_tranx_id

text

分布式事务标识符

15

local_tranx_id

text

本地事务标识符

16

sub_tranx_id

text 子事务标识符

17

event_severity

varchar(10)

时间重要性,值包括:LOG、ERROR、FATAL、PANIC、DEBUG1、DEBUG2

18

sql_state_code

varchar(10)

SQL状态代码

19

event_message

text

日志或错误消息文本

20

event_detail

text

错误或警告消息相关的详细消息文本

21

event_hint

text

错误或警告消息相关的提示消息文本

22

internal_query

text

内部生成的查询文本

23

internal_query_pos

int

内部生成的查询文本的游标索引

24

event_context

text

此消息生成的上下文

25

debug_query_string

text

用于debug的用户提供的查询字符串。此字符串在内部使用时可能会被修改。

26

error_cursor_pos

int

查询字符串的游标索引

27

func_name

text

生成此消息的函数

28

file_name

text

原始消息所在的源文件名称

29

file_line

int

原始消息所在源文件中的行号

30

stack_trace

Text

消息相关的堆栈跟踪文本

表6
        注意:日志条目可能不包括所有日志字段的值。例如,slice_id字段只存在于查询工作进程相关的日志条目中。

(3)检查HAWQ日志文件
        在诊断问题或获取HAWQ部署信息时都可能需要检查HAWQ日志文件。
        使用transaction_id识别事务相关的日志条目。通过查询的会话标识符gp_session_id和命令标识符gp_command_count,可以识别特定查询相关的日志条目。或者,当gp_log_format服务器配置参数值配置为csv格式的日志文件时,可以使用hawq_toolkit管理模式查询HAWQ日志文件例如,下面的hawq_toolkit查询显示所有名为mytest数据库的ERROE日志相关的时间和消息:
select logtime, logmessage from hawq_toolkit.hawq_log_master_concise 
 where logdatabase='mytest' and logseverity='error';
 
(4)在HAWQ日志文件查找
        使用HAWQ的gplogfilter应用查找一个HAWQ日志文件中与特性条件匹配的条目。缺省时,这个应用查找缺省位置的HAWQ主节点日志文件。例如,显示2017年3月1日14点之后的主节点日志文件条目:
[gpadmin@hdp3 ~]$ gplogfilter -b '2017-03-01 14:00'
        使用hawq ssh应用运行gplogfilter,能同时查找所有segment日志文件。例如,创建一个<seg_hosts>文件,包含所有感兴趣的segment主机,然后执行gplogfilter显示每个segment主机的每个日志文件的最后三行。
[gpadmin@hdp1 ~]$ echo -e "hdp1\nhdp2\nhdp3\nhdp4\n" > seg_hosts
[gpadmin@hdp1 ~]$ hawq ssh -f seg_hosts
=> source /usr/local/hawq/greenplum_path.sh
=> gplogfilter -n 3 /data/hawq/segment/pg_log/hawq*.csv

(5)配置HAWQ日志
        可以使用HAWQ服务器日志参数配置HAWQ服务器对日志的操作。这些配置参数相互协调,一起决定何时哪些信息被记录的HAWQ的服务器日志文件中。如果启用了日志轮转,可以通过HAWQ服务器配置参数控制轮转操作。HAWQ还提供了一系列服务器配置参数专门处理GPORCA查询执行器和优化器日志。
        表7-9汇总了服务器日志、日志轮转、查询执行器和查询优化器日志相关的配置参数。

服务器配置参数

描述

client_min_messages

标识客户端消息的日志级别。

debug_pretty_print

Debug输出的缩进格式,增强可读性。

gp_log_format

定义服务器日志文件格式。

gp_max_csv_line_length

设置csv文件的最大行长。

log_autostats

记录自动统计生成信息。

log_connections

记录客户端连接。

log_disconnections

记录客户端终止连接。

log_dispatch_stats

与语句调度相关的日志信息。

log_duration

记录语句执行时间。

log_error_verbosity

定义日志细节程度。

log_hostname

记录连接的主机名。

log_min_duration_statement

配置最小执行时间,小于该时间的语句不记日志。

log_min_error_statement

记录引发错误的SQL语句。

log_min_messages

日志文件的日志级别。

log_statement

控制日志中记录哪些SQL语句。

log_timezone

设置日志文件时间戳的时区。

表7 日志相关参数

服务器配置参数

描述

log_rotation_age

配置日志文件生命周期。

log_rotation_size

配置日志文件最大尺寸。

log_truncate_on_rotation

表示日志轮转时是否清空。

表8 日志轮转参数

服务器配置参数

描述

debug_print_parse

记录查询解析树。

debug_print_plan

记录查询计划。

debug_print_prelim_plan

记录初步查询计划。

debug_print_rewritten

记录查询重写输出。

debug_print_slice_table

记录查询计划分片。

log_executor_stats

记录查询执行器性能统计。

log_parser_stats

记录查询编译器性能统计。

log_planner_stats

记录遗留老优化器(planner)的性能统计。

log_statement_stats

记录编译器、执行器、优化器总的性能统计。

表9 查询执行器和查询优化器日志相关参数


(6)管理HAWQ日志文件
        HAWQ日志的输出往往很庞大,尤其是debug级别高时。因此不应该无限期地保存这些信息。通常HAWQ管理员会配置HAWQ定期轮转日志文件,创建新的日志文件。
日常的日志文件被创建在master和segment数据目录下的pg_log子目录中。尽管日志文件日常轮转,但它们不会自动截断或删除。管理员必须实现并运行脚本,定期清理主master、从master和每个segment实例上老的日志文件。例如以下命令删除master节点30天前的日志文件。
find /data/hawq/master/pg_log/ -mtime +30 -name "*.csv" -exec rm -rf {} \;

2. 应用程序的日志文件

        从命令行或使用Ambari用户界面执行集群管理动作时,会调用HAWQ应用程序。无论从哪里执行管理动作,这些应用都会记录命令执行状态及结果的日志信息。消息输出到标准输出,同时被记录到日志文件中。
        一个应用被调用时,创建并维护一个“每天”日志文件。特定应用的执行日志,在应用每次运行时追加到它当天的日志文件中。
        注意:某些应用调用其它一个或多个应用。例如,hawq restart调用hawq stop和hawq start。此时日志被写入到调用的两个应用的日志文件中。

(1)应用程序日志文件的位置
        HAWQ应用日志文件的缺省位置是/home/gpadmin/hawqAdminLogs/。可以选择指定一个其它的日志文件目录。
        HAWQ应用日志文件的命名习惯是<cmdname>_<date>.log。例如,hawq_state_20170102.log或hawq_start_20161228.log。

(2)应用程序日志文件的格式
        HAWQ应用日志文件以文本格式写入,日志条目构成如下:<date>:<time>:<pid> <cmdname>:<host>:<user>-[<loglevel>]:-<message>
        日志条目字段描述如表10所示。

日志条目字段

描述

date

条目被记录的日期(月、日、年)

time

条目被记录的时间

pid

与命令相关的进程号

cmdname

HAWQ管理应用名

host

命令执行所在主机

user

调用命令的用户名

loglevel

日志级别,是DEBUG、INFO、WARN、FATAL之一。缺省的日志级别是INFO,有更多的重要消息。

message

日志消息

表10
        注意:某些特殊管理应用命令的日志文件,例如hawq init,格式与惯例不同。

(3)检查应用程序日志条目
        可以从HAWQ应用日志文件获得更多关于命令执行的细节信息。另外,特定命令最近的日志文件提供了命令被最后调用的日期/时间及其状态信息。

(4)配置应用程序日志
        所有应用都支持详细输出和文件目录日志选项:
  • -l | –logdir <dir>:指定日志所在目录
  • -v | –verbose:输出中包括DEBUG日志消息。
        执行应用命令的--help选项,确认命令是否支持改变日志目录和输出内容的详细程度。

(5)管理应用程序日志文件
        与服务器日志一样,尽管日志文件日常轮转,但它们不会自动截断或删除。管理员必须实现并运行脚本或程序,定期清理老的管理应用日志文件。

3. 查询Minidump日志文件

        可以配置HAWQ GPORCA查询优化器生成minidump导出文件,描述给定查询的优化上下文。(minidump里的信息不是一种能够轻易理解的格式。它主要的使用场景是生成并提供minidump文件给HAWQ开发或支持团队。)
        GPORCA minidump包括以下与查询相关的信息:
  • GPORCA所需要的包含数据类型、表、操作符和统计信息的目录对象。
  • 一个查询的内部表示。
  • 一个GPORCA生成的查询计划的内部表示。
  • 传给GPORCA的系统配置信息,包括服务器配置参数,成本与统计配置,段的数量等。
  • 查询优化时生成的错误跟踪堆栈。
        在HAWQ主节点数据目录的minidumps子目录中生成查询的minidump文件。minidump文件命名习惯是Minidump_<date>_<time>_<gp_session_id>_<gp_command_count>.mdp,例如Minidump_20170102_213701_904_12.mdp。
        使用HAWQ的optimizer_minidump服务器配置参数配置生成minidump。缺省只在产生错误时生成minidump文件。

4. PXF日志文件

        PXF提供了服务和数据库两种级别的日志。PXF日志的配置于管理信息参见 PXF Logging。

5. Ambari日志文件

        Ambari日志文件可以用于帮助诊断一般的集群问题。Ambari服务器日志文件位于/var/log/ambari-server/目录下。Ambari代理日志文件位于/var/log/ambari-agent/。更多信息参见 Ambari Troubleshooting Guide。

6. Hadoop日志文件

        Hadoop日志文件由Hadoop管理。如果从源码编译生成的Hadoop,日志文件位置和配置由编译时指定的编译或安装选项所确定。

你可能感兴趣的:(HAWQ技术解析(十六) —— 运维监控)