Вопрос или проблема
Недавно мы перешли на использование Azure Monitor для оповещений о проблемах с инфраструктурой. Однако я недавно обнаружил, что некоторые серверы не отображаются, когда они приближаются к предельной ёмкости…
Наши оповещения Azure Monitor основаны на запросах Kusto, таких как:
Perf
| where TimeGenerated > ago(1h)
| where ObjectName in~ (‘LogicalDisk’, ‘Logical Disk’) and CounterName =~ ‘% Free Space’
| where not (InstanceName in~ (“_Total” , “total” )) and not (InstanceName startswith “/snap”)
| summarize arg_max(TimeGenerated, CounterValue) by Computer, InstanceName, _ResourceId
| project Computer, InstanceName, _ResourceId, CounterValue, TimeGenerated
Однако в вопросе сервера изначально были настроены командой, расположенной в Испании / в ходе расследования мы обнаружили, что язык ОС был установлен на испанский, поэтому логи были на испанском языке; т.е. нам пришлось бы фильтровать по ObjectName =~ ‘Disco lógico’ и CounterName =~ ‘% de espacio disponible’, чтобы увидеть эти логи.
Существует ли “правильный” способ решения таких сценариев?
Мы не хотим изменять наши запросы, чтобы учитывать все языки, было бы хорошо стандартизировать ОС на всех серверах на английском по умолчанию, но это может повлиять на приложения, размещенные на них, поэтому это не быстрое решение (хотя, вероятно, стоит сделать в долгосрочной перспективе, так как это язык по умолчанию в нашей компании и все сотрудники свободно говорят на английском). Я надеюсь, что существует какое-то культурно-непредвзятое значение, по которому мы можем фильтровать (хотя я не вижу никаких столбцов в таблице Perf для этого), или, возможно, настройка, которая изменяет язык, используемый агентом Azure Monitor при ведении этой информации, не завися от языка ОС.
Вопрос на стороне: можем ли мы использовать Kusto, чтобы получить эту языковую настройку (т.е. будет ли эта информация в каких-либо таблицах, создаваемых агентом Azure Monitor или агентом Azure Guest VM), чтобы, если мы стандартизируем язык, мы могли захватить любые ВМ, которые отклоняются?
Ответ или решение
Для решения проблемы с многоязычными названиями счетчиков в таблице Perf Azure Monitor можно рассмотреть несколько подходов. Краткое описание решения приведено ниже.
1. Понимание проблемы
Вы столкнулись с ситуацией, когда данные о производительности собираются в зависимости от языка операционной системы. Например, на серверах с испанским языком операционной системы названия объектов и счетчиков отображаются на испанском, что затрудняет их мониторинг через единые Kusto-запросы.
2. Унифицирование языка ОС
Ваше намерение стандартизировать все ОС на английском языке является правильным шагом с точки зрения упрощения мониторинга и анализа данных. Однако, как вы упомянули, это может негативно сказаться на некоторых приложениях, работающих на этих серверах. Поэтому рекомендую сделать следующее:
- Оцените влияние: Проведите анализ текущих приложений, чтобы определить, как изменение языка ОС может повлиять на их работу. Это может включать протестирование на копиях серверов.
- Планируйте миграцию: Если приложения не зависят от языка, составьте план по переходу всех серверов на английский язык, что будет идеальным решением в долгосрочной перспективе.
3. Обработка многоязычных счетчиков
Если немедленная стандартизация языка невозможна, вы можете использовать следующие подходы:
-
Используйте регулярные выражения: В запросах Kusto можно воспользоваться операторами, которые позволяют создавать более гибкие фильтры. Например, можно использовать регулярные выражения для определения названий объектов или счетчиков:
Perf | where TimeGenerated > ago(1h) | where ObjectName matches regex 'LogicalDisk|Disco lógico' and CounterName matches regex '% Free Space|% de espacio disponible' | where not (InstanceName in~ ("_Total", "total")) and not (InstanceName startswith "/snap") | summarize arg_max(TimeGenerated, CounterValue) by Computer, InstanceName, _ResourceId | project Computer, InstanceName, _ResourceId, CounterValue, TimeGenerated
-
Сохраните названия в метаданных: Можно создать словарь в вашем приложении или системе управления конфигурацией, который будет сопоставлять названия счетчиков с различными языками. Это будет затруднительно, но может помочь в будущем.
4. Получение настройки языка с помощью Kusto
Что касается побочного вопроса о том, можно ли с помощью Kusto получить информацию о настройках языка, к сожалению, в стандартных таблицах Azure Monitor Agent или Azure Guest VM Agent подобная информация не хранится. Однако вы можете рассмотреть возможность создания пользовательского скрипта на PowerShell или другой язык сценариев, чтобы собирать такие данные.
- Создание пользовательского решения: Вы можете настроить выполнение сценария на каждом сервере, который будет собирать информацию о языке ОС и записывать её в специальный журнал или таблицу, доступную для анализа через Kusto.
Заключение
В краткосрочной перспективе рекомендуется использовать гибкие фильтры в запросах Kusto для обработки многоязычных данных. В долгосрочной перспективе, стандартизация языка ОС на английском поможет избежать подобных проблем. Не забудьте провести анализ влияния на приложения перед внедрением изменений.