Ошибка Failed to convert performance data в System Center Operations Manager 2012
После установки новых пакетов управления (Management Pack) SQL Server версии 6.4.0.0 на System Center Operations Manager 2012 R2 в событиях стали появляться уведомления с заголовком Operations Manager Failed to convert performance data и содержанием представленном чуть ниже, могу отметить, что они не критичные, но стоят внимания со стороны системного администратора:
Модулю не удалось преобразовать параметр в двойное значение. Исходный параметр: "$Data/Property[@Name='CPUUsage']$" Параметр после замены $Data: "1.#INF" Ошибка: 0x80020005 Подробности:Type mismatch. Это затронуло один или несколько рабочих процессов. Имя рабочего процесса: Microsoft.SQLServer.2008.DBEngine. CPUUsagePercentMonitor Имя экземпляра: MSSQLSERVER ИД экземпляра: {53711322-4783-9029-7E20-646B41F2E995} Группа управления: MG
В английской версии OpsMgr уведомление выглядит так:
Module was unable to convert parameter to a double value Original parameter: '$Data/Property[@Name='CPUUsage']$' Parameter after $Data replacement: '-1.#IND' Error: 0x80020005 Details: Type mismatch. One or more workflows were affected by this. Workflow name: Microsoft.SQLServer.2008.DBEngine.CPUUsagePercentMonitor Instance name: MSSQLSERVER Instance ID: {yyyy} Management group: MG
У нас уведомления генерируются на SQL server 2008, 2008 R2 и 2012.
На данный момент отсутствует правильное устранение ошибки. Ожидаем обновления пакетов управления для SQL серверов.
Временное решение — отключение двух правил:
MSSQL 2012: Collect DB Engine CPU Utilization (%) MSSQL 2008: Collect DB Engine CPU Utilization (%)
и отключение двух мониторингов:
CPU Utilization (%) for 2008 CPU Utilization (%) for 2012
Источник проблемы,
It looks like a bug in the script function Main {param ($ computerName) - called with cluster host name and then listing of active instances of SQL on node $ counters = (Get-Counter ("\ Process (sqlservr *) \ ID Process")). CounterSamples $ counters | foreach { And here is the error: $ allowedCoreCount = GetSQLAllowedCoreCount $ computerName $ instanceName $ logicalCoresCount The computerName may be different. In my case, the configuration is as follows: A two-node cluster, and 3 instances of the SQL: cl-sql-01\sql1 cl-sql-02\sql2 cl-sql-03\sql3 This rule is invoked for the first instance of an error does not occur in first foreach. However, the second will be generated connection string sql-sc-01\sql2 that will cause an error.