修改glogin.sql引發的生產系統監控的虛假報警
問題提出:
生產系統,收到報警郵件說open_cursors過多,馬上登入到伺服器上檢查,發現open cursor最多的一個session才開啟100多個cursor,應該沒什麼問題。但是一個小時後,又收到報警郵件,重新登入伺服器,還是沒什麼異常。而且之後每個小時(這個規律是後來才發現的)都會收到報警郵件,每次都沒有任何異常,這下找不到頭緒了。[@more@]晚上回家,又收到這樣的郵件,於是把所有這類郵件從第一封開始到最後一封看了一遍,又看了一遍發信的時間,才注意到每個小時都會發一封報警郵件。登入生產,檢查監控的指令碼(指令碼為另一個同事寫的,而且已經半年多沒收到這樣的報警了),指令碼中定義的也是一個小時檢查一次,也就是說每次監控指令碼執行,都會發郵件出來,肯定是監控不對了。
生產系統是兩臺機器的RAC系統,從郵件標題看,信是從DB1發出的,檢查DB1的指令碼,沒有任何異常。後來發現DB2從來沒有發郵件出來,那麼DB2的指令碼應該是完全正確的,於是拿DB2的指令碼去跟DB1的核對,看是否是DB1的指令碼出現錯誤了。結果發現DB2監控指令碼里面的提示全部是DB1的提示,於是把裡面的提示全部改成DB2,然後執行一遍,馬上收到了報警郵件,這說明問題是處在DB2上的。而由於當初上RAC的時候,這個監控指令碼沒有修改,導致DB2的郵件報警出現的卻是DB1的提示,所以到DB1上死活也找不出問題所在。
檢視監控指令碼,是使用一個查詢,如果查詢返回的結果是3行,則說明沒有異常,因為3行正好是sql提示和返回no rows的提示資訊,如果返回大於3行,則發報警郵件,檢視返回結果,發現每次執行返回結果都正好四行,而但sql的返回結果都是空。仔細檢視,發現最後面有一行提示資訊Executed in 0.807 seconds,到此問題已經完全暴露了出來了。
因為我習慣在glogin.sql中加上set timing on設定,這樣每個sql執行完就會知道執行了多少分鐘。那天因為頻繁在DB2上操作,每次都設定set timing on太麻煩,於是就把它加到了glogin.sql中去了,這樣就導致了監控指令碼的返回會比原先多一行,而正好我只設定了DB2,沒有設定DB1,而DB2報警郵件的提示卻是DB1,誤導了視線。一連串的正好導致了問題的發生。
總結:任何返回錯誤、報警、提示資訊的地方,返回的結果一定要正確,這個在編寫任何程式的時候,尤其大量使用CRTL+C和CTRL+V的時候尤其要注意。
生產系統,收到報警郵件說open_cursors過多,馬上登入到伺服器上檢查,發現open cursor最多的一個session才開啟100多個cursor,應該沒什麼問題。但是一個小時後,又收到報警郵件,重新登入伺服器,還是沒什麼異常。而且之後每個小時(這個規律是後來才發現的)都會收到報警郵件,每次都沒有任何異常,這下找不到頭緒了。[@more@]晚上回家,又收到這樣的郵件,於是把所有這類郵件從第一封開始到最後一封看了一遍,又看了一遍發信的時間,才注意到每個小時都會發一封報警郵件。登入生產,檢查監控的指令碼(指令碼為另一個同事寫的,而且已經半年多沒收到這樣的報警了),指令碼中定義的也是一個小時檢查一次,也就是說每次監控指令碼執行,都會發郵件出來,肯定是監控不對了。
生產系統是兩臺機器的RAC系統,從郵件標題看,信是從DB1發出的,檢查DB1的指令碼,沒有任何異常。後來發現DB2從來沒有發郵件出來,那麼DB2的指令碼應該是完全正確的,於是拿DB2的指令碼去跟DB1的核對,看是否是DB1的指令碼出現錯誤了。結果發現DB2監控指令碼里面的提示全部是DB1的提示,於是把裡面的提示全部改成DB2,然後執行一遍,馬上收到了報警郵件,這說明問題是處在DB2上的。而由於當初上RAC的時候,這個監控指令碼沒有修改,導致DB2的郵件報警出現的卻是DB1的提示,所以到DB1上死活也找不出問題所在。
檢視監控指令碼,是使用一個查詢,如果查詢返回的結果是3行,則說明沒有異常,因為3行正好是sql提示和返回no rows的提示資訊,如果返回大於3行,則發報警郵件,檢視返回結果,發現每次執行返回結果都正好四行,而但sql的返回結果都是空。仔細檢視,發現最後面有一行提示資訊Executed in 0.807 seconds,到此問題已經完全暴露了出來了。
因為我習慣在glogin.sql中加上set timing on設定,這樣每個sql執行完就會知道執行了多少分鐘。那天因為頻繁在DB2上操作,每次都設定set timing on太麻煩,於是就把它加到了glogin.sql中去了,這樣就導致了監控指令碼的返回會比原先多一行,而正好我只設定了DB2,沒有設定DB1,而DB2報警郵件的提示卻是DB1,誤導了視線。一連串的正好導致了問題的發生。
總結:任何返回錯誤、報警、提示資訊的地方,返回的結果一定要正確,這個在編寫任何程式的時候,尤其大量使用CRTL+C和CTRL+V的時候尤其要注意。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25016/viewspace-927380/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 生產區域人數超員監控報警系統
- Prometheus監控報警系統Prometheus
- 【python 監控報警】python自動發微信監控報警Python
- 生產經營監控系統指標體系的梳理指標
- 終於用上環境監控電話報警系統
- 支援全平臺的伺服器監控報警系統 Shinken伺服器
- CentOS 配置OOM監控報警CentOSOOM
- 智慧校園:資料機房動環監控報警系統
- 分散式監控系統Zabbix-3.0.3--簡訊報警設定分散式
- 基於飛信對系統計劃任務crontab報警監控
- 基於工業物聯網的物料包裝生產線監控系統
- 基於工業物聯網的中藥生產過程監控和故障監測系統
- 「服務端」node服務的監控預警系統架構服務端架構
- 裝置故障監控報警運維工單系統有什麼功能運維
- 技術分享| 如何使用Prometheus實現系統監控報警郵件通知Prometheus
- 同事寫的監控Logical Standby SQL apply 程式stop的監控報警指令碼SQLAPP指令碼
- JavaWeb的監控系統JavaWeb
- “安全生產月”專題報導:AI智慧監控技術如何助力安全生產AI
- 煤礦皮帶急停報警監測系統
- logstash監控海量日誌並報警
- 智慧警務視覺化應用監控系統搭建視覺化
- 中小水庫中的水情遙測系統如何實現遠端監控和自動報警?
- 分散式監控系統Zabbix-3.0.3-完整安裝記錄(6)-微信報警部署分散式
- 熱軋帶鋼全生產流程工藝監控物聯網系統
- Oracle警報系統Oracle
- 安全生產勞保穿戴監測系統
- 從零開始搭建ELK+GPE監控預警系統
- 分散式監控系統Zabbix-3.0.3-完整安裝記錄(5)-郵件報警部署分散式
- 分散式監控系統Zabbix-3.0.3-新版微信報警(企業微信取代企業號)分散式
- /proc虛擬檔案系統與系統核心引數修改方法
- 報警系統QuickAlarm之報警規則解析UI
- 產品的生態系統
- 運維監控系統 PIGOSS BSM的監控策略運維Go
- KVM修改網路產生報錯
- 工業物聯網解決方案:智慧礦山安全生產監控系統
- Nagios 裡面監控MySQL 監控事務夯住(RUNNING)報警通知iOSMySql
- 淘寶開發的系統監控工具 Tsar 開源
- Java生產環境效能監控與調優—基於JDK命令列工具的監控JavaJDK命令列