注:本文通过测试对gs_collector执行过程进行了粗略的了解,希望能起到抛砖引玉作用,还望对这块更熟悉的大牛多多指正。
一、背景信息
openGauss数据库提供了一个名为gs_collector的信息收集工具,可用于在openGauss出现故障时来收集数据库操作系统及数据库(日志、配置文件)等相关信息,方便分析定位数据库故障及相关性能问题。
二、前提条件
根据openGauss官网信息资料,使用gs_collector信息收集工具需要依赖于一些操作系统工具,如gstack等,如未安装该工具,提示错误后,会跳过该收集项。
三、语法信息
gs_collector命令是在非root用户下使用,gs_collector工具是在$GPHOME/script目录下,在非root用户下使用which gs_collector 可查看gs_collector的详细位置。
[omm@opengauss-node1 ~]$ which gs_collector /opt/gaussdb/gausstools/om/script/gs_collector
复制
使用gs_collector --help可查看gs_collector的详细用法。
[omm@opengauss-node1 ~]$ gs_collector --help gs_collector is a utility to collect information about the cluster. Usage: gs_collector -? | --help gs_collector -V | --version gs_collector --begin-time="BEGINTIME" --end-time="ENDTIME" [-h HOSTNAME | -f HOSTFILE] [--keyword=KEYWORD] [--speed-limit=SPEED] [-o OUTPUT] [-l LOGFILE] [-C CONFIGFILE] General options: --begin-time=BEGINTIME Time to start log file collection. Pattern:yyyymmdd hh:mm. --end-time=ENDTIME Time to end log file collection. Pattern:yyyymmdd hh:mm. --speed-limit=SPEED Bandwidth to copy files, a nonnegative integer, in MByte/s. 0 means unlimited. Only supported if rsync command exists. -h Names of hosts whose information is to be collected. Example: host1,host2. -f File listing names of all the hosts to connect to. --keyword=KEYWORD Save log files containing the keyword. -o Save the result to the specified file. -l Path of log file. -?, --help Show help information for this utility, and exit the command line mode. -V, --version Show version information. -C gs_collector config file, listing which info to collect # gs_collector.json example { "Collect": [ {"TypeName": "name", "Content": "value", "Interval": "seconds", "Count": "counts"} # interval is in Second ] } # TypeName : content COLLECT_INFO_MAP { "System" : "HardWareInfo,RunTimeInfo", "Database" : "pg_locks,pg_stat_activity,pg_thread_wait_status", "Log" : "DataNode,ClusterManager", "XLog": "DataNode", "Config" : "DataNode", "Gstack" : "DataNode", "CoreDump": "gaussdb,GaussMaster,gs_ctl" "Trace": "Dump" "Plan": "*" # Any database name or character "*" } -- 根据官网资料,gs_collector部分相关参数含义信息如下: -h 收集信息的主机名称,取值范围:主机名称,如果不指定则默认收集所有主机的信息 -f 主机名称列表文件,该文件为纯文本格式,取值范围:主机名称列表 # 注意 -f和-h参数不能同时使用 -o 将收集日志以压缩包形式输出到指定的文件夹,不指定则将检查结果以压缩包形式输出到配置文件中tmpMppdbPath选项所指定的目录中 若配置文件中未配置tmpMppdbPath选项,则默认将检查结果以压缩包形式输出到"/tmp/用户名_mppdb/"目录中 -l 指定的日志文件以及存放路径 -C 指定待收集内容的配置文件,利用TypeName指定需要收集的信息类型,利用Content指定每一类信息的具体内容 利用Count指定此类信息收集的次数,利用Interval指定收集间隔,单位为秒 TypeName和Content不允许缺失或者内容为空 Interval和Count可以不指定,如果没有指定Count,则默认收集一次 如果没有指定Interval则表示间隔为0秒,Interval和Count的值不能小于0,如果不指定则使用默认的配置文件 —keyword=KEYWORD 包含关键字KEYWORD的日志文件,若关键字KEYWORD中含有空格,需要使用双引号包围 —begin-time "日志的开始时间,输入格式为“yyyymmdd hh:mm" —end-time 日志的结束时间,输入格式为"yyyymmdd hh:mm" —speed-limit 日志收集时的收集速率,输入格式为非负整数,单位为MB/s 该参数主要是为了防止日志收集过程中产生过高的磁盘或网络IO,导致数据库节点故障 如果它们与$GAUSSLOG/$PGHOST部署在同磁盘上,该值应当不超过openGauss内上述磁盘IO与网络IO速率的最小值的1/3 -?, —help 显示帮助信息 -V, —version 显示版本号信息
复制
使用gs_collector -V可显示gs_collector工具的详细版本信息。
[omm@opengauss-node1 ~]$ gs_collector -V gs_collector (openGauss OM 3.1.0 build 4a933fde) compiled at 2022-09-29 14:34:06 commit 0 last mr
复制
四、使用举例
如下示例,使用gs_collector在主库不加额外过多参数收集备库某一时段详细信息。
[root@opengauss-db1 ~]# su - omm Last login: Thu Nov 17 09:08:26 CST 2022 on pts/0 [omm@opengauss-db1 ~]$ gs_collector --begin-time="20221117 09:00" --end-time="20221117 12:00" -h opengauss-db2 Successfully parsed the configuration file. create Dir. Successfully create dir. do system check interval 0 : count 1 Collecting OS information. Successfully collected OS information. do database check interval 0 : count 1 Collecting catalog statistics. Successfully collected catalog statistics. do log check interval 0 : count 1 Collecting Log files. Successfully collected Log files. do Config check 0:1 Collecting Config files. Successfully collected Config files. Collecting files. Successfully collected files. All results are stored in /opt/gaussdb/log/omm/collector_20221117_145118.tar.gz. -- 根据上述执行结果,可看到如下一些信息 1) 首先解析gs_collector语法是否有误,如无误,会执行该命令,如有误,会提示报错信息 2) 然后创建目录 3) 之后做系统检查,并收集操作系统的相关信息 4) 然后做数据库检查,收集数据库相关信息 5) 将收集的信息打包存储存放到当前执行命令服务器的$GAUSSLOG目录下
复制
五、探解收集信息
根据收集到的信息的压缩文件,我们可以查看具体都收集了哪些方面的东西。
[omm@opengauss-db1 ~]$ cd /opt/gaussdb/log/omm/ [omm@opengauss-db1 omm]$ tar -zxvf collector_20221117_150248.tar.gz collector_20221117_150248/ collector_20221117_150248/opengauss-db2.tar.gz collector_20221117_150248/Summary.log collector_20221117_150248/Detail.log -- 继续解压opengauss-db2.tar.gz文件 [omm@opengauss-db1 collector_20221117_150248]$ tar -zxvf opengauss-db2.tar.gz opengauss-db2/ opengauss-db2/configfiles/ opengauss-db2/configfiles/config_20221117_150305233050/ opengauss-db2/configfiles/config_20221117_150305233050/dn_6002/ opengauss-db2/configfiles/config_20221117_150305233050/dn_6002/pg_control opengauss-db2/configfiles/config_20221117_150305233050/dn_6002/postgresql.conf opengauss-db2/configfiles/config_20221117_150305233050/dn_6002/gaussdb.state opengauss-db2/configfiles/config_20221117_150305233050/dn_6002/pg_hba.conf opengauss-db2/configfiles/config_20221117_150305233050/dn_6002/pg_replslot/ opengauss-db2/configfiles/config_20221117_150305233050/dn_6002/pg_replslot/dn_6001/ opengauss-db2/configfiles/config_20221117_150305233050/dn_6002/pg_replslot/dn_6001/state opengauss-db2/configfiles/config_20221117_150305233050/dn_6002/pg_replslot/dn_6001/state.backup opengauss-db2/configfiles/config_20221117_150305233050/dn_6002/pg_replslot/dn_6003/ opengauss-db2/configfiles/config_20221117_150305233050/dn_6002/pg_replslot/dn_6003/state opengauss-db2/configfiles/config_20221117_150305233050/dn_6002/pg_replslot/dn_6003/state.backup opengauss-db2/configfiles/config_20221117_150305233050/dn_6002/pg_ident.conf opengauss-db2/xlogfiles/ opengauss-db2/planSimulatorfiles/ opengauss-db2/gstackfiles/ opengauss-db2/systemfiles/ opengauss-db2/systemfiles/OS_information_20221117_150250817208.txt opengauss-db2/systemfiles/database_system_info_20221117_150254926156.txt opengauss-db2/coreDumpfiles/ opengauss-db2/logfiles/ opengauss-db2/logfiles/log_20221117_150302532579.tar.gz opengauss-db2/catalogfiles/ -- 继续解压log_20221117_150302532579.tar.gz文件 [omm@opengauss-db1 collector_20221117_150248]$ cd opengauss-db2/logfiles/ [omm@opengauss-db1 logfiles]$ tar -zxvf log_20221117_150302532579.tar.gz ./ ./cm/ ./cm/cm_server/ ./cm/cm_server/cm_server-2022-11-14_172048-current.log ./cm/cm_agent/ ./cm/cm_agent/cm_agent-2022-11-14_172048-current.log ./cm/cm_ctl/ ./cm/cm_ctl/cm_ctl-2022-11-14_172047-current.log ./pg_log/ ./pg_log/dn_6002/ ./pg_log/dn_6002/postgresql-2022-11-17_000000.log ./om/ ./om/gs_om-2022-11-14_182114.log ./om/gs_local-2022-11-14_170129.log
复制
可以查看gs_collector源码,gs_collector是采用python3编写的,3.1.0版本显示为401行的代码文件,在代码133行,显示为定义了一个字典。
132 # TypeName : content 133 COLLECT_INFO_MAP 134 { 135 "System" : "HardWareInfo,RunTimeInfo", 136 "Database" : "pg_locks,pg_stat_activity,pg_thread_wait_status", 137 "Log" : "DataNode,ClusterManager", 138 "XLog": "DataNode", 139 "Config" : "DataNode", 140 "Gstack" : "DataNode", 141 "CoreDump": "gaussdb,GaussMaster,gs_ctl" 142 "Trace": "Dump" 143 "Plan": "*" # Any database name or character "*" 144 }
复制
通过字典信息可以看到gs_collector主要收集了哪些相关信息,主要是被收集服务器的操作系统硬件信息、运行状况信息,数据库的(线程、锁、配置文件、日志、dump文件及Trace)等方面信息。
然后我们可以查看部分收集到文件详细信息。
- Detail.log信息
--Detail.log文件较为详细的描述了gs_collector都做了哪些事情 [omm@opengauss-db1 collector_20221117_150248]$ more Detail.log ------------------------------------------------------------------------ | | | opengauss-db2 - Collecting OS information - Success | | | ------------------------------------------------------------------------ | SuccessfulTask | hostname ; ps ux ; iostat -xm 2 3 ; free -m | ------------------------------------------------------------------------ ----------------------------------------------------------------------------- | | | opengauss-db2 - Collecting catalog information - Success | | | ----------------------------------------------------------------------------- ---------------------------------------------------------------------------- | | | opengauss-db2 - Collecting pg_log information - Success | | | ---------------------------------------------------------------------------- | SuccessfulTask | find log files; copy log files | ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- | | | opengauss-db2 - Collecting Config information - Success | | | ---------------------------------------------------------------------------- | SuccessfulTask | collect Config information | ---------------------------------------------------------------------------- -- 可以看到Detail.log信息里显示使用了操作相关操作系统命令,如 hostname ; ps ux ; iostat -xm 2 3 ; free -m收集服务器系统信息 -- 另外还收集了pg_log、查找和拷贝了相关日志文件、收集配置文件等
复制
- Summary.log
-- Summary.log 是个概要日志文件,粗略了描述了gs_collector做了哪些事情 -------------------------------------------------------------------------------- | | | | | TASK NAME | SUCCESS HOSTNAME | FAILED HOSTNAME | | | | | -------------------------------------------------------------------------------- |Collecting OS information-1 | opengauss-db2 | | -------------------------------------------------------------------------------- |Collecting catalog information-1 | opengauss-db2 | | -------------------------------------------------------------------------------- |Collecting pg_log information-1 | opengauss-db2 | | -------------------------------------------------------------------------------- |Collecting Config information-1 | opengauss-db2 | | --------------------------------------------------------------------------------
复制
- systemfiles相关文件信息
systemfiles目录下的OS_information_20221117_150250817208.txt显示了具体收集了哪些操作系统的信息
-- OS_information_20221117_150250817208.txt文件显示收集了操作系统的主机名,使用ps ux查看到进程信息 iostat -xm 查询到的服务器IO方面相关信息 free -m 收集到的内存信息 [omm@opengauss-db1 systemfiles]$ cat OS_information_20221117_150250817208.txt ************************************ * OS information for host opengauss-db2 ************************************ ************************************ * ps ux ************************************ USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND omm 11783 0.0 0.0 72568 968 ? Ss Nov14 0:01 ssh-agent -a /home/omm/gaussdb_tmp/gauss_socket_tmp omm 11894 0.0 0.0 72568 780 ? Ss Nov14 0:00 ssh-agent -s omm 19891 1.1 0.0 47428 14492 ? S Nov14 49:45 /opt/gaussdb/install/app/bin/om_monitor -L /opt/gaussdb/log/omm/cm/om_monitor omm 43067 6.3 0.0 923500 15212 ? Sl Nov14 262:37 /opt/gaussdb/install/app/bin/cm_agent omm 43080 27.8 2.7 6237268 446388 ? Sl Nov14 1146:20 /opt/gaussdb/install/app/bin/cm_server omm 43091 32.1 7.3 7463500 1201892 ? Sl Nov14 1325:44 /opt/gaussdb/install/app/bin/gaussdb -D /opt/gaussdb/install/data/db1 -M pending omm 43098 0.0 0.2 1403644 41152 ? Sl Nov14 0:00 gaussdb fenced UDF master process omm 1363088 0.0 0.0 116488 2996 pts/1 S+ 14:49 0:00 -bash omm 1369007 0.0 0.0 156860 2296 ? S 15:02 0:00 sshd: omm@notty omm 1369008 3.0 0.0 113400 1672 ? Ss 15:02 0:00 bash -c source /etc/profile;source ~/.bashrc;source /home/omm/.bashrc; python3 '/opt/gaussdb/gausstools/om/script/local/LocalCollect.py' -t system_check -U omm -l /opt/gaussdb/log/omm/om/gs_local.log -C ' {#TypeName#: #System#, #Content#: #ps,ioStat,netFlow,spaceUsage,cpuInfo,memInfo,disk,#, #Interval#: #0#, #Count#: #1#}' omm 1369055 62.0 0.1 171480 17720 ? S 15:02 0:00 python3 /opt/gaussdb/gausstools/om/script/local/LocalCollect.py -t system_check -U omm -l /opt/gaussdb/log/omm/om/gs_local.log -C {#TypeName#: #System#, #Content#: #ps,ioStat,netFlow,spaceUsage,cpuInfo,me mInfo,disk,#, #Interval#: #0#, #Count#: #1#} omm 1369176 0.0 0.0 113288 1212 ? S 15:02 0:00 /bin/sh -c ps ux >> /opt/gaussdb/tmp/opengauss-db2/systemfiles/OS_information_20221117_150250817208.txt 2>&1 omm 1369177 0.0 0.0 155464 1872 ? R 15:02 0:00 ps ux ************************************ * iostat -xm 2 3 ************************************ Linux 3.10.0-693.el7.x86_64 (opengauss-db2) 11/17/2022 _x86_64_ (8 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 4.99 0.00 3.03 0.09 0.00 91.89 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util fd0 0.00 0.00 0.00 0.00 0.00 0.00 8.00 0.00 32.75 32.75 0.00 32.75 0.00 sdb 0.00 4.62 0.08 30.52 0.00 0.37 24.56 0.02 0.70 5.12 0.69 0.18 0.56 sda 0.00 36.37 0.06 16.67 0.00 0.22 26.91 0.01 0.52 4.57 0.51 0.45 0.75 dm-0 0.00 0.00 0.13 88.18 0.00 0.58 13.61 0.08 0.95 4.96 0.94 0.15 1.29 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 43.27 0.00 0.33 0.33 0.00 0.33 0.00 avg-cpu: %user %nice %system %iowait %steal %idle 5.45 0.00 3.42 0.26 0.00 90.87 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util fd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sdb 0.00 0.00 0.00 21.00 0.00 0.22 21.31 0.01 0.48 0.00 0.48 0.48 1.00 sda 0.00 118.50 0.00 42.00 0.00 0.63 30.76 0.02 0.42 0.00 0.42 0.39 1.65 dm-0 0.00 0.00 0.00 181.50 0.00 0.85 9.58 0.22 1.19 0.00 1.19 0.15 2.65 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 avg-cpu: %user %nice %system %iowait %steal %idle 4.98 0.00 3.08 0.00 0.00 91.93 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util fd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sda 0.00 16.00 0.00 3.00 0.00 0.08 56.00 0.00 0.50 0.00 0.50 0.50 0.15 dm-0 0.00 0.00 0.00 19.00 0.00 0.08 8.84 0.02 0.92 0.00 0.92 0.08 0.15 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 ************************************ * free -m ************************************ total used free shared buff/cache available Mem: 15886 1826 7977 790 6081 10874 Swap: 0 0 0
复制
database_system_info_20221117_150254926156.txt文件信息显示了被收集服务器数据库相关的信息。
-- 可以看到该文件收集了数据库集群状态信息、pg_log等信息 [omm@opengauss-db1 systemfiles]$ cat database_system_info_20221117_150254926156.txt ########################################################### # # C L U S T E R I N F O # ########################################################### [ CMServer State ] node node_ip instance state ------------------------------------------------------------------------------------ 1 opengauss-db1 192.168.17.112 1 /opt/gaussdb/install/data/cm/cm_server Primary 2 opengauss-db2 192.168.17.113 2 /opt/gaussdb/install/data/cm/cm_server Standby 3 opengauss-db3 192.168.17.139 3 /opt/gaussdb/install/data/cm/cm_server Standby [ Cluster State ] cluster_state : Normal redistributing : No balanced : Yes current_az : AZ_ALL [ Datanode State ] node node_ip instance state ------------------------------------------------------------------------------------- 1 opengauss-db1 192.168.17.112 6001 /opt/gaussdb/install/data/db1 P Primary Normal 2 opengauss-db2 192.168.17.113 6002 /opt/gaussdb/install/data/db1 S Standby Normal 3 opengauss-db3 192.168.17.139 6003 /opt/gaussdb/install/data/db1 S Standby Normal ########################################################### # # V E R S I O N I N F O # ########################################################### gaussdb (openGauss 3.1.0 build 4e931f9a) compiled at 2022-09-29 14:19:24 commit 0 last mr cm_agent (openGauss CM 3.1.0 build a6f7a339) compiled at 2022-09-29 14:36:50 Release cm_server (openGauss CM 3.1.0 build a6f7a339) compiled at 2022-09-29 14:36:50 Release /bin/sh: gs_gtm: command not found Linux version 3.10.0-693.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) ) #1 SMP Tue Aug 22 21:09:27 UTC 2017 ########################################################### # # C O R E F I L E I N F O # ########################################################### total 130292 -rw------- 1 omm dbgrp 133413594 Nov 14 18:21 core-gaussdb-21231-2022_11_14_18_21_24-bbox.lz4 ########################################################### # # X L O G F I L E I N F O # ########################################################### ******** dn_6002 xlog file info ******* total 212996 -rw------- 1 omm dbgrp 16777216 Nov 14 17:20 000000010000000000000001 -rw------- 1 omm dbgrp 16777216 Nov 14 17:24 000000010000000000000002 -rw------- 1 omm dbgrp 16777216 Nov 14 17:24 000000010000000000000003 -rw------- 1 omm dbgrp 16777216 Nov 14 17:24 000000010000000000000004 -rw------- 1 omm dbgrp 16777216 Nov 14 17:24 000000010000000000000009 -rw------- 1 omm dbgrp 16777216 Nov 14 17:24 00000001000000000000000A -rw------- 1 omm dbgrp 16777216 Nov 14 17:24 00000001000000000000000B -rw------- 1 omm dbgrp 16777216 Nov 14 17:24 00000001000000000000000C -rw------- 1 omm dbgrp 16777216 Nov 14 17:24 00000001000000000000000D -rw------- 1 omm dbgrp 16777216 Nov 14 17:24 000000010000000000000005 -rw------- 1 omm dbgrp 16777216 Nov 14 17:24 000000010000000000000006 drwx------ 2 omm dbgrp 4096 Nov 16 13:59 archive_status -rw------- 1 omm dbgrp 16777216 Nov 16 13:59 000000010000000000000007 -rw------- 1 omm dbgrp 16777216 Nov 17 15:02 000000010000000000000008 ########################################################### # # P G_L O G F I L E I N F O # ########################################################### ******** dn_6002 pg_log file info ******* total 1492 -r-------- 1 omm dbgrp 25822 Nov 14 18:51 postgresql-2022-11-14_172049.log.gz -r-------- 1 omm dbgrp 27592 Nov 15 00:21 postgresql-2022-11-14_182149.log.gz -r-------- 1 omm dbgrp 86878 Nov 16 00:21 postgresql-2022-11-15_000000.log.gz -r-------- 1 omm dbgrp 86496 Nov 17 00:21 postgresql-2022-11-16_000000.log.gz -rw------- 1 omm dbgrp 1283035 Nov 17 15:02 postgresql-2022-11-17_000000.log
复制
- configfiles相关文件信息
configfiles下显示实际上是拷贝了被收集服务器dn_600*下的相关配置文件。
[omm@opengauss-db1 dn_6002]$ ls -lrt /opt/gaussdb/log/omm/collector_20221117_150248/opengauss-db2/configfiles/config_20221117_150305233050/dn_6002 total 64 -rw------- 1 omm dbgrp 35433 Nov 17 15:03 postgresql.conf drwx------ 4 omm dbgrp 4096 Nov 17 15:03 pg_replslot -rw------- 1 omm dbgrp 1636 Nov 17 15:03 pg_ident.conf -rw------- 1 omm dbgrp 4883 Nov 17 15:03 pg_hba.conf -rw------- 1 omm dbgrp 8192 Nov 17 15:03 pg_control -rw------- 1 omm dbgrp 72 Nov 17 15:03 gaussdb.state
复制
- logfiles相关文件信息
logfiles下显示是拷贝了被收集服务器的日志相关文件。
[omm@opengauss-db1 ~]$ ls -lrt /opt/gaussdb/log/omm/collector_20221117_150248/opengauss-db2/logfiles total 244 drwx------ 3 omm dbgrp 4096 Nov 17 15:03 pg_log drwx------ 2 omm dbgrp 4096 Nov 17 15:03 om drwx------ 5 omm dbgrp 4096 Nov 17 15:03 cm -rw------- 1 omm dbgrp 233968 Nov 17 15:03 log_20221117_150302532579.tar.gz
复制
目前我的这套测试集群还只是做了简单的测试,未测试业务,如果是生产或有业务的测试场景下,应该还会收集到更多信息。