Ad Widget

Collapse

Мониторинг наличия файлов по маске не старше 10 минут

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • anton.tkachenko
    Junior Member
    • Feb 2019
    • 4

    #1

    Мониторинг наличия файлов по маске не старше 10 минут

    Коллеги,


    Сразу прошу прощения, если такой топик уже есть - просто дайте ссылку. Мои поиски не увенчались успехом.

    Есть Zabbix 3.4. Необходимо настроить мониторинг наличия файла по определенной маске. Триггер должен срабатывать, если файла по маске моложе 10 минут в папке нет.
    Use case: в папку сохраняются CDR с телефонной станции, и если файл не обновляется - значит что-то заклинило и требуется вмешательство. Ротируются файлы ежедневно.

    Заранее большое спасибо откликнувшимся.
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3406

    #2
    В агенте 4.0 появилась такая метрика как vfs.dir.count[...], среди параметров которой можно задать как нужные маски файлов, так и их ограничения по возрасту. Другое дело, что агенты 4-й версии не вполне совместимы с серверами предыдущих версий (могут не работать с ними в пассивном режиме, в активном режиме всё ОК).

    Для данного use case я бы ещё предложил складывать в определённую папку только нужные файлы (чтобы не было необходимости следить за масками), тогда можно было бы следить просто за временем обновления этой папки с помощью метрики vfs.file.time[...] и сравнивать с текущим временем на сервере с помощью триггерной функции fuzzytime().

    Ну и универсальный способ - писать свой скрипт, запускаемый через UserParameter.

    Comment

    • AvaTTaR
      Member
      • Dec 2018
      • 96

      #3
      использовать новую метрику агента на старом серваке по-моему нельзя, так что делайте sh-скрипт, что-то вроде простого:

      find /HereIsALogDir/ -mmin -10 -type f | grep сюда маску| wc -l

      И триггер срабатывающий если возращённое значение > 0
      Подобные внешние проверки особо систему не напрягают, так что как решение до перехода на 4-ый заббикс подойдёт.

      Comment

      • anton.tkachenko
        Junior Member
        • Feb 2019
        • 4

        #4
        Originally posted by AvaTTaR
        использовать новую метрику агента на старом серваке по-моему нельзя, так что делайте sh-скрипт, что-то вроде простого:

        find /HereIsALogDir/ -mmin -10 -type f | grep сюда маску| wc -l

        И триггер срабатывающий если возращённое значение > 0
        Подобные внешние проверки особо систему не напрягают, так что как решение до перехода на 4-ый заббикс подойдёт.
        AvaTTaR,

        Решение - супер!!! Есть одно "НО": сервер, на котором надо следить за файлами и стоит агент - на Windows...
        Есть идеи, как сделать так же красиво, но с Масдаем?

        Comment

        • AvaTTaR
          Member
          • Dec 2018
          • 96

          #5
          На вскидку что-то вроде такого можно попробовать:
          Code:
          where /R "C:\Windows" /T cm?.* > D:/temp/1.txt
          find /c /v "" <"D:/temp/1.txt"
          del D:/temp/1.txt

          Comment

          • anton.tkachenko
            Junior Member
            • Feb 2019
            • 4

            #6
            Так это же количество файлов по маске "cm?.*" в папке. Нужно-то количество фалов моложе 10 минут...

            Comment

            • AvaTTaR
              Member
              • Dec 2018
              • 96

              #7
              тьфу ты)) тяжёлое утро, решил отвлечься от работы и посидеть на форуме, а в итоге смешал вашу задачу с тем чем занимался))
              просто
              where /R "C:\Windows" /T cm?.* > D:/temp/1.txt
              а на агенте просто забираем содержимое и парсим оттуда время, ну или заменяем > на >> и обрабатываем данный файл просто как лог агентом.
              ещё конечно вариант средствами винды распарсить, но не люблю я виндовую консоль и for, так что тут уже сами решайте как удобнее вам реализовать, впринципе тоже ничего сложного не должно быть в реализации. алгоритм вроде:
              if [find /c /v "" <"D:/temp/1.txt"]>0 then for и тут построчно считываем, парсим время, сравниваем с sysdate, но думаю будет проще всё-таки агентом как лог читать и там регуляркой выдёргивать время, а сравнение уже на стороне заббикса проводить.

              Ещё вариант, если это реализуемо в вашем случае - просто по самбе расшарить эту папку, замаунтить на машине где стоит заббикс и спокойно пользоваться скриптом который я в перый раз скинул.
              Last edited by AvaTTaR; 14-02-2019, 17:21.

              Comment

              • anton.tkachenko
                Junior Member
                • Feb 2019
                • 4

                #8
                Originally posted by AvaTTaR
                не люблю я виндовую консоль и for
                Вот и я с ней связываться не хотел, и понадеялся, что я чего-то не знаю о dos-shell возможностях.

                Originally posted by AvaTTaR
                Ещё вариант, если это реализуемо в вашем случае - просто по самбе расшарить эту папку, замаунтить на машине где стоит заббикс и спокойно пользоваться скриптом который я в перый раз скинул.
                К сожалению - не вариан: возникает еще одна степень свободы, которую тоже надо мониторить и предпринимать действия, если отхрясла...


                Обратился к коллегам, обещали помочь с помощью PowerShell...

                Comment

                • Kos
                  Senior Member
                  Zabbix Certified SpecialistZabbix Certified Professional
                  • Aug 2015
                  • 3406

                  #9
                  просто забираем содержимое и парсим оттуда время
                  ...а я ведь не зря "универсальный способ - писать свой скрипт, запускаемый через UserParameter" поставил в последнюю очередь.
                  Поскольку распарсивать вывод команд where или dir (где надо смотреть не только время, но и дату, а формат вывода ещё и зависит от региональных настроек) - задача не такая тривиальная, как кажется на первый взгляд.
                  Тогда уж гораздо проще писать скрипт на каком-нибудь AutoIt-е (когда-то писал) или PowerShell-е (но я в нём несилён, к сожалению).

                  Вы, всё-таки, посмотрите ещё раз на предложенные мною первые два варианта.

                  Ещё можно посмотреть в эту тему - там задача немного другая, но подобная; можно попытаться использовать тот же подход и подкрутить опубликованный там батник для вашей задачи.

                  Comment

                  Working...