Ad Widget

Collapse

Мониторинг БД mssql

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • A.Soloviev
    Junior Member
    • Feb 2014
    • 27

    #1

    Мониторинг БД mssql

    Доброго всем времени суток. Просьба помочь в сложившейся ситуации.

    Имеется:
    - сервер CentOS на котором установлен Zabbix сервер и SNMP сервер.
    - удаленные хосты Windows 7 х64 (с Zabbix агентами и/или SNMP агентами).

    Задача:
    Есть ПО, которое пишет лог ошибок в БД. Требуется мониторить базу данных MSSQL на наличие в ней определенной ошибки, история ошибок не должна быть утеряна, т.е. если между удаленным узлом и сервером пропала связь, то когда она восстановится все ошибки (если они были) за этот период должны быть отправлены на сервер (или по другому: ошибки возникшие между запросами с сервера – не должны быть утеряны).

    Базы данных (MSSQL) находятся на удаленных хостах, где установлена ОС Windows 7 х64.

    Предположительно есть несколько вариантов мониторинга:

    1. Итем забикса «Внешняя проверка», для которого указывается имя скрипта с параметрами.
    Преимущества: более «простой» вариант, все скрипты лежат в одном месте.
    Недостатки: сложно вызвать сторонние скрипты, потому что при вызове скрипта заббикс сначала указывает DNS/IP из настроек хоста, а только потом указанные параметры.
    Сложно написать (например на powershell) скрипт, который будет читать БД, при этом запоминать последнюю прочтенную строку с конкретной ошибкой (или сохранять все записи пока они не переданы серверу) и при следующем запросе выдавать все последние интересующие нас события (а не только последнее).
    Расширение Zabbix агентов.
    Пользовательские параметры.

    2. Итем забикса «Мониторинг баз данных». Не известно подойдет ли этот вариант для узлов с Windows 7.
    Недостатки: Ограничения на запросы, которые налагает UnixODBC. Нужно предварительно настроить DSN. Не самый простой вариант.

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

    4. SNMP агент отсылает трапы (trap) серверу, при возникновении ошибки в базе. Для этого надо написать скрипт, который забирает значение из БД, либо вшить агента в ПО которое использует эту БД. Проблема в том, что нет гарантии, того что трапы (или Inform) будут доходить гарантированно и при отсутствии связи с сервером, будут храниться на хостах (все происходящие за период отсутствия связи события).
    Для этого варианта также необходимо в дальнейшем написать собственный MiB (если уж так по правильному), что достаточно сложно.
    Для Windows 7 x64 нет пакета Net-SNMP (http://sourceforge.net/projects/net-...et-snmp/5.6.2/).
    Возможно в следствии этого у меня через командную строчку трапы не доходят (только через ПО Trap Sender), удостоверился не только в забиксе и файле my_zabbix_traps.tmp, но и tcpdump - трапы не приходят если отсылать вручную через cmd.

    Необходимо выбрать наиболее оптимальный вариант и описать по нему ликбез. Во-первых хотелось бы услышать ответ по поводу аккумулирования трапов (информов) при потери связи.

    Спасибо за внимаение.
    Last edited by A.Soloviev; 18-02-2014, 14:30.
  • A.Soloviev
    Junior Member
    • Feb 2014
    • 27

    #2
    Никто не подскажет как zabbix при чтении log-файла определяет когда была последняя ошибка (или другая интересующая запись журнала) и выдает все следующие ошибки?

    - Сервер и агент следят за размером наблюдаемого журнала и временем последнего изменения (для logrt) двумя счетчиками.
    - Агент начинает читать лог-файл с той позиции, в которой он остановился последний раз.
    - Количество байт уже проанализированное (счетчик размера) и время последней модификации (счетчик времени) хранятся в базе данных Zabbix и отправляются агенту, для уверенности, что он начнет читать файл журнала с этой позиции.
    - Всякий раз, когда лог-файл становится меньше, чем известное агенту значение счетчика размера, счетчик обнуляется и агент начинает читать лог-файл с самого начала, принимая во внимание счетчик времени.


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

    Comment

    • A.Soloviev
      Junior Member
      • Feb 2014
      • 27

      #3
      Snmp отсеивается, проверил - информы нигде не копятся при потери соединения.

      Comment

      • first-leon
        Junior Member
        • Aug 2014
        • 6

        #4
        Для этих целей должен подойти zabbix proxy.
        Его нужно установить на каждый из серверов, данные с которых не должны быть утеряны.
        Zabbix proxy будет кэшировать данные.

        Comment

        Working...