![]() ![]() |
Jan 20 2009, 04:25 PM
Post
#1
|
|
|
Rookie ![]() Group: Members Posts: 23 Joined: 24-May 07 From: Halifax Member No.: 971 |
Hey Guys,
Here's a simple script to That monitors log entries for VMWare Virtual Center ( Stored in the VCDB). It has similar functionality to the standard intellipool Log Monitor. It will Generate One alarm when a new batch of errors are detected( One or more ). After the alarm has been raise it updates the time pointer, as to not generate multiple alarms. -- ONLY ONE ALARM WILL BE GENERATED --- Arguments - Scripts Requires the name of the DSN configured from the INM Gateway/Server to the Database. **The Code can be modified to read from any other database by changing the SQL Query** Thanks, /jAzz -- Suggestions/ Comments Welcome CODE --[[
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --]] ---------------------------------------------------------------- --[[ Author: Jazz Alyxzander Turner-Baggs Required INM version: 3.4 (Build 2894 or higher) Date: June 30th , 2008 Description: Monitors VMWare Virtual Infrastructure Database for Errors via ODBC connector. The script stores the timestamp of the last known error to check for new errors in the DB. This behaves just as a looping list script where, Warning - A New Event Will Only Cause One Alarm. **With slight modifications to the SQL Section this script can be used to monitor any logs stored in a Database** Config: The Script Requires a DSN be configured from the INM Server/gateway to the Database server. Arguments: DSN - DSN to Appropriate Database --]] ---------------------------------------------------------------- -- This function is called by INM to retrieve a script configuration function OnConfigure() Config = LuaScriptConfigurator() Config:SetAuthor("Jazz Alyxzander Turner-Baggs") Config:SetDescription("Monitors VMWare Virtual Infrastructure Database for Errors") Config:SetMinBuildVersion(4003) Config:SetScriptVersion(1,2) Config:AddArgument("DSN:","Required ODBC Datasource",LuaScriptConfigurator.CHECK_NOT_EMPTY) Config:AddArgument("Reset:","If Set to 'TRUE', Previous Time Pointer Is deleted - ",LuaScriptConfigurator.CHECK_NOT_EMPTY) Config:SetEntryPoint("main") return Config end function main() ---------------------------------------------------------------- -- VARS ---------------------------------------------------------------- -- Script Vars clear = false sDBdefault = 'VCDB' -- Storage Vars Storage = TLuaStorage:new(); sKey = "" sScriptName = "ESXLog" -- Time Vars t = TLuaDateTime -- Inital Time Reference to increase performance of Inital Run. minTime = "2008-10-10 01:11:45.342" tmpTime = "" -- String to Numerical Month conversion table t = { Jan= 1 , Feb=2, Mar=3, Apr=4, May=5, Jun=6, Jul=7, Aug=8, Sep=9, Oct=10, Nov=11, Dec=12 } -- Error Vars sErrorString="" tErrors = {} tErrors[0] = 0 ERRORS_DISPLAYED = 20 ---------------------------------------------------------------- -- Initilize ---------------------------------------------------------------- sConnectString = GetArgument(0) clear = GetArgument(1) ---------------------------------------------------------------- -- Storage Section ---------------------------------------------------------------- -- UID - Object Address -- Key - Scriptname if clear == true then Storage:DeleteItem(GetObjectAddress(),sKey..sScriptName ) SetExitStatus("Script Reset", false) return end if Storage:CreateItem(GetObjectAddress(),sKey..sScriptName ,minTime, string.len(minTime) ) == false then print("PREV" , minTime) _a = Storage:FindItem(GetObjectAddress(),sKey..sScriptName) minTime= _a.m_pData end ---------------------------------------------------------------- -- SQL Section ---------------------------------------------------------------- sQuery0 = "Select * from VPX_Event where Create_time > {ts '".. minTime .. "'} and (Category='error' or Category = 'warning' ) order by create_Time" -- DB maintianence db = TLuaDB() if (db:Connect(sConnectString, TLuaDB.CLIENT_ODBC) == false) then SetExitStatus("Error: Cannot Connect to Database \-\- COnnect String is incorrect", false) return end if db:Execute(sQuery0)== false then SetExitStatus("Execution Error: ".. db:GetErrorDescription(), false); return end if db:ResultAvilable() == false then SetExitStatus("Error: DB Query Returned No Rows", false) return end -- Last Error db:NextRow() -- Row Iterator: Isolate Time stamp, Error, User and Host -- Store in Error Table while db:NextRow() do tmp = db:GetCol(4) __,__,__,month, day, time, year = string.find(tmp, "(%a+) (%a+) (%d+) (%d+:%d+:%d+) (%d+)") tErrors[0] = tErrors[0] + 1 tmpTime = "'" .. year .. "-" ..t[month] .. "-" .. day .. " " .. time .. "'" tErrors[ tErrors[0] ]= tmpTime .. "\t" .. db:GetCol(3) .." \t " .. db:GetCol(6) .. " \t " .. db:GetCol(10) .. "\n" end -- Check for Errors if tErrors[0] > 0 then sStatus = "The Following Errors Have been detected: \n" max = tErrors[0] min = 0 -- UpDate Time Pointer __,__,data = string.find(tErrors[max], "'(.+)'") Storage:UpdateItem(GetObjectAddress(),sKey..sScriptName ,data, string.len(data) ) -- Truncate Events to a Maximum of 20 Entries. if (max > 20) then min = max - ERRORS_DISPLAYED sStatus = "Excess Errors Detected (" .. max .. ") Displaying last " .. ERRORS_DISPLAYED .." Entries: \n" end -- Build Error String while max > min do sStatus = sStatus .. tErrors[max] max = max-1 end SetExitStatus(sStatus, false) else SetExitStatus("No Errors Found", true) end end |
|
|
|
![]() ![]() |
|
Lo-Fi Version | Time is now: 10th September 2010 - 09:49 PM |