Ad Widget

Collapse

Забирать данные забиксом из ms sql

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • pdaXimik
    Junior Member
    • May 2015
    • 10

    #1

    Забирать данные забиксом из ms sql

    Есть много серверов x86, данные о их состоянии и прочий мониторинг уходит на SCOM. Сервера и SCOM админят другие люди.
    Есть сервер zabbix 2.0.2, на нем мониторится около 200 хостов, все по SNMP. Забикс мой - система досталась в наследство.

    Задача: забирать из бд скома (ms sql соответственно) определенные данные, снимаемые с серверов. Т.е. прямым обращением к базе скома забирать тоже самое, что я снимаю по SNMP опросом с другого оборудования.

    Граждане-коллеги, понимаю, что данный функционал так или иначе присутствует, понимаю принцип работы, но как реализовать...
    Возможно подскажете куда копать и что прочесть. В написании скриптов и БД в целом - не силен.
  • rough-84
    Senior Member
    • Oct 2014
    • 198

    #2
    Пользуюсь активными проверками и забираю через sqlcmd.


    EnableRemoteCommands=1

    UserParameter =test1,sqlcmd -S HOST -E -i c:\zabbix\test.sql
    UserParameter = test2,sqlcmd -S Uимя_хоста -Uпользователь -Pпароль -i c:\zabbix\test2.sql

    Можно ещё через exec если нет желания плодить запросы в папках.

    Comment

    • pdaXimik
      Junior Member
      • May 2015
      • 10

      #3
      rough-84
      Спасибо за ответ, но понятней не стало.
      Zabbix мне известен на уровне - поставить, добавить несколько хостов с SNMP и настроить тригеры на те или иные результаты.

      В общем суть задачи не изменилась: забирать данные из базы ms sql мониторинга, из определенных таблиц (список таблиц есть). Завели учетку для доступа к базе. Выдали скрипт.
      Главный вопрос - что с ним делать и как вообще это все запихнуть в zabbix, чтобы видеть конечные показания?
      Прошу отнестись с пониманием, спросить особо не у кого)

      Code:
      SELECT DT.RuleRowId, DT.DisplayName, DT.DateTime, D.C.query('./SnmpVarBind/Value[1]') AS Data 
      
      FROM (SELECT T.RuleRowId, T.DisplayName, vE.DateTime, CAST(vED.EventData as XML) AS xmlquery
      
                   FROM  Event.vEventDetail AS vED
      
                   INNER JOIN  Event.vEvent AS vE ON vE.EventOriginId = vED.EventOriginId
      
                   JOIN Event.vEventRule ON Event.vEventRule.EventOriginId = vED.EventOriginId
      
                   JOIN (SELECT Event.vEventRule.EventOriginId, vManagedEntity.DisplayName, Event.vEventRule.RuleRowId FROM Event.vEventRule, vManagedEntity  
      
                   WHERE Event.vEventRule.ManagedEntityRowId IN (SELECT vManagedEntity.ManagedEntityRowId FROM vManagedEntity
      
                   JOIN  SNMPReportHosts ON vManagedEntity.DisplayName = SNMPReportHosts.HostName) AND Event.vEventRule.ManagedEntityRowId = vManagedEntity.ManagedEntityRowId 
      
                   ) AS T ON vE.EventOriginId = T.EventOriginId) AS DT
      
             Cross Apply xmlquery.nodes('//EventData/DataItem/SnmpVarBinds') D(C)
      
      WHERE DT.RuleRowId IN (1103)
      
      ORDER BY DT.DisplayName, DT.DateTime DESC
      Last edited by pdaXimik; 09-03-2016, 13:56.

      Comment

      • rough-84
        Senior Member
        • Oct 2014
        • 198

        #4
        У вас в запросе вроде таблица получается, интерестно что вы с ней хотите сделать в zabbix ?
        Я конечно сам новичек, но мне кажется zabbix заточен исключительно под числа и всё что с ними связано. Вы конечно сможете наверное запихнуть полученные результаты запроса в item используя тип информации - строка, но что вам это даст.

        По поводу своего предыдущего сообщения.
        Sqlcmd - это бесплатная утилита, просто скачайте её и пихните в корень диска C.
        Далее в файле конфигурации клиента (zabbix_agentd) прописываете строки
        ServerActive=ip zabbix сервера
        Hostname=имя хоста в точности как он называется в zabbix

        Далее начинаете тестировать через командную строку запросы
        sqlcmd -S HOST -E -i c:\zabbix\test.sql
        где хост - это сервер базы данных(приминимо если выполнять на самом сервере базы данных а не для удаленных баз), если база на другом сервере там будет другой синтаксис который можно изучить из мануала sqlcmd
        c:\zabbix\test.sql - это путь где лежит ваш запрос.

        В резельтате в командной строке вы должны увидеть результат выполнения запроса, как только этого добились, можно добавлять в фаил
        zabbix_agentd строку вида:
        UserParameter =test1,sqlcmd -S HOST -E -i c:\zabbix\test.sql
        Где test1 - это ключ, который мы позже пропишем в заббикс создавая item.
        sqlcmd -S HOST -E -i c:\zabbix\test.sql - это наша команда которая возвращает данные из запроса.

        Далее в zabbix создаём item у нужного хоста с ключём test1 и необходимым для вас типом информации.

        PS я всё это делаю исключительно с цифрами, таблицы в заббикс не таскаю, не знаю что с ними там можно сделать и зачем это вообще.
        Last edited by rough-84; 09-03-2016, 14:03.

        Comment

        • pdaXimik
          Junior Member
          • May 2015
          • 10

          #5
          Немного ближе, но все же..)
          Проблема как раз в том, что я и сам не представляю как это должно работать. База ms sql находится под управлением другими людьми, контакт с ними есть, но непростой.
          На сей момент у меня есть учетная запись в общем домене с правами к этой базе, список таблиц и пара скриптов, как постом выше.
          Для начала - какая информация еще нужна от админов базы?

          Как я понял - скрипт делает выборку из таблиц и представляет готовые данные (имя железки, название параметра и значение), но как эти данные взять мне не понятно.

          sqlcmd мне нужно поставить на рабочую станцию и на нее же накатить забикс агента? Потом свою рабочую станцию добавить хостом в заббикс?

          Comment

          • rough-84
            Senior Member
            • Oct 2014
            • 198

            #6
            Похоже на какой то нереальный геморой.
            Если железяк и параметров много я хз как это автоматизировать.
            Может кто чего и подскажет, но я бы особо не ждал.
            Я бы наверное на вашем месте начал потихоньку придумывать схему:
            Определить хост в заббиксе на котором вы будите хранить все эти данные, придумать понятное для вас обозначение (когда вам будет приходить уведомления типа host:item -fail ) вам нужно будет сразу сообразить что это за железяка.
            Обдумать как вы будите проверять появление новых желеок и удаление Хотя скриптом вроде не сложно.
            Если всё же железок и параметров не так уж много я наверное начал бы по каждому из них писать скрипт, в котором будет выдавать параметр в виде числа, если оно изначально не числовое.
            Но если железок под 50+ и много параметров, то хз, это уже будет маразм наверное.
            Может кто то тут подскажет что то действеное.

            Comment

            • pdaXimik
              Junior Member
              • May 2015
              • 10

              #7
              Не похоже, а так и есть. Проблема в том, что люди не хотят давать доступ к модулю управления нужных мне железок, а предлагают забирать данные из базы их системы мониторинга. Мне при этом не понятно как и где это все лежит (в БД я не силен). Скрипт соорудили, скорее всего, в SQL Management Studio, но что он делает не понятно.

              Вы советуете, если я правильно понял, делать эти запросы вручную непосредственно из базы ms sql, но как мне понять что где лежит и как это автоматизировать.

              В общем склоняюсь забить на все эти надстройки и согласиться на простые трапы с их стороны.

              Comment

              • rough-84
                Senior Member
                • Oct 2014
                • 198

                #8
                Ну и зная колличество хостов и колличество пораметров можно посчитать колличество необходимых изначально скриптов
                колличество параметров умножаем на колличество хостов. Если цифра адекватная в бой,можно и погемороиться.

                Вам выслали скрипт который видимо собираем всё в кучу, типа - имя хоста - параметр 1 - значение - параметр2 - значение итд.

                Если бы реально припекло я бы начал штамповать простячковые скрипты в том же sql management studia.
                Один скрипт бы возвращал бы значение 1 параметра 1 хоста.
                Ну и зная колличество хостов и колличество пораметров штампуем скрипты, и по схеме что я описал выше фигачим это всё на какой нить 1 хост к которому у вас есть доступ.

                Comment

                • pdaXimik
                  Junior Member
                  • May 2015
                  • 10

                  #9
                  Видимо я не достаточно силен в этом, потому как на каждый ответ появляется 2 вопроса. Перечислю, как все это видится мне:
                  Выясняем в какой таблице, что лежит, находим нужное и пишем под это дело скрипт.
                  Скрипт выполняя, складывает ответный параметр в какое-то место.
                  В самом забиксе настраиваем забор из этого места, как конкретный итем с конкретным значением.
                  Как понимаю, место под скрипты и возвращенные значения нужно отдельным хостом на винде. С этим хостом забикс будет общаться через установленного агента.
                  Хостов для мониторинг должно быть 50-100, с каждого 3-4 параметра.

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

                  Comment

                  • zmdpc
                    Senior Member
                    • Oct 2014
                    • 484

                    #10
                    А почему нельзя сделать по аналогии?

                    Comment

                    • zyxar
                      Member
                      • Feb 2016
                      • 33

                      #11
                      Для получения данных от mssql можно воспользоваться агентом забикса на сервере забикса. Если параметры у хостов одинаковые, то скорее всего можно написать шаблон с автообнаружением параметров, по аналогии с SNMP oid. Тут нужны навыки по SQL и знание хоть одного скриптового языка.

                      Comment

                      • aib
                        Senior Member
                        • Jan 2014
                        • 1615

                        #12
                        Если у вас есть опыт написания скриптов, то можно попробовать написать свой.
                        Примерный сценарий этого проекта:
                        1) создаете вручную в базе Zabbix все хосты, которые будут содержать информацию из базы MS SQL.
                        2) Для каждого хоста создаете элементы данных, которые вы хотели бы хранить и контролировать в Zabbix-окружении.
                        3) Пишете скрипт, который забирает таблицу текущих данных из MS SQL, разбирает её на отдельные строки и передает эти строки в Zabbix server, используя команду zabbix_sender.
                        4) Конфигурируете cron, чтобы он запускал написанный вами скрипт по расписанию (каждый день/час/минуту)

                        Если есть желание - вы сможете найти на форуме примеры таких скриптов (на разных языках) и доработать скрипты под свою конфигурацию. Как вы понимаете, решения "из коробки" нет и не будет.
                        Сам, всё сам...
                        Sincerely yours,
                        Aleksey

                        Comment

                        Working...