-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Create plugin to monitor snapshots #4
Comments
I'm going to give the shared binary approach a try, but will likely require that only one set (age or size) be used at a time. |
Working on this plugin now. I'm likely going to stick with one focus per plugin. Thus far the idea of one "thing" per plugin has been followed; I think it's worth keeping the expected pattern as it will likely make the most sense for new users of the project plugins. |
I've been spinning my wheels on the "size" aspect of this issue for a number of days now and have hit a wall. I'm able to get the size value for After digging into the simulator, I found this: func (vm *VirtualMachine) addSnapshotLayout(snapshot types.ManagedObjectReference, dataKey int32) {
for _, snapshotLayout := range vm.Layout.Snapshot {
if snapshotLayout.Key == snapshot {
return
}
}
var snapshotFiles []string
for _, file := range vm.LayoutEx.File {
if file.Key == dataKey || file.Type == "diskDescriptor" {
snapshotFiles = append(snapshotFiles, file.Name)
}
}
vm.Layout.Snapshot = append(vm.Layout.Snapshot, types.VirtualMachineFileLayoutSnapshotLayout{
Key: snapshot,
SnapshotFile: snapshotFiles,
})
vm.updateStorage()
} func (vm *VirtualMachine) addSnapshotLayoutEx(snapshot types.ManagedObjectReference, dataKey int32, memoryKey int32) {
for _, snapshotLayoutEx := range vm.LayoutEx.Snapshot {
if snapshotLayoutEx.Key == snapshot {
return
}
}
vm.LayoutEx.Snapshot = append(vm.LayoutEx.Snapshot, types.VirtualMachineFileLayoutExSnapshotLayout{
DataKey: dataKey,
Disk: vm.LayoutEx.Disk,
Key: snapshot,
MemoryKey: memoryKey,
})
vm.LayoutEx.Timestamp = time.Now()
vm.updateStorage()
} I think the first is for a deprecated type, the latter is applicable here. The arguments for the |
Replicating some notes I posted to the official repo here, for context if nothing else. Hierarchy of typesLevels above and some below skipped for simplicity and due to my ignorance.
Fields expanded
|
I've hit a wall on checking the size of a snapshot, but I've got enough to work with to complete an age-based monitoring plugin. I'll do that, then hit pause on further size-based monitoring until I get further feedback on the GH issue I opened in the vmware/govmomi project repo. |
As with several other plugins in this project, this one borrows heavily from existing projects. In particular, this plugin was initially based on a PowerShell / PowerCLI plugin I wrote in 2019. Doc updates have been applied, example usage has been added, including a command definition "contrib" file illustrating how the plugin would be referenced within a production Nagios configuration. Note: Some minor scratch notes from my attempt at crafting a combined age/size plugin are also included. Those notes mostly focus on my attempts to understand the process of determining the size of a snapshot using govmomi and the vSphere Web Services API. Partial work towards implementing snapshot size monitoring has also been included, though it is non-functional at this time. I hope to return to this once I understand how the vSphere API (through govmomi) can be used to reliably determine snapshot size information. Other small (unrelated) fixes have also been included, including some bad copy/paste/modify attempts in the README, doc comments, etc. - refs GH-4 - refs GH-32
CREDIT: This plugin would simply not have been possible without the help from @dougm. I'm grateful for both the general feedback (confirming I was looking in the right direction) and taking the time to craft code samples based on a review of the PowerCLI (C#) `Get-Snapshot` implementation. The logic used in this plugin is heavily inspired from the ideas presented, but *attempts* to use a slightly different (but probably less efficient) approach that made more sense to me. The current implementation is based on an evolution of my understanding of the API. While I believe the end results between the two implementations are the same, with further refactoring the implementation used by this project will probably end up looking nearly the same as the code examples originally presented. OVERVIEW: As with several other plugins in this project, this one borrows heavily from existing projects. In particular, this plugin was initially based on a PowerShell / PowerCLI plugin I wrote in 2019. In short, this plugin attempts to provide snapshot size details per snapshot for review, but evaluates size of snapshots for a VM based on the total of all snapshot size values, not individual values. This differs from the snapshots age plugin, which checks each snapshot individually to determine the service check result. Doc updates have been applied, example usage has been added, including a command definition "contrib" file illustrating how the plugin would be referenced within a production Nagios configuration. Partial work implemented with the snapshots age monitoring plugin to handle size monitoring has been completed and is functional as of this set of changes. Further refactoring and polish is needed, but based on initial use in our production environment the results appear to match the results provided by PowerCLI `Get-Snapshot` results. OTHER CHANGES: - Minor tweaks to snapshots age plugin to better mirror new snapshots size plugin. The idea is to eventually refactor both to share common code instead of replicating between the two. - Refactoring (more todo) of `internal/vsphere` code used by both plugins REFERENCES: - refs #4 - refs vmware/govmomi#2243 SEE ALSO: Note to self: See the following branches for "archival" commits that I hammered out while trying to understand the API. There is a lot of cruft and dead ends, but something there may be useful later. - `ARCHIVE-i4-add-snapshots-size-monitoring-plugin` - basically a "dirty" version of the branch holding this commit - `ARCHIVE-i4-add-snapshots-age-monitoring-plugin` - likely contains fragments of functionality from this branch before they were yanked to provide a more focused release (using what functionality was working at the time for the age-based checks) - `i4-add-snapshots-monitoring-plugin` - what I thought was going to be a combined plugin for age and size checks; abandoned, older state than the other branches Squash
CREDIT: This plugin would simply not have been possible without the help from @dougm. I'm grateful for both the general feedback (confirming I was looking in the right direction) and taking the time to craft code samples based on a review of the PowerCLI (C#) `Get-Snapshot` implementation. The logic used in this plugin is heavily inspired from the ideas presented, but *attempts* to use a slightly different (but probably less efficient) approach that made more sense to me. The current implementation is based on an evolution of my understanding of the API. While I believe the end results between the two implementations are the same, with further refactoring the implementation used by this project will probably end up looking nearly the same as the code examples originally presented. OVERVIEW: As with several other plugins in this project, this one borrows heavily from existing projects. In particular, this plugin was initially based on a PowerShell / PowerCLI plugin I wrote in 2019. In short, this plugin attempts to provide snapshot size details per snapshot for review, but evaluates size of snapshots for a VM based on the total of all snapshot size values, not individual values. This differs from the snapshots age plugin, which checks each snapshot individually to determine the service check result. Doc updates have been applied, example usage has been added, including a command definition "contrib" file illustrating how the plugin would be referenced within a production Nagios configuration. Partial work implemented with the snapshots age monitoring plugin to handle size monitoring has been completed and is functional as of this set of changes. Further refactoring and polish is needed, but based on initial use in our production environment the results appear to match the results provided by PowerCLI `Get-Snapshot` results. OTHER CHANGES: - Minor tweaks to snapshots age plugin to better mirror new snapshots size plugin. The idea is to eventually refactor both to share common code instead of replicating between the two. - Refactoring (more todo) of `internal/vsphere` code used by both plugins REFERENCES: - refs #4 - refs vmware/govmomi#2243 SEE ALSO: Note to self: See the following branches for "archival" commits that I hammered out while trying to understand the API. There is a lot of cruft and dead ends, but something there may be useful later. - `ARCHIVE-i4-add-snapshots-size-monitoring-plugin` - basically a "dirty" version of the branch holding this commit - `ARCHIVE-i4-add-snapshots-age-monitoring-plugin` - likely contains fragments of functionality from this branch before they were yanked to provide a more focused release (using what functionality was working at the time for the age-based checks) - `i4-add-snapshots-monitoring-plugin` - what I thought was going to be a combined plugin for age and size checks; abandoned, older state than the other branches
Overview
In the old codebase this was implemented as two plugins:
Both plugins allowed excluding individual VMs or resource pools as did other plugins in the set. I'm not sure yet whether this project will have two plugins or a shared plugin to handle both items. The
check-path
project uses a shared plugin approach where monitoring criteria can be specified as needed. If not specified, those thresholds are not checked.Goals
IncludeRP
) allow restricting VMs to select Resource PoolsExcludeRP
) allow excluding a list of Resource PoolsIgnoreVM
) allow excluding a list of individual VMsReferences
The text was updated successfully, but these errors were encountered: