前言
最新zabbix5.0監控oracle,可以用odbc的方式,也可以用agent2方式,官網也詳細介紹。我這裡就用odbc方式。
https://www.zabbix.com/cn/integrations/oracle#tab:official2
如果透過odbc方式來監控oracle,等有空再來寫吧。
模版Template DB Oracle by ODBC沒有自動發現oracle使用者這個,實際在生產環境中,oracle 11g啟用了180天的密碼策略,定期必須修改密碼的策略,user也可能被鎖定之類的。這個模版沒有體現這個,僅僅只檢查了zabbix這個新建使用者的密碼有效天數。
下面我們就自己來建立oracle的使用者自動發現。
一、建立自動發現規則,獲得所有帳號名稱。在模版自動發現規則裡邊,建立發現規則。
型別:資料庫監控
鍵值:db.odbc.discovery[dbuserlist,"{$ORACLE.DSN}"] #{$ORACLE.DSN}呼叫宏裡邊的設定,dbuserlist這個隨便寫的,似乎沒作用。
使用者名稱稱:{$ORACLE.USER}
密碼:{$ORACLE.PASSWORD}
SQL查詢:SELECT username as dbuser FROM dba_users where username in ('SAPSR3','SYSTEM','SYS','ZABBIX'); #這裡是把資料庫中的使用者列出來,我這裡限制了下,只顯示這麼四個,如果想要所有的使用者,就不要加where。 dbuser這個後邊會用到吧。
點下測試
輸入宏具體的值,點Get value and test
這裡會顯示結果,格式如下:
[{"{#DBUSER}":"SAPSR3"},{"{#DBUSER}":"ZABBIX"},{"{#DBUSER}":"SYS"},{"{#DBUSER}":"SYSTEM"}]
二、建立監控項,獲得Oracle所有帳號資訊。我們再到模版的監控項裡邊建立item
鍵值:db.odbc.get[dbuser_status,"{$ORACLE.DSN}"]
使用者:{$ORACLE.USER}
密碼:{$ORACLE.PASSWORD}
SQL查詢:SELECT username as dbuser, ACCOUNTSTATUS as status, ROUND(DECODE(SIGN(NVL(u.expirydate, SYSDATE + 999) - SYSDATE),-1, 0, NVL(u.expirydate, SYSDATE + 999) - SYSDATE)) exppasswddaysbefore
FROM dba_users u;
點下測試
****
返回結果:
[{"DBUSER":"SAPSR3","STATUS":"OPEN","EXPPASSWDDAYSBEFORE":"999"},{"DBUSER":"APPQOSSYS","STATUS":"EXPIRED & LOCKED","EXPPASSWDDAYSBEFORE":"0"},{"DBUSER":"DBSNMP","STATUS":"EXPIRED & LOCKED","EXPPASSWDDAYSBEFORE":"0"},{"DBUSER":"OPS$SAPSERVICEPRD","STATUS":"OPEN","EXPPASSWDDAYSBEFORE":"999"},{"DBUSER":"OPS$ORAQAS","STATUS":"OPEN","EXPPASSWDDAYSBEFORE":"999"},{"DBUSER":"OPS$PRDADM","STATUS":"OPEN","EXPPASSWDDAYSBEFORE":"999"},{"DBUSER":"ZABBIX","STATUS":"OPEN","EXPPASSWDDAYSBEFORE":"999"},{"DBUSER":"OPS$ORAPRD","STATUS":"OPEN","EXPPASSWDDAYSBEFORE":"999"},{"DBUSER":"OPS$QASADM","STATUS":"OPEN","EXPPASSWDDAYSBEFORE":"999"},{"DBUSER":"SYS","STATUS":"OPEN","EXPPASSWDDAYSBEFORE":"999"},{"DBUSER":"SYSTEM","STATUS":"OPEN","EXPPASSWDDAYSBEFORE":"999"},{"DBUSER":"OUTLN","STATUS":"LOCKED","EXPPASSWDDAYSBEFORE":"999"},{"DBUSER":"ORACLEOCM","STATUS":"EXPIRED & LOCKED","EXPPASSWDDAYSBEFORE":"0"},{"DBUSER":"DIP","STATUS":"EXPIRED & LOCKED","EXPPASSWDDAYS_BEFORE":"0"}]
三、自動發現規則中建立監控項原型。我們再去自動發現規則裡邊,新增監控項原型。
名稱:Oracle User '{#DBUSER}': Open status
鍵值:oracle.user_status["{#DBUSER}"]
主要項:一定要選模版建立的那個item
應用集原型:是為了分類,好看。
程序
選JSONPatch
引數:$[?(@.DBUSER=='{#DBUSER}')].STATUS.first() #這裡的DBUSER就是前面sql的設定,STATUS也是SQL裡邊的
把前面的sql結果貼上進來,輸入user名稱
顯示結果
另外一個就是監控密碼有效天數
名稱:Oracle User '{#DBUSER}': Expired Password Days Before
型別:相關專案
鍵值:oracle.exppassworddays_before["{#DBUSER}"]
資訊型別:浮點數 #這裡要選對哦
單位:days
引數:$[?(@.DBUSER=='{#DBUSER}')].EXPPASSWDDAYS_BEFORE.first()
測試結果:
四、自動發現清單裡邊建立觸發器。在自動發現裡邊建立觸發器
檢查使用者狀態,如果不是OPEN 則報警
名稱:Oracle User :{#DBUSER} stutas is not OPEN
表示式:{Template DB Oracle by ODBC:oracle.user_status["{#DBUSER}"].last()}<>"OPEN"
檢查密碼有效天數
名稱:Oracle User :{#DBUSER} password will be expired after 15 days
表示式:{Template DB Oracle by ODBC:oracle.exppassworddaysbefore["{#DBUSER}"].last()}<15 and {Template DB Oracle by ODBC:oracle.exppassworddaysbefore["{#DBUSER}"].last()}>0 #小於15天,大於0天。大於0是因為有些已經是0了
五、最新資料展示。我們再去看看最新資料