Ad Widget

Collapse

Мониторинг файлов в папке

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • aligarx
    Junior Member
    • Jun 2018
    • 1

    #1

    Мониторинг файлов в папке


    Есть задача: необходимо мониторить появление файлов в общей папке с определённым расширением на сервере, автоматическая загрузка из одной базы в другую. Папка не пустая, имеются другие файлы и папки. Необходимо оповещение если файл(ы) лежат в папке более 10 минут (брать время создания первого файла, если будут появляться новые файлы). Сброс триггера при удалении или перемещении файла.
    Пробовал настроить vfs.file.time на изменение папки, но принимаются изменения лежащих внутри папок и файлов.
    vfs.file.exists - не может мониторить по маске, только определенный файл

    Буду признателен за помощь, возможно есть другое решение?
  • kernbug
    Senior Member
    • Feb 2013
    • 330

    #2
    Originally posted by aligarx
    Есть задача: необходимо мониторить появление файлов в общей папке с определённым расширением на сервере, автоматическая загрузка из одной базы в другую. Папка не пустая, имеются другие файлы и папки. Необходимо оповещение если файл(ы) лежат в папке более 10 минут (брать время создания первого файла, если будут появляться новые файлы). Сброс триггера при удалении или перемещении файла.
    Пробовал настроить vfs.file.time на изменение папки, но принимаются изменения лежащих внутри папок и файлов.
    vfs.file.exists - не может мониторить по маске, только определенный файл

    Буду признателен за помощь, возможно есть другое решение?
    Здравствуйте,

    Как вариант, пример команды для поиска файлов старше 10 минут в локальной папке:

    Code:
    find . -maxdepth 1 -mmin +10 -type f -printf
    Добавить в конфигурацию Zabbix Agent:
    Code:
    user.parameter=vfs.file.10min,/path/find /path -maxdepth 1 -mmin +10 -type f -printf|wc -c
    Через веб-интерфейс создать элемент данных и соответствующий триггер: в папке файлов за 10 минут больше N.

    Comment

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

      #3
      Для какой оперционки Вам нужно?
      Для Unix/Linux это можно сделать командой find - наподобие того, что предложил коллега kernbug.
      Для Windows немного сложнее, я писал скрипт для подобной задачи (который работает с некоторыми ограничениями - в частности, если интересующих файлов не так много). "Костыль", конечно, но, может, кому-нибудь пригодится.

      Comment


      • aligarx
        aligarx commented
        Editing a comment
        Для виндовых серверов, файлов не так много - от 1 до 5 за 10 минут, но если обмен остановится - файлы будут накапливаться
    • Kos
      Senior Member
      Zabbix Certified SpecialistZabbix Certified Professional
      • Aug 2015
      • 3404

      #4
      О как, оказывается, не все новые "фичи" форума полезны! В частности, если тебе отвечают не новой репликой, а комментарием на прежнюю реплику, то этот комментарий запросто можно пропустить.

      Ладно, тогда публикую свой "костыль". В моём случае агент Zabbix "живёт" в папке C:\zabbix, и данный скрипт лежит там же.
      Ищёт файлы с расширением ".TXT", но легко поменять маску на ту, что нужна вам (в строке: "dir /b C:\WORK\%DIR%\%SUBDIR%\*.XML").

      Описание

      vmkofax.cmd

      Скрипт работает на машине VMKOFAX, предназначен для контроля содержимого директорий c:\work\{RBZTI|RBINVOICES}\{Duplicates|Rejected|Im port}. Имена директории и поддиректории передаются в качестве параметров, скрипт в качестве результата работы выводит список новых XML-файлов, появившихся в этой поддиректории с момента предыдущего просмотра. Сами списки файлов для сравнения сохраняются в папке C:\zabbix в файлах {RBZTI|RBINVOICES}.{Duplicates|Rejected|Import}.TX T. Вызывается через UserParameters.

      Если третьим параметром передаётся слово OLD, то выводится список файлов, которые есть сейчас И были в прошлый раз, но НЕ были в пред-предыдущий. Т.е. лежат там два последних просмотра подряд, но не раньше. Этот параметр используется для папки Import (чтобы выделить файлы, лежащие там дольше пяти минут).

      Сам скрипт:
      Code:
      [USER="4888"]echo[/USER] off
      rem Автор: Константин Ошмян
      rem Выдаём список XML-файлов для директории, которых не было в прошлый раз.
      rem Результаты последнего просмотра сохраняем в файле %DIR%.%SUBDIR%.TXT,
      rem предыдущего просмотра - %DIR%.%SUBDIR%.OLD.
      rem
      rem Если третьим параметром передавать "OLD", то выдаём список файлов,
      rem которые есть сейчас и были в прошлый раз, но не было перед этим.
      rem Результат пред-предыдущего просмотра - файл %DIR%.%SUBDIR%.OL1.
      rem
      rem Скрипт корректно работает только с файлами, имеющими непересекающиеся имена.
      rem Например, если один файл называется 1.XML, а другой - 01.XML,
      rem то могут быть некорректные срабатывания.
      
      set DIR=%1
      set SUBDIR=%2
      if .%SUBDIR% == . (
          echo Parameters needed: DirectoryName SubdirectoryName [OLD]
          exit
      )
      
      set OLDDIR=%CD%
      cd %0\..
      
      if .%3 == .OLD (
          if NOT EXIST %DIR%.%SUBDIR%.OLD echo.>%DIR%.%SUBDIR%.OLD
          if EXIST %DIR%.%SUBDIR%.OL1 del %DIR%.%SUBDIR%.OL1
          rename %DIR%.%SUBDIR%.OLD %DIR%.%SUBDIR%.OL1
      )
      
      if NOT EXIST %DIR%.%SUBDIR%.TXT echo.>%DIR%.%SUBDIR%.TXT
      if EXIST %DIR%.%SUBDIR%.OLD del %DIR%.%SUBDIR%.OLD
      rename %DIR%.%SUBDIR%.TXT %DIR%.%SUBDIR%.OLD
      
      dir /b C:\WORK\%DIR%\%SUBDIR%\*.XML >%DIR%.%SUBDIR%.TXT 2>nul
      FOR /F %%F IN (%DIR%.%SUBDIR%.TXT) do (
          if .%3 == .OLD (
              find "%%F" %DIR%.%SUBDIR%.OL1 >nul || find "%%F" < %DIR%.%SUBDIR%.OLD
          ) else (
              find "%%F" %DIR%.%SUBDIR%.OLD >nul || echo %%F
          )
      )
      
      if .%2 == .OLD (del %DIR%.%SUBDIR%.OL1) else del %DIR%.%SUBDIR%.OLD
      cd %OLDDIR%
      exit
      В файле zabbix_agentd.conf добавляется строка:
      Code:
      UserParameter=vmkofax[*],C:\zabbix\vmkofax.cmd $1 $2 $3
      Соответственно, элемент данных получается с типом "Text" и описанием: "New files in folder $1".

      Click image for larger version  Name:	Screenshot-20180626-01.PNG Views:	1 Size:	111.8 KB ID:	361149

      Триггеры же имеют условия вида: "item.strlen()>0 and item.nodata(30)=0", чтобы отсылать уведомление и сразу же закрываться:
      Click image for larger version  Name:	Screenshot-20180626-02.PNG Views:	1 Size:	176.7 KB ID:	361150
      Last edited by Kos; 26-06-2018, 08:49.

      Comment

      Working...