
I have moved script logging to OMS
For some time I have “rewritten” my scripts to utilize variables, connections and other assets in Azure automation. While doing this I have moved all script logging to the cloud as well.
previously all scripts were logging to a file or to the computers event log. I have some experience with sending custom data to OMS. Using their API i have sent weather data and the technique could easily be transferred to do my script logging.
I thought about creating a module for this for a while, but luckily, the great Mr Tao Yang already did it and it is available on GitHub, PSGallery and in Azure automation. The only thing i had to do was wrap everything in a function and call that each time i needed a log entry sent from my scripts.
Based on Tao’s OMSDataInjection module. Here’s how my function looks like
<# .DESCRIPTION Function sends a entry to OMS Log analytics. Used to send script log entries to OMS in a 'one liner' .NOTES Requires Tao Yang's OMSDatainjection Module: https://github.com/tyconsulting/OMSDataInjection-PSModule/releases/tag/1.1.1 Author: Martin Ehrnst www.adatum.no .CHANGELOG 06.12.16: Initial function release #> param ( [parameter(Mandatory=$true)] [string]$Message, [parameter(Mandatory=$true)] [ValidateSet('Information','Warning','ERROR')] [string]$Severity ) $LogEntry = @{ ScriptName = scriptName Severity = $Severity RanAT = $env:COMPUTERNAME Message = "$Message" LogTime = [Datetime]::UtcNow } $SendLog= New-OMSDataInjection -OMSWorkSpaceId '**************' -PrimaryKey '********************************' -LogType 'test' -UTCTimeStampField 'LogTime' -OMSDataObject $LogEntry }
The only thing you have to before you use it is to define your script name, OMSWorkspaceID, PrimaryKey and a LogType. When all is good. Call this each time you want to send a log entry
Send-LogEntry -Message "testing 123" -Severity Warning
Here is a script, from on prem to Azure Automation to run on a Hybrid worker using this function to do the logging.
Please note that since i run through azure automation i have created a connection object and reffeer to that using instead of specifying the ID and Key.
<# .NAME Close-OldSCOMAlerts.ps1 .DESCRIPTION Closes SCOM alerts based on severity, resolution state, repeat count etc. Alter settings in the configuration regions. The script requires OpsMgr module and Azure automation. I Reccomend storing the credentials and variables as assets and run the script on a hybrid worker. If you want to run locally, change the script parameters and hard code the values. .NOTES Requires Operations Manager Module and Tao Yang's OMSDatainjection Module Author: Martin Ehrnst Version: 1.1 Initial (Azure automation) Release 28.11.16 www.adatum.no www.intility.no .CHANGELOG 08.12.16: Using Tao Yang's OMSDataInjectionModule to ship script logs to OMS Removed local logging #> #region Configuration $ErrorActionPreference = "Continue" #$VerbosePreference = "Continue" #Uncomment to see verbose output [int]$RepeatCount = 2 #Alerts with less than x repeat count will close [int]$AlertAgeHours = 3 #Alert Age (older gets closed) [string]$AlertSeverity = "Information" #specify alert severity you want to close [int]$ResolutionState = 0 #0 NEW [int]$SetState = 255 #255 CLOSED [string]$Comment = "Alert closed by script in azure automation" #Comment to set on the closed alerts #endregion #region Modules Import-Module "C:\Program Files\WindowsPowerShell\Modules\OMSDataInjection\1.1.1\OMSDataInjection.psm1" $module = Get-Module -Name OperationsManager if (!$module){ Write-Verbose "Could not find SCOM Module. Importing" Import-Module OperationsManager -Cmdlet Get-SCOMalert, New-SCOMManagementGroupConnection, Update-SCOMAlert, Set-SCOMAlert } #endregion #region OMSLogging $OMSWorkspace = Get-AutomationConnection 'I2-Intility-Test' function Send-LogEntry{ <# .DESCRIPTION Function sends a entry to OMS Log analytics. Used to send script log entries to OMS in a 'one liner' .NOTES Requires Tao Yang's OMSDatainjection Module: https://github.com/tyconsulting/OMSDataInjection-PSModule/releases/tag/1.1.1 Author: Martin Ehrnst www.adatum.no www.intility.no .CHANGELOG 06.12.16: Initial function release #> param ( [parameter(Mandatory=$true)] [string]$Message, [parameter(Mandatory=$true)] [ValidateSet('Information','Warning','ERROR')] [string]$Severity ) $LogEntry = @{ ScriptName = 'Close-OldSCOMAlerts.ps1' Severity = $Severity RanAT = $env:COMPUTERNAME Message = $Message LogTime = [Datetime]::UtcNow } $SendLog= New-OMSDataInjection -OMSConnection $OMSWorkspace -LogType 'AutomationLogs' -UTCTimeStampField 'LogTime' -OMSDataObject $LogEntry } #endregion Send-LogEntry -Message "Starting azure automation runbook to close old scom alerts" -Severity Information #region AzureConfig $SCOMOperator = Get-AutomationPSCredential -Name 'AzureAutomationSCOMOperator' $SCOMManagementServer = Get-AutomationVariable -Name 'SCOMProdSDKServer' #endregion Try { #Connecting to SCOM management server Write-Verbose "Connecting to $ManagementServer" New-SCOMManagementGroupConnection -ComputerName $SCOMManagementServer -Credential $SCOMOperator } Catch { Write-Error "$_.Exception.Message" Send-LogEntry -Message "$_.Exception.Message" -Severity ERROR } #Actual alert work $Date = (Get-Date).AddHours(-$AlertAgeHours).ToUniversalTime() #Setting Alert age and converting to UTC $Alerts = Get-ScomAlert | where {$_.TimeRaised -lt $Date ` -and $_.ResolutionState -eq $ResolutionState ` -and $_.Severity -match $AlertSeverity ` -and $_.RepeatCount -lt $RepeatCount ` -and $_.IsMonitorAlert -eq $false } if ($Alerts){ $count = $alerts.Count Send-LogEntry -Message "Closing $count alerts" -Severity Information $alerts | Set-SCOMAlert -ResolutionState $SetState -Comment $Comment Send-LogEntry -Message "Finished - closed $count alerts" -Severity Information Write-Output "closed $count alerts" } else{ Write-Output "No old alerts to close. Exiting script" Send-LogEntry -Message "Finished. No alerts to close" -Severity Information }
3 COMMENTS
Thank you very much for sharing, I learned a lot from your article. Very cool. Thanks. nimabi
Thank you very much for sharing, I learned a lot from your article. Very cool. Thanks. nimabi
I am a student of BAK College. The recent paper competition gave me a lot of headaches, and I checked a lot of information. Finally, after reading your article, it suddenly dawned on me that I can still have such an idea. grateful. But I still have some questions, hope you can help me.
Comments are closed.