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

本文介绍HAWQ集群的运维与监控方法,包括推荐的监控与维护任务、监控HAWQ系统的方法以及HAWQ日志文件的管理策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

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

1. 数据库状态监控活动

2. 硬件与操作系统监控

3. 数据维护

4. 数据库维护

5. 补丁与升级

二、监控 HAWQ 系统

1. hawq_toolkit 模式

2. 监控系统状态

(1)检查系统状态

(2)检查磁盘空间使用

(3)查看数据库对象的元数据信息

(4)查看工作文件使用信息

3. HAWQ 错误代码

三、HAWQ 日志文件管理

1. HAWQ 服务器日志文件

(1)HAWQ 日志文件位置

(2)HAWQ 日志格式

(3)检查 HAWQ 日志文件

 (4)在 HAWQ 日志文件查找

(6)管理 HAWQ 日志文件

2. 应用程序的日志文件

(1)应用程序日志文件的位置

(2)应用程序日志文件的格式

(3)检查应用程序日志条目

(4)配置应用程序日志

(5)管理应用程序日志文件

3. 查询 Minidump 日志文件

4. PXF 日志文件

5. Ambari 日志文件

6. Hadoop 日志文件


        与任何 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 次要版本。

推荐频率:每季度

重要性:重要

总是升级到最新的系列。

保持当前的 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 错误代码。

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

6. Hadoop 日志文件

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值