check_postgres.pl 的缺陷
Nagios 系統監控pg 資料庫的元件 check_postgres.pl
對資料庫的監控的返回值中,存在一個缺陷。分析如下
如果 pg 資料庫已經宕掉,監控程式碼無法連線到資料庫時,應用程式碼不會發出critical 的告警
check_postgres.pl 返回的程式碼為3 對應於nagios 告警系統的 UNKNOW ,這個時候就有可能導致資料庫管理人員的誤判。
具體的函式為run_command() 中對資料庫返回的錯誤資訊的判斷有問題。
對於設定的檢查指令碼中連線pg 的連線使用者,如果許可權不夠,或者不能登入pg資料庫,返回的程式碼為 FATAL
程式碼對此返回的值為3 這個時候其實從側面是可以確認資料庫應該還是ok 的,
對於檢查的sql 程式碼超時 , 返回的結果狀態也為3 , 這個時候應該是資料庫忙了,這種情況,dba是需要檢查系統的。
而對於 PG 資料庫損壞,或者已經關機 檢查程式碼連線不到資料庫,監控程式碼並沒有做專門的處理而是僅僅返回了狀態3 UNKONW 這個時候dba 是需要優先檢查資料庫的,資料庫可能已經處於故障狀態了。
我們的修改:
在run_command 函式中增加一個錯誤判斷:
if ($db->{error} =~ /FATAL/) {
if (exists $arg->{fatalregex} and $db->{error} =~ /$arg->{fatalregex}/) {
$info->{fatalregex} = $db->{error};
next;
}
else {
ndie "$db->{error}";
}
}
elsif ($db->{error} =~ /statement timeout/) {
ndie msg('runcommand-timeout', $timeout);
}
#### lsl
## if run check_postgres.pl on local host
## when pg is down we can recieve MSG: psql: could not connect to server: No such file or directory
## AND check_postgres.pl return code = 3 Nagios means Uknow
## We need this return Critical Status
## So we modified this here and add sub fide
## lsliang
elsif ($db->{error} =~ /could not connect to server/) {
fdie "$db->{error}"
}
if (!$db->{ok} and !$arg->{failok} and !$arg->{noverify}) {
## Check if problem is due to backend being too old for this check
verify_version();
if (exists $db->{error}) {
ndie $db->{error};
同事配套的 定義了一個fdie 函式 返回狀態碼為2 對應於Nagios 的critical 告警,要求dba 立即處理。
fdie 函式的定義跟ndie 函式的定義是一致的,只是返回值為2 。
##### some times we want ndie return 2 and raise Nagios 's CRITICAL
## lsl
sub fdie {
eval { FILE::Temp::cleanup();};
my $msg= shift;
chomp $msg;
print "FATAL!!: $msg\n";
exit 2 ;
}
經過測試可以很好的處理,pg掛掉時的告警。
對資料庫的監控的返回值中,存在一個缺陷。分析如下
如果 pg 資料庫已經宕掉,監控程式碼無法連線到資料庫時,應用程式碼不會發出critical 的告警
check_postgres.pl 返回的程式碼為3 對應於nagios 告警系統的 UNKNOW ,這個時候就有可能導致資料庫管理人員的誤判。
具體的函式為run_command() 中對資料庫返回的錯誤資訊的判斷有問題。
對於設定的檢查指令碼中連線pg 的連線使用者,如果許可權不夠,或者不能登入pg資料庫,返回的程式碼為 FATAL
程式碼對此返回的值為3 這個時候其實從側面是可以確認資料庫應該還是ok 的,
對於檢查的sql 程式碼超時 , 返回的結果狀態也為3 , 這個時候應該是資料庫忙了,這種情況,dba是需要檢查系統的。
而對於 PG 資料庫損壞,或者已經關機 檢查程式碼連線不到資料庫,監控程式碼並沒有做專門的處理而是僅僅返回了狀態3 UNKONW 這個時候dba 是需要優先檢查資料庫的,資料庫可能已經處於故障狀態了。
我們的修改:
在run_command 函式中增加一個錯誤判斷:
if ($db->{error} =~ /FATAL/) {
if (exists $arg->{fatalregex} and $db->{error} =~ /$arg->{fatalregex}/) {
$info->{fatalregex} = $db->{error};
next;
}
else {
ndie "$db->{error}";
}
}
elsif ($db->{error} =~ /statement timeout/) {
ndie msg('runcommand-timeout', $timeout);
}
#### lsl
## if run check_postgres.pl on local host
## when pg is down we can recieve MSG: psql: could not connect to server: No such file or directory
## AND check_postgres.pl return code = 3 Nagios means Uknow
## We need this return Critical Status
## So we modified this here and add sub fide
## lsliang
elsif ($db->{error} =~ /could not connect to server/) {
fdie "$db->{error}"
}
if (!$db->{ok} and !$arg->{failok} and !$arg->{noverify}) {
## Check if problem is due to backend being too old for this check
verify_version();
if (exists $db->{error}) {
ndie $db->{error};
同事配套的 定義了一個fdie 函式 返回狀態碼為2 對應於Nagios 的critical 告警,要求dba 立即處理。
fdie 函式的定義跟ndie 函式的定義是一致的,只是返回值為2 。
##### some times we want ndie return 2 and raise Nagios 's CRITICAL
## lsl
sub fdie {
eval { FILE::Temp::cleanup();};
my $msg= shift;
chomp $msg;
print "FATAL!!: $msg\n";
exit 2 ;
}
經過測試可以很好的處理,pg掛掉時的告警。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/133735/viewspace-716221/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 缺陷和缺陷報告
- 軟體缺陷的案例
- ltrim() 函式的缺陷函式
- 那些 “被消失” 的缺陷
- 缺陷描述
- 的確,Java存在缺陷。但是……Java
- C# 壓縮的缺陷C#
- 漏洞解析——通用異常缺陷及字串比較缺陷字串
- MongoDB的排除查詢$ne缺陷MongoDB
- fence_ipmilan 的一個缺陷MILA
- Javascript的10個設計缺陷JavaScript
- 請教:單例模式的缺陷單例模式
- 安全缺陷持續升高,新系統帶來新缺陷(轉)
- 聊聊缺陷逃逸率
- 程式碼缺陷解讀:通用異常捕獲宣告缺陷漏洞
- [個體軟體過程]之缺陷管理--缺陷預測 (轉)
- 強化學習的基礎缺陷強化學習
- 學校C語言教材的缺陷C語言
- 淺析Windows防火牆的缺陷(轉)Windows防火牆
- ARP協議的安全缺陷 (轉)協議
- halcon缺陷檢測
- 軟體缺陷管理流程
- 字串型別存在缺陷字串型別
- 聊聊缺陷收斂率
- 【軟體測試】缺陷
- redis實現分散式鎖天然的缺陷Redis分散式
- 解決二層化結構的缺陷
- Coverity:Python程式碼的缺陷密度最低Python
- 軟體測試中容易忽略的缺陷
- 講解SQL Server的複製及缺陷SQLServer
- 漏洞分析——變數缺陷漏洞及通用異常捕獲宣告缺陷漏洞變數
- mysql子查詢的缺陷以及5.6的優化MySql優化
- TCP 協議有哪些缺陷?TCP協議
- 1.1。缺陷管理工具
- 全域性索引有缺陷啊索引
- Jetpack—LiveData元件的缺陷以及應對策略JetpackLiveData元件
- 從缺陷率到質效工作的本質
- 技術分享 | SQL 最佳化:ICP 的缺陷SQL