1. 程式人生 > >HAWQ技術解析(十六) —— 運維監控

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系統的狀態:
[[email protected] ~]$ 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
[[email protected] ~]$
        -b選項表示簡要顯示叢集狀態。也可以使用hawq state的-d選項,顯示HAWQ master資料目錄的資訊:
[[email protected] ~]$ 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點之後的主節點日誌檔案條目:
[[email protected] ~]$ gplogfilter -b '2017-03-01 14:00'
        使用hawq ssh應用執行gplogfilter,能同時查詢所有segment日誌檔案。例如,建立一個<seg_hosts>檔案,包含所有感興趣的segment主機,然後執行gplogfilter顯示每個segment主機的每個日誌檔案的最後三行。
[[email protected] ~]$ echo -e "hdp1\nhdp2\nhdp3\nhdp4\n" > seg_hosts
[[email protected] ~]$ 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,日誌檔案位置和配置由編譯時指定的編譯或安裝選項所確定。