Ad Widget

Collapse

Мониторинг размера файлов по маске.

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • RK3DNP1
    Junior Member
    • Aug 2016
    • 29

    #1

    Мониторинг размера файлов по маске.

    Добрый день, задача мониторить размеры баз exchange, для этого надо на каждом сервере искать по следующему пути: C:\_Disks
    файлы по маске *.edb
    Причем в папке C:\_Disks имеются вложенные папки, где лежат эти как раз базы.

    Сейчас создал элемент для одной базы и это работает vfs.file.size[C:\_Disks\DB1\dbcorp01\dbcorp01.edb]
    но вот имена баз разные и вложения папок.
    Можно ли это реализовать?
  • yukra
    Senior Member
    • Apr 2013
    • 1359

    #2
    Originally posted by rk3dnp1
    Добрый день, задача мониторить размеры баз exchange, для этого надо на каждом сервере искать по следующему пути: C:\_disks
    файлы по маске *.edb
    Причем в папке c:\_disks имеются вложенные папки, где лежат эти как раз базы.

    Сейчас создал элемент для одной базы и это работает vfs.file.size[c:\_disks\db1\dbcorp01\dbcorp01.edb]
    но вот имена баз разные и вложения папок.
    Можно ли это реализовать?
    Смотрите в сторону lld, но придется на повершеле (или на чем у вас там принято) писать

    Comment

    • RK3DNP1
      Junior Member
      • Aug 2016
      • 29

      #3
      Originally posted by yukra
      Смотрите в сторону lld, но придется на повершеле (или на чем у вас там принято) писать
      Жаль, что заббикс не позволяет это стандартными средствами решать. Как минимум же диски умеет искать...

      Comment

      • yukra
        Senior Member
        • Apr 2013
        • 1359

        #4
        Originally posted by rk3dnp1
        Жаль, что заббикс не позволяет это стандартными средствами решать. Как минимум же диски умеет искать...
        Диски не умеет, умеет смонтированные файловые системы и сетевые адаптеры.

        Comment

        • RK3DNP1
          Junior Member
          • Aug 2016
          • 29

          #5
          Нашел вот тут неплохой пример по lld https://habrahabr.ru/post/194980/
          У них скрипт
          HTML Code:
          $items = Get-WmiObject Win32_PerfRawData_PerfDisk_PhysicalDisk | select name  |where-object {$_.name -ne '_Total'}
          
          write-host "{"
          write-host " `"data`":["
          write-host
          
          foreach ($objItem in $Items) {
           $line =  " { `"{#DISKNUM}`":`"" + $objItem.Name + "`"},"
           write-host $line
          }
          
          write-host
          write-host " ]"
          write-host "}"
          write-host
          У меня же в powershell уже был скрипт поиска файла и вывода:
          $puth = "c:\_Disks"
          $a2=Get-ChildItem $puth -Recurse -Include $exclude |foreach-object { echo $($_.Name, [math]::round($_.length/1GB))}|fl name, length
          Который отрабатывает:
          dbcorp01.edb
          88
          dbspec01.edb
          147
          dbcorp02.edb
          100

          Вроде как раз для json, но подставляют данные свои, ничего не выводит.

          HTML Code:
          $puth = "c:\_Disks"
          $Items=Get-ChildItem $puth -Recurse -Include $exclude |foreach-object { echo $($_.Name, [math]::round($_.length/1GB))}|fl name, length 
          
          write-host "{"
          write-host " `"data`":["
          write-host
          
          foreach ($objItem in $Items) {
           $line =  " { `"{#DISKNUM}`":`"" + $objItem.Name + "`"},"
           write-host $line
          }
          Last edited by RK3DNP1; 24-08-2016, 16:21.

          Comment

          • yukra
            Senior Member
            • Apr 2013
            • 1359

            #6
            Originally posted by RK3DNP1
            Нашел вот тут неплохой пример по lld https://habrahabr.ru/post/194980/
            У них скрипт
            HTML Code:
            $items = Get-WmiObject Win32_PerfRawData_PerfDisk_PhysicalDisk | select name  |where-object {$_.name -ne '_Total'}
            
            write-host "{"
            write-host " `"data`":["
            write-host
            
            foreach ($objItem in $Items) {
             $line =  " { `"{#DISKNUM}`":`"" + $objItem.Name + "`"},"
             write-host $line
            }
            
            write-host
            write-host " ]"
            write-host "}"
            write-host
            У меня же в powershell уже был скрипт поиска файла и вывода:
            $puth = "c:\_Disks"
            $a2=Get-ChildItem $puth -Recurse -Include $exclude |foreach-object { echo $($_.Name, [math]::round($_.length/1GB))}|fl name, length
            Который отрабатывает:
            dbcorp01.edb
            88
            dbspec01.edb
            147
            dbcorp02.edb
            100

            Вроде как раз для json, но подставляют данные свои, ничего не выводит.

            HTML Code:
            $puth = "c:\_Disks"
            $Items=Get-ChildItem $puth -Recurse -Include $exclude |foreach-object { echo $($_.Name, [math]::round($_.length/1GB))}|fl name, length 
            
            write-host "{"
            write-host " `"data`":["
            write-host
            
            foreach ($objItem in $Items) {
             $line =  " { `"{#DISKNUM}`":`"" + $objItem.Name + "`"},"
             write-host $line
            }
            1) На сколько я понимаю вы не закрыли массив в json и вместо вывода полного пути зачем то выводите только имя файла.
            Code:
            $puth = "C:\Users\user\Downloads"
            $items = Get-ChildItem $puth -Recurse | Where {$_.extension -eq ".txt"}
            write-host "{"
            write-host " `"data`":["
            write-host
            
            foreach ($objItem in $Items) {
             $line =  " { `"{#Filename}`":`"" + $objItem.FullName + "`"},"
             write-host $line
            }
            
            write-host
            write-host " ]"
            write-host "}"
            2) Не понимаю зачем вообще писать "свой генератор JSON". Эта задача давно решена уже на всех языках программирования
            Code:
            $puth = "C:\Users\user\Downloads"
            $items = Get-ChildItem $puth -Recurse | Where {$_.extension -eq ".txt"}
            $hash = @{"data" = $items}
            ConvertTo-Json $hash
            Единственное что меня смущает: то, что пути на выходе пишутся через '\\', не знаю как виндовый агент к такому отнесется

            Comment

            • sadman
              Senior Member
              • Dec 2010
              • 1611

              #7
              2) Не понимаю зачем вообще писать "свой генератор JSON". Эта задача давно решена уже на всех языках программирования
              Code:
              $puth = "C:\Users\user\Downloads"
              $items = Get-ChildItem $puth -Recurse | Where {$_.extension -eq ".txt"}
              $hash = @{"data" = $items}
              ConvertTo-Json $hash
              Справедливости ради нужно отметить, что ConvertTo-Json появился начиная с PoSHv3. Стоковый PoSH в Windows Server 2008 R2 и Windows 7 - версии 2.0.

              Проще писануть "свой генератор JSON", чем накатывать на эти системы PoSHv3.

              Comment

              • RK3DNP1
                Junior Member
                • Aug 2016
                • 29

                #8
                Originally posted by sadman
                Справедливости ради нужно отметить, что convertto-json появился начиная с poshv3. Стоковый posh в windows server 2008 r2 и windows 7 - версии 2.0.

                Проще писануть "свой генератор json", чем накатывать на эти системы poshv3.
                Спасибо, уже выходит, что нужно
                Теперь по настройке в заббиксе, обязательно делать правило обнаружение или достаточно указать скрипт в элементах (в элементах указал, но данные не выдает) ?
                Если делать в обнаружении, то ключ какой указывать, ведь этот скрипт надо будет писать в прототипе элементов данных?

                Comment

                • sadman
                  Senior Member
                  • Dec 2010
                  • 1611

                  #9
                  Originally posted by RK3DNP1
                  Если делать в обнаружении, то ключ какой указывать, ведь этот скрипт надо будет писать в прототипе элементов данных?
                  Code:
                  UserParameter=myDiscoveryKey[*], powershell -File "C:\zabbix\scripts\myDiscovery.ps1"
                  Можете мой скрипт для usbhasp глянуть, найдете и как в темплейте подключать и как отдавать агентом posh-stdout: https://github.com/zbx-sadman/HASP

                  Comment

                  • RK3DNP1
                    Junior Member
                    • Aug 2016
                    • 29

                    #10
                    Что-то все равно не выходит:
                    1.
                    HTML Code:
                    zabbix_get -s 127.0.0.1 -k file.discovery
                    {
                    "data":[
                    { "{#FILENAME}":"logon-in_tmp.vbs"},
                    ]
                    }
                    Что показывает, что в агенте данные получают.
                    2.
                    Список обнаружения:
                    ключ file.discovery
                    фильтр {#FILENAME} = тут пусто (что надо писать?)

                    3.
                    Прототип элемента:
                    ключ vfs.file.size[{#FILENAME}]
                    тип текст

                    4. Захожу в последние данные, выбираю сервер свой, по этому шаблону с файлом, значений нет, даже нет имени, другие шаблоны выводят данные с этого сервера, в том числе свободное место на дисках, сделано так же через обнаружение.

                    Comment

                    • sadman
                      Senior Member
                      • Dec 2010
                      • 1611

                      #11
                      Originally posted by RK3DNP1
                      Что-то все равно не выходит:
                      1. Запятой в последней строке лучше всего избегать, некоторые валидаторы могут не пропустить такой JSON;

                      2. Ничего не нужно писать, если не требуется фильтрация элементов JSON;

                      3. zabbix_get -s 127.0.0.1 -k "vfs.file.size[logon-in_tmp.vbs]" -> ?

                      4. Перед визитом Latest Data необходимо дождаться создания элементов данных из прототипов. Возможно, что JSON не валидируется. Это видно в Discovery rules хоста - кресты в красных квадратах стоят около правил. Если на них навести курсор, будет видна причина ошибки.

                      Comment

                      • RK3DNP1
                        Junior Member
                        • Aug 2016
                        • 29

                        #12
                        Originally posted by sadman
                        1. Запятой в последней строке лучше всего избегать, некоторые валидаторы могут не пропустить такой JSON;

                        2. Ничего не нужно писать, если не требуется фильтрация элементов JSON;

                        3. zabbix_get -s 127.0.0.1 -k "vfs.file.size[logon-in_tmp.vbs]" -> ?

                        4. Перед визитом Latest Data необходимо дождаться создания элементов данных из прототипов. Возможно, что JSON не валидируется. Это видно в Discovery rules хоста - кресты в красных квадратах стоят около правил. Если на них навести курсор, будет видна причина ошибки.
                        3. Это имели ввиду?
                        C:\Program Files\Zabbix\bin\win64>zabbix_get -s 127.0.0.1 -k "vfs.file.size[logon-in_tmp.vbs]"
                        ZBX_NOTSUPPORTED: Cannot obtain file information: [2] No such file or directory

                        4. Пишет, значение должно быть json объект, убрал запятую стало нормально, появилось в последних данных, но значение не выводит, видимо надо полный путь к файлу
                        logon-in_tmp.vbs
                        vfs.file.size[logon-in_tmp.vbs]
                        Last edited by RK3DNP1; 26-08-2016, 11:33.

                        Comment

                        • sadman
                          Senior Member
                          • Dec 2010
                          • 1611

                          #13
                          Originally posted by RK3DNP1
                          ZBX_NOTSUPPORTED: Cannot obtain file information: [2] No such file or directory
                          Необходимо добиться, чтобы при вызове zabbix_get с ключом, который вы считаете правильным, выводились циферки, а не сообщения об ошибках.

                          Подумайте, как просигнализировать Zabbix-у о том, что файла нет. Или об иных ошибках получения размера.

                          Кстати, учтите, что PoSH выводимые строки форматирует по ширине консоли, в которую форкается его вызов, и слишком длинные пути файлов приведут к получению невалидного JSON.

                          Comment

                          • RK3DNP1
                            Junior Member
                            • Aug 2016
                            • 29

                            #14
                            В целом все удалось сделать, только вот если делать через
                            $exclude = @(‘db*.edb’)
                            $items = Get-ChildItem $puth -Recurse -Include $exclude | Select-Object -Property Name
                            $hash = @{"data" = $items}
                            ConvertTo-Json $hash
                            выводит:
                            Code:
                            {
                                "data":  [
                                             {
                                                 "Name":  "dbcorp01.edb"
                                             },
                                             {
                                                 "Name":  "dbspec01.edb"
                                             },
                                             {
                                                 "Name":  "dbcorp02.edb"
                                             }
                                         ]
                            }
                            и этот варинт не хочет отображать данные, а через WRITE-HOST отрабатывает (разное кол-во скобок), получается автоматически не верно формирует
                            {
                            "data":[
                            { "{#FILENAME}":"logon-in_tmp.vbs"}
                            ]
                            }
                            а ведь надо не Name, а #Name, иначе макрос не сохраняется. Это можно как-то изменить?
                            Last edited by RK3DNP1; 26-08-2016, 13:39.

                            Comment

                            • sadman
                              Senior Member
                              • Dec 2010
                              • 1611

                              #15
                              Originally posted by RK3DNP1
                              а ведь надо не Name, а #Name, иначе макрос не сохраняется. Это можно как-то изменить?
                              Передали в ConvertTo-Json объект с Property Name - он и сгенерил с "Name", зачем его винить?

                              Что делать? Я не пользуюсь ConvertTo-Json, например, самописной функцией делаю JSON для LLD. Пока поймешь, как у этого PoSH-а шестеренки крутятся - успеешь трижды своё написать.

                              Comment

                              Working...