Is there a way to either see what nodes have been removed from the Solarwinds Database from week to week....or....a way to compare the Node List report from week to week to see what has changed?
Yeah, I was just looking at that options. It hit me after I posted the question. I guess thinking out loud sometimes helps. But in case that does not work for the Customer, I would still like to know if anyone might have a PowerShell script that could be used to compare our Node List reports?
OK, I tried none of this, but this is close to what you are thinking.
First you want to export the node list, either a scheduled report that saves a csv off to a file share (daily, weekly, monthly whatever you need), or you can run PowerShell like:
Import-Module SwisPowerShell $creds = Get-Credential $csvdata = Get-SwisData (Connect-Swis -Hostname 'Orion' -Credential $creds) -Query 'SELECT NodeID, ObjectSubType, IPAddress, Caption, Vendor FROM Orion.Nodes' -Parameters @{} $csvdata | Export-Csv -Path '<output file path>'
Once you have data to compare, load the csv into objects and use the compare.
$csv1 = Import-Csv '<path to old csv>' $csv2 = Import-Csv '<path to new csv>' $diff = Compare-Object -ReferenceObject $csv1 -DifferenceObject $csv2 $diff | Export-Csv -Path '<output file path>'
You will obviously want to tweak it all to fit your needs.
Docs on how the compare works can be found at: Compare-Object (Microsoft.PowerShell.Utility) - PowerShell | Microsoft Docs since they can explain it better than I can. We only use Orion for current state data, we store historical data in the CMDB, so for us that is the best location to report from for retired assets.
Personally I find it easier to work this in SWQL and also it means you aren't directly interacting with the DB and possibly could cause a mistake.
Second, I think Orion.Events is probably a better table to query and you can query on EventType = '8' then. So, something like:
SELECT EventID, EventTime, NetworkNode, EngineID, EventType, Message FROM Orion.Events WHERE EventType = '8' AND EventTime >= GETDATE()-7
This includes the node name in the Message, though it isn't just the node name. If you prefer to have just the node name, then you can utilise an IMPLICIT JOIN to Orion.Nodes and do this:
SELECT EventID, EventTime, NetworkNode, EventType, e.Nodes.Caption, Message FROM Orion.Events AS e WHERE EventType = '8' AND EventTime >= GETDATE()-7
So those are basically the breadcrumbs of deleting the node.. The caption, and any other data that normally could be joined in is now deleted. The IP I thought was all that was left (in the audit or maybe event log).
I could be wrong and maybe there's something else?
SolarWinds solutions are rooted in our deep connection to our user base in the THWACK® online community. More than 200,000 members are here to solve problems, share technology and best practices, and directly contribute to our product development process.