2009-12-01 使用db2diag過濾DB2診斷日誌
要分析一個37MB的診斷日誌檔案,由於該資料庫的USEREXIT有問題,診斷日誌中記錄了大量資料庫日誌歸檔失敗的錯誤資訊,可讀性很差。透過使用db2diag命令的 -gv 選項,可以過濾掉日誌中的一些重複資訊和無關資訊,而使用 -g 選項又可以篩選其中的有用資訊,詳見下例。
這個診斷日誌檔案是從生產環境中取來的,70萬行,直接檢視眼睛都看花了~~~
db2inst1@suse-db:~/test> ls -lht db2diag-db1-new.log
-rw-rw-rw- 1 root root 37M 2009-11-30 09:44 db2diag-db1-new.log
db2inst1@suse-db:~/test> wc -l db2diag-db1-new.log
703600 db2diag-db1-new.log
2009-11-24-20.59.48.743143+480 I76549337G369 LEVEL: Warning
PID : 9970 TID : 3086087872 PROC : db2logmgr (DDN)
INSTANCE: db2inst NODE : 000
FUNCTION: DB2 UDB, data protection, sqlpgRetryFailedArchive, probe:4780
MESSAGE : Still unable to archive log file 1624 due to rc 24 for LOGARCHMETH1
using method 4 and target .
2009-11-24-21.00.09.767137+480 E76549707G310 LEVEL: Error (OS)
PID : 9970 TID : 3086087872 PROC : db2logmgr (DDN)
INSTANCE: db2inst NODE : 000
FUNCTION: DB2 UDB, oper system services, sqloexec2, probe:2
CALLED : OS, -, unspecified_system_function OSERR: EINTR (4)
2009-11-24-21.00.09.767658+480 E76550018G482 LEVEL: Error
PID : 9970 TID : 3086087872 PROC : db2logmgr (DDN)
INSTANCE: db2inst NODE : 000
FUNCTION: DB2 UDB, data protection, sqlpgInvokeUserexit, probe:1140
MESSAGE : ADM1832E DB2 was unable to find the user exit program when archiving
log file "S0001624.LOG" from
"/mnt/data/db2inst/NODE0000/SQL00001/SQLOGDIR/" for database "DDN".
The error code was "24".
2009-11-24-21.00.09.768624+480 I76550501G384 LEVEL: Error
PID : 9970 TID : 3086087872 PROC : db2logmgr (DDN)
INSTANCE: db2inst NODE : 000
FUNCTION: DB2 UDB, data protection, sqlpgArchiveLogFile, probe:3160
MESSAGE : Failed to archive log file S0001624.LOG to USEREXIT from
/mnt/data/db2inst/NODE0000/SQL00001/SQLOGDIR/ with rc = 24.
2009-11-24-23.16.09.623814+480 I77155724G308 LEVEL: Error
PID : 9970 TID : 3086087872 PROC : db2logmgr (DDN)
INSTANCE: db2inst NODE : 000
FUNCTION: DB2 UDB, data protection, sqlpgArchivePendingLogs, probe:1500
MESSAGE : Log archive failed with rc 24 for LOGARCHMETH1.
下面使用虛擬機器上的DB2 Express-C V9.7的db2diag將這些資訊過濾掉:
db2inst1@suse-db:~/test> db2ls
Install Path Level Fix Pack Special Install Number Install Date Installer UID
---------------------------------------------------------------------------------------------------------------------
/opt/ibm/db2/V9.7 9.7.0.0 0 Mon Oct 5 00:36:24 2009 CST 0
db2inst1@suse-db:~/test> db2diag -gv proc='db2logmgr (DDN)' db2diag-db1-new.log > /tmp/db2diag-db1-new-temp01.log
db2inst1@suse-db:~/test> wc -l /tmp/db2diag-db1-new-temp01.log
121004 /tmp/db2diag-db1-new-temp01.log
注意,條件中等號右邊的內容如果有空格,需要用單引號或雙引號引起來,並且應嚴格區分大小寫。如果想不區分大小寫,應使用 -gvi 選項。
db2inst1@suse-db:~/test> db2diag -help | grep gv
-gv - case-sensitive invert matching
-gvi , -giv - case-insensitive invert matching
可以看到,過濾後的日誌檔案只剩下12萬行。當然,這樣可能會丟失db2logmgr程式相關的一些有用資訊。如果力求精確,可以在 = 左邊加上 ^ 或 : ,表示以等號右側內容開頭或包含等號右側內容,然後用MESSAGE、FUNCTION等欄位進行匹配即可。例如:
db2inst1@suse-db:~/test> db2diag -gv message^='Still unable to archive' db2diag-db1-new.log > /tmp/db2diag-db1-new-temp11.log
db2inst1@suse-db:~/test> wc -l /tmp/db2diag-db1-new-temp11.log
624375 /tmp/db2diag-db1-new-temp11.log
db2inst1@suse-db:~/test> db2diag -gv function:=sqloexec2 /tmp/db2diag-db1-new-temp11.log > /tmp/db2diag-db1-new-temp12.log
db2inst1@suse-db:~/test> wc -l /tmp/db2diag-db1-new-temp12.log
501945 /tmp/db2diag-db1-new-temp12.log
db2inst1@suse-db:~/test> db2diag -gv message:=ADM1832E /tmp/db2diag-db1-new-temp12.log > /tmp/db2diag-db1-new-temp13.log
db2inst1@suse-db:~/test> wc -l /tmp/db2diag-db1-new-temp13.log
318345 /tmp/db2diag-db1-new-temp13.log
db2inst1@suse-db:~/test> db2diag -gv message^='Failed to archive' /tmp/db2diag-db1-new-temp13.log > /tmp/db2diag-db1-new-temp14.log
db2inst1@suse-db:~/test> wc -l /tmp/db2diag-db1-new-temp14.log
175545 /tmp/db2diag-db1-new-temp14.log
db2inst1@suse-db:~/test> db2diag -gv message^='Log archive failed' /tmp/db2diag-db1-new-temp14.log > /tmp/db2diag-db1-new-temp15.log
db2inst1@suse-db:~/test> wc -l /tmp/db2diag-db1-new-temp15.log
121049 /tmp/db2diag-db1-new-temp15.log
本例中沒有使用上述方法,只是用PROC欄位進行了過濾。接下來,用同樣的方法,繼續以PID、PROC等欄位進行一系列過濾:
db2inst1@suse-db:~/test> db2diag -gv pid=9844 /tmp/db2diag-db1-new-temp01.log > /tmp/db2diag-db1-new-temp02.log
db2inst1@suse-db:~/test> wc -l /tmp/db2diag-db1-new-temp02.log
67116 /tmp/db2diag-db1-new-temp02.log
db2inst1@suse-db:~/test> db2diag -gv pid=9845 /tmp/db2diag-db1-new-temp02.log > /tmp/db2diag-db1-new-temp03.log
db2inst1@suse-db:~/test> wc -l /tmp/db2diag-db1-new-temp03.log
13484 /tmp/db2diag-db1-new-temp03.log
db2inst1@suse-db:~/test> db2diag -gv proc=db2hmon /tmp/db2diag-db1-new-temp03.log > /tmp/db2diag-db1-new-temp04.log
db2inst1@suse-db:~/test> wc -l /tmp/db2diag-db1-new-temp04.log
12374 /tmp/db2diag-db1-new-temp04.log
db2inst1@suse-db:~/test> db2diag -gv pid=5686 /tmp/db2diag-db1-new-temp04.log > /tmp/db2diag-db1-new-temp05.log
db2inst1@suse-db:~/test> db2diag -gv pid=5687 /tmp/db2diag-db1-new-temp05.log > /tmp/db2diag-db1-new-temp06.log
db2inst1@suse-db:~/test> wc -l /tmp/db2diag-db1-new-temp06.log
11814 /tmp/db2diag-db1-new-temp06.log
db2inst1@suse-db:~/test> cp /tmp/db2diag-db1-new-temp06.log ./db2diag-db1-new_1.log
處理後的日誌檔案db2diag-db1-new_1.log只有1萬多行,根據其內容分析問題就比較方便了。此時,如果只想檢視其中的部分日誌資訊,可以使用 -g 選項進行篩選,它和 -gi 的用法與 -gv 和 -gvi 類似。
db2inst1@suse-db:~/test> db2diag -help | grep '-g' | grep -v gv
-filter , -g - case-sensitive search for a list of field-pattern pairs
-gi - case-insensitive search for a list of field-pattern pairs
例如,檢視等級為嚴重的資訊:
db2diag -g level=Severe db2diag-db1-new_1.log | more
又如,檢視db2sys產生的等級為嚴重的日誌資訊:
db2diag -g level=Severe,proc=db2sysc db2diag-db1-new_1.log | more
如果想同時檢視同一欄位兩種不同內容的資訊,就需要使用一些欄位特有的專用選項,如檢視等級為嚴重和錯誤的日誌資訊:
db2diag -level 'Severe,Error' db2diag-db1-new_1.log | more
db2diag還有很多其它功能和用法,可透過 db2diag -help 檢視。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28371090/viewspace-1721208/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- DB2_獲取診斷日誌DB2
- DB2故障診斷工具DB2
- .Net Core中的診斷日誌DiagnosticSource講解
- 【RAC】使用diagcollection.pl指令碼打包收集診斷日誌檔案GC指令碼
- 【RAC】使用diagcollection.pl指令碼打包收集診斷日誌檔案(轉)GC指令碼
- ADB logcat 過濾方法(抓取日誌)GC
- 用命令過濾MySQL慢查詢日誌MySql
- 如何診斷和解決db2問題DB2
- DB2日誌原理DB2
- [linux]linux過濾日誌奇偶數行Linux
- 【log4j2日誌框架】敏感字元過濾框架字元
- DB2日誌相關DB2
- python過濾nginx access日誌存入資料庫中PythonNginx資料庫
- 用AWK來過濾nginx日誌中的特定值~~~薦Nginx
- oracle之 redo過高診斷Oracle
- DB2 交易日誌滿DB2
- db2的日誌管理[轉]DB2
- Db2 日誌處理二DB2
- Laravel/Lumen 自定義錯誤日誌格式過濾堆疊資訊Laravel
- 如何快速過濾出一次請求的所有日誌?
- 新特性解讀 | MySQL 8.0錯誤日誌深入過濾(上)MySql
- oracle診斷工具-RDA使用Oracle
- Oracle診斷工具RDA使用Oracle
- DB2資料庫故障與效能瓶頸診斷思路DB2資料庫
- 網路診斷工具的使用
- 【轉】oracle診斷工具-RDA使用Oracle
- oracle診斷工具-RDA使用(轉)Oracle
- DB2 的事務日誌(redo log)DB2
- IBM DB2 日誌處理一IBMDB2
- 收集日誌檔案同步診斷資訊指令碼(lfsdiag.sql) (文件 ID 1064487.1)指令碼SQL
- 記一次使用gdb診斷gc問題全過程GC
- .記一次使用gdb診斷gc問題全過程GC
- Logback中如何自定義靈活的日誌過濾規則
- 透過日誌判斷 Uno Platform 是否在 X11 使用 OpenGL 渲染加速的方法Platform
- 使用crsctl工具診斷cluster問題
- 吃透 JVM 診斷方法與工具使用JVM
- db2不記錄日誌插入記錄DB2
- 一次DG故障診斷過程分析