SCOM и Grafana: рисуем графики — часть 2: Drill Down, Data Warehouse и docker

microsoft SCOM и Grafana: рисуем графики - часть 2: Drill Down, Data Warehouse...
Главная microsoft SCOM и Grafana: рисуем графики - часть 2: Drill Down, Data Warehouse...

В прошлом посте мы забирали данные из OperationsManager базы SCOM’a, чтобы что-то нарисовать в Grafana и у нас получился примерно вот такой вот дашборд:

В этом посте разберемся, как сделать Drill Down, чтобы при клике на панель мы могли провалиться в другой дашборд, где бы была уже собрана более детальная информация по конкретному сервису/серверу. В Grafana это называется Data link и появилось с версии 6.3. Grafana может передать в другой дашборд любую переменную с именем вашего сервиса, отметкой времени и т.д., а мы уже эту переменную обработаем в новом дашборде. В нашем случае это будет объект в SCOM’е или проще — FQDN-имя сервера. Про встроенные переменные можно почитать в документации Global Built-in Variables.

Но перед тем как приступить к построению дашбордов, нам необходимо решить, а какие данные и откуда будем тянуть. Здесь есть ряд нюансов. В System Center Operations Manager есть две базы: OperationsManager и OperationsManager Data Warehouse. SCOM пишет данные одновременно и в одну, и в другую, но вот хранятся они там по-разному, а это будет очень сильно влиять на то, как ваши графики будут отображаться. Если мы берём базу OperationsManager, то данные мониторинга, событий, алёрты, метрики и прочее хранятся всего 7 дней. Определяется это в консоли SCOM’a — Administration — Settings — Database Grooming или в powershell: Get-SCOMDatabaseGroomingSetting и Set-SCOMDatabaseGroomingSetting.

Понимаете к чему я веду? Когда вы захотите посмотреть метрики за месяц, то будет примерно такая картина.

Ага, все верно, данные за 7 дней и всё. Но где же остальные данные? Они хранятся в базе Data Warehouse, но с ними другие приколы. Если мы возьмем один и тот же сервер и сравним одну и ту же метрику, например нагрузка на CPU, то увидим примерно следующее.

Вот данные из баз OperationsManager и Data Warehouse. Видно, что в левой части данные хранятся согласно правилам сбора, а в правой части — среднее значение за час.

Пример правила для сбора метрики по CPU в Windows Server 2012 R2

Но почему так? Смысл в том, что данные в Data Warehouse не складываются просто абы как, а агрегируются в уникальные Datasets, которые представляют разные типы данных (события, алёрты, метрики и т.д.), которые еще имеют разный тип агрегации (raw, hourly, daily). Т.к. в данном запросе я «селектнул» из Perf.vPerfHourly, то и данные представлены часовым «шагом». Но вы скажите: «эй, там же есть raw (сырые) данные, а давай мы дёрнем из них и все будут счастливы». Raw данные хранятся 10 дней и менять это значение не имеет смысла, т.к. метрики это одна из самых прожорливых вещей в Data Warehouse.

То, сколько хранить данные в Data Warehouse можно посмотреть и изменить. Самый простой вариант это либо DWDataRP от Kevin Holman, либо SCOM DataWarehouse Grooming Settings. Я думаю, что те, кто сталкивался с чисткой базы Data Warehouse знакомы с этими тулзами.

DataWarehouse Grooming Settings

Какой из всего этого можно сделать вывод? Если мы хотим построить график из данных в базе Data Warehouse, то у нас всё равно будут средние данные за час.

Например, вот данные в промежутке между 3-мя и 6-ью утра, есть какое-то изменение по CPU, но на самом деле данные выглядят вот так (см. ниже).

У нас нет плавного роста с 3-х утра, а есть ровный скачок в 4:15, далее 30 минутная нагрузка и полный спад. Просто, чтобы вы понимали с какими нюансами придётся столкнуться, если вы вдруг захотите что-то проанализировать. Всё не так очевидно. ;)

Ладно, пора приступить к созданию дашборда. Первым делом добавить новый Datasource. В этом посте написано, как создать, только там мы добавляли доступ к базе OperationsManager, а здесь добавляем OperationsManagerDW.

Открываем Grafana и создаем новый дашборд, название придумайте сами.

В меню Variables создадим новую переменную hostname с типом Constant.

Если вы хотите использовать данные из OperationsManager, тогда смело открывайте первый пост и забирайте все запросы для метрик производительности из него, а вот для Data Warehouse будет всё ниже.

Получаем список хостов из группы All Windows Computers.

Получив список агентов, можно посмотреть, что у нас хранится в Perf.vPerfHourly и как называются счетчики.

Когда получили список ObjectName и CounterName для нашего хоста, можно уже вытащить их значения из DataWarehouse.

Так, я думаю, что теперь логика понятна, как вытаскивать метрики из базы, осталось совсем немного доработать запрос в Grafana, чтобы когда мы переходили с первого дашборда, нам отображались метрики для нужного нам хоста.

Открываем Grafana и создаем новую панель. Наш запрос в Grafana теперь будет выглядеть вот так. $__timeEpoch(Perf.vPerfHourly.DateTime) — объяснит графане, что это datetime, Perf.vPerfHourly.AverageValue as value — это значение, vManagedEntity.DisplayName in(‘$hostname’) — примет в переменную $hostname значение из первого дашборда.

Ну, и теперь набирайтесь терпения, т.к. вам надо создать столько панелей, сколько вы хотите, для всех метрик, которые вам нужны. Да, придется немного посидеть с sql-запросами. После того, как вы создали все нужные вам панели, необходимо настроить линк с первого дашборда в ваш новый.

Открываем наш первый дашборд, выбираем Health State и нажимаем Edit.

Переходим в General, нас интересует Panel Links, вбиваем Title, затем URL на наш второй дашборд и добавляем к нему ?var-hostname=${hostname}

Теперь при клике на красно-желто-зеленый прямоугольник, вас будет перебрасывать в новый дашборд, где вы можете собрать сколько угодно графиков, но уже по конкретному сервису/серверу/приложению. На самом деле, одними графиками дело не обходится, если очень хочется, то можно нарисовать хоть весь статус вашего Distributed Application, понавытаскивать данные в какие-то таблички, подцепить логи и т.д. Если вы дошли до этого места и что-то попробовали, то обязательно поделитесь в комментариях, как все прошло, возможно, что у вас есть какой-то свой опыт и вы хотели бы поделиться им.

И еще один момент про который я хотел бы написать — это как запустить графану «на попробовать». ;) Самый просто вариант взять любой windows хост, хоть клиентскую Windows 10, поставить себе Docker Desktop for Windows. После установки выполнить несколько простых манипуляций: — создать volume для хранения настроек графаны, которую вы запустите в контейнере; — запустить контейнер. Всё.

Вуаля, открываем браузер, идем на localhost:3000, стандартный admin/admin и наслаждаемся.

зыж docker start grafana, чтоб просто запустить контейнер.

зыж спасибо, что дочитали до конца. ;) Лайк. Шер. Алишер. Фидбек в комментарии. Peace.

Anton Mosyaginhttps://masyan.ru
Microsoft MVP: Azure, MCP, VCP, ski/kite/wake/long/surf/snowboarding. Work for Rambler Group and at this moment my main focus is Enterprise Client Management via ConfigMgr/Intune/Parallels Mac Management, SCOM/OMS, Microsoft Azure and python. Founder of the biggest ConfigMgr community in Russia, author of channel "ITpro News & Reviews" in Telegram - https://t.me/MicrosoftRus and creator of podcast "MamkinBoyCast" - MamkinBoyCast.ru

6 КОММЕНТАРИИ

  1. После первой статьи развернул у себя и настроил дашборды для серверов. Также у меня в SCOM завернут мониторинг принтеров Xerox, делал новый MP, т.к. официальный MP от Xerox работает только с SCOM 2007 или у тех, кто с него апгрейдился. В SCOM 2012 класса такого нет. Но через Grafana и SCOM сделал только отображение состояния принтера и алерты по замятию и т.д. Потом подцепил принтеры через telegraf и допилил дашборд с состоянием расходки.
    А далее понеслось по наклонной: дашборд для squid с логами из elasticsearch и т.д. Очнулся по уши в DevOPs

  2. После первого поста сделал борд на основе scom групп, внутри которых сервера. Это несколько облегчает фильтрацию и отображение. Можно отображать сразу все необходимые метрики по серверам.
    Было бы круто иметь один датасурс в графане для предоставления метрик из scom, но в моем случае это два инстанса и запросы объединить не получается + постоянно приходится пилить борды для двх и оп ДБ (двойная работа). Есть мысли у кого-нибудь как сливать данные в одну бд и отдавать в графану?
    За Drill down отдельный РЕСПЕКТ!

    • пока хз ;)
      Самый просто вариант, если базы на одном сервере живут, то можно просто добавить датасурс sql сервера, а в запросах использовать use OperationsManager; или use OperationsManagerDW; Тогда на одном графике будет два значения отрисовывать.

    • точно можно выбирать разные датасорсы в переменных, но я пока не придумал, как это можно использовать.

    • а, я нашёл, mixed запросы, в выпадающем меню внизу есть —Mixed—
      и вот там можно миксовать запросы.

Добавить комментарий