Ad Widget

Collapse

Zabbix - мониторинг кластера. Вопрос

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • sadman
    Senior Member
    • Dec 2010
    • 1611

    #61
    С одной стороны - вам повезло, так как я буквально вчера поставил 3.2 на предмет тестирования. С другой - не повезло, потому что проблем с импортом у меня нет:

    Code:
    Imported successfully
    Details
    Updated: Discovery rule "Cluster network interfaces" on "Template WSFC".
    Updated: Discovery rule "Cluster networks" on "Template WSFC".
    Updated: Discovery rule "Cluster nodes" on "Template WSFC".
    Updated: Discovery rule "Cluster resources: DHCP service" on "Template WSFC".
    ....
    Zabbix 3.2.3. © 2001–2016, Zabbix SIA

    Так что совета я, увы, никакого не дам.

    Comment

    • chipoza
      Junior Member
      • Jan 2017
      • 7

      #62
      Originally posted by sadman
      С одной стороны - вам повезло, так как я буквально вчера поставил 3.2 на предмет тестирования. С другой - не повезло, потому что проблем с импортом у меня нет:

      Code:
      Imported successfully
      Details
      Updated: Discovery rule "Cluster network interfaces" on "Template WSFC".
      Updated: Discovery rule "Cluster networks" on "Template WSFC".
      Updated: Discovery rule "Cluster nodes" on "Template WSFC".
      Updated: Discovery rule "Cluster resources: DHCP service" on "Template WSFC".
      ....
      Zabbix 3.2.3. © 2001–2016, Zabbix SIA

      Так что совета я, увы, никакого не дам.
      Извиняюсь) вопрос снят, криво скачал xml с гита. Всё нормально импортнулось

      Comment

      • Dziki_Jam
        Junior Member
        • Jan 2017
        • 6

        #63
        Хотел поинтересоваться, а почему именно Powershell? Как я посмотрел, скрипт использует wmi метрики и некоторые командлеты для WSFC. По идее, можно же брать напрямую из wmi, perfmon и eventlog и это не будет так грузить сервер как целый провайдер метрик на Powershell.
        Если что, я не критикую, просто интересно, почему именно такое решение было выбрано.

        Comment

        • sadman
          Senior Member
          • Dec 2010
          • 1611

          #64
          Originally posted by Dziki_Jam
          Хотел поинтересоваться, а почему именно Powershell?
          Как я посмотрел, скрипт использует wmi метрики и некоторые командлеты для WSFC. По идее, можно же брать напрямую из wmi, perfmon и eventlog.
          1. Для LLD нужно что-то скриптовое на стороне агента;
          2. Zabbix не умеет ничего делать с WMI, кроме как взять значение одного свойства. Никаких WMI query на основе результата WMI query, значения по инстансам не сложить, не посчитать, с массивами свойств та же беда;
          3. Perfmon - для людей, которым некуда девать время (попробуйте сделать единый темплейт для двух разноязычных или разноверсионных OS);
          4. Eventlog, если я не ошибаюсь, работает только для Zabbix Active Mode. Да и если уж 90% делается скриптом, то зачем зоопарк разводить;

          Однако, я согласен - PowerShell scripting наврядли можно считать отличным решением для задачи, которая подразумевает постоянные и частые вызовы интерпретатора. Способа изобразить на Powershell TCP-сервер я не нашел, на сишарпах писать не обучен, другие языки... Наврядли какой-то админ, не находящийся в состоянии аффекта, запустит с административными правами скомпилированный исполняемый файл из интернетов в своем кластере.

          Но, если видите более легковесные варианты - предлагайте.

          Comment

          • DNKolian
            Junior Member
            • Nov 2013
            • 29

            #65
            Originally posted by pzabortsev
            Пока самое полезное - это конечно же мониторинг CSV.
            У меня работает такой скрипт:
            Code:
            param(
                [Parameter(Mandatory=$False)]
                [string]$QueryName,
                [string]$FSName
            )
            
            if ($QueryName -eq '') {
               
                $colItems = gwmi win32_volume | select Name,FileSystem
            
                write-host "{"
                write-host " `"data`":["
            
                foreach ($objItem in $colItems) {
                    if ($objItem.FileSystem -eq 'CSVFS') {
                        $objItem.Name = $objItem.Name -replace "\\","/"
                        $line = " { `"{#FSNAME}`":`"" + $objItem.Name + "`", `"{#FSTYPE}`":`"" + $objItem.FileSystem + "`" },"
                        write-host $line
                    }
                }
            
                write-host " ]"
                write-host "}"
            }
            
            else {
                $FSName = $FSName -replace "/","\\"
                
                switch ($QueryName) {
                    ('Capacity')  { $Results = gwmi win32_volume -Filter "name = '$FSName'" | select Capacity | Format-Table -HideTableHeaders -AutoSize }
                    ('FreeSpace') { $Results = gwmi win32_volume -Filter "name = '$FSName'" | select FreeSpace | Format-Table -HideTableHeaders -AutoSize }
                    default       { $Results = "Incorrect Command: '" + $QueryName + "'" }
                    }
                $Results = $Results | Out-String
                $Results = $Results.trim()
                Write-Host $Results
            
            }
            Ну и пара параметров настроена:
            Code:
            UserParameter=CSVFS.discover,powershell.exe -file "C:\Program Files\Zabbix Agent\scripts\CSVFS_Status.ps1"              
            UserParameter=CSVFS.check[*],powershell.exe -file "C:\Program Files\Zabbix Agent\scripts\CSVFS_Status.ps1" $1 $2
            Параметр CSVFS.discover используется для дискаверинга CSV.
            В прототипы берутся два параметра:
            Code:
            CSVFS.check["Capacity", "{#FSNAME}"]
            CSVFS.check["FreeSpace", "{#FSNAME}"]
            Остальное (pfree, pused, used) - вычисляемые параметры считает zabbix server по этим двум.
            У меня не работает пишет Value should be a JSON object.
            Zabbix 3.2.7
            Подскажите пожалуйста как решить?

            Comment

            • pzabortsev
              Senior Member
              • Dec 2012
              • 338

              #66
              Немного исправил скрипт:
              Code:
              param(
                  [Parameter(Mandatory=$False)]
                  [string]$QueryName,
                  [string]$FSName
              )
              
              if ($QueryName -eq '') {
                 
                  $colItems = gwmi win32_volume | select Name,FileSystem
                  $flag = 1;
              
                  write-host "{"
                  write-host " `"data`":["
              
                  foreach ($objItem in $colItems) {
                      if ($objItem.FileSystem -eq 'CSVFS') {
                          $objItem.Name = $objItem.Name -replace "\\","/"
                          $mm = $objItem.Name.Split("/")
                          $VolumeName = $mm[$mm.Length - 1]
                          if ($VolumeName -eq '') {
                              $VolumeName = $mm[$mm.Length - 2]
                          }
                          if ($flag -eq 0) { write-host "," }
                          $flag = 0;
                          
                          $line = " { `"{#FSNAME}`":`"" + $objItem.Name + "`", `"{#FSTYPE}`":`"" + $objItem.FileSystem + "`", `"{#VOLNAME}`":`"" + $VolumeName + "`" }"
                          write-host -NoNewline $line
                      }
                  }
              
                  write-host " ]"
                  write-host "}"
              }
              
              else {
                  $FSName = $FSName -replace "/","\\"
                  
                  switch ($QueryName) {
                      ('Capacity')  { $Results = gwmi win32_volume -Filter "name = '$FSName'" | select Capacity | Format-Table -HideTableHeaders -AutoSize }
                      ('FreeSpace') { $Results = gwmi win32_volume -Filter "name = '$FSName'" | select FreeSpace | Format-Table -HideTableHeaders -AutoSize }
                      default       { $Results = "Incorrect Command: '" + $QueryName + "'" }
                      }
                  $Results = $Results | Out-String
                  $Results = $Results.trim()
                  Write-Host $Results
              
              }
              Видимо я делал его для версии 2.2, когда еще zabbix не сильно придирался к запятым )))

              Спасибо, что обратили внимание

              Comment

              • DNKolian
                Junior Member
                • Nov 2013
                • 29

                #67
                Подскажите пожалуйста как получить значение свободного места в процентах.
                Или триггер можно сделать?
                Спасибо..

                Comment

                • pzabortsev
                  Senior Member
                  • Dec 2012
                  • 338

                  #68
                  Originally posted by DNKolian
                  Подскажите пожалуйста как получить значение свободного места в процентах...
                  Очевидно по формуле
                  У меня в шаблоне например сделано так:
                  Code:
                  100*last("CSVFS.check[\"FreeSpace\", \"{#FSNAME}\"]") / last("CSVFS.check[\"Capacity\", \"{#FSNAME}\"]")
                  Вы шаблон-то скачали?

                  Comment

                  • DNKolian
                    Junior Member
                    • Nov 2013
                    • 29

                    #69
                    {Template:CSVFS.check["FreeSpace", "{#FSNAME}"].last(0)}/{Template:CSVFS.check["Capacity", "{#FSNAME}"].last(0)}<0.10
                    Спасибо сделал так же.

                    Comment

                    • Mega-Demon
                      Junior Member
                      • Oct 2019
                      • 22

                      #70
                      Дд, не много поздний офтоп и не в тему, как передать {#FSNAME} в письме?! Новым item?

                      Comment

                      • sadman
                        Senior Member
                        • Dec 2010
                        • 1611

                        #71
                        Небольшое движение в сторону использования препроцессора Zabbix: скрипт для вытягивания данных из Windows Server Failover Cluster теперь умеет отдавать метрики по объекту/ключу скопом, в JSON-е. Тестирование не окончено, но вы можете принять участие. Скрипт и шаблон с новым функционалом на GitHub: https://github.com/zbx-sadman/WSFC/tree/master/dev

                        Например, обратите внимание, как двигаемся вглубь по метрикам объекта Shared Volume (см. на выделенный жирным фрагмент ключа со звёздочкой).

                        С подобным ключом можно сделать "рутовый" элемент данных для любого (почти ) объекта и разбирать его JSON в зависимые элементы с помощью препроцессора. Это несколько ускорит сбор метрик и снизит нагрузку на процессор ноды кластера, несущей Zabbix-agent-а.

                        Code:
                        [SIZE=12px]$ zabbix_get -s xxx.xxx.xxx.xxx -p 16092 -k "wsfc[Discovery,ClusterSharedVolume]"
                        {
                         "data":[
                                { "{#ID}":"71ad77c5-a774-4e6a-b926-760b7fecd09e", "{#CLUSTER}":"Cluster-A", "{#NAME}":"Store001 on xxxxx.xxxxxx.local", "{#STATE}":"Online", "{#FRIENDLYVOLUMENAME}":"C:\\ClusterStorage\\ClusterA-Store001", "{#FILESYSTEM}":"NTFS" }
                            ]
                        }
                        
                        $ zabbix_get -s xxx.xxx.xxx.xxx -p 16092 -k "wsfc[Get,ClusterSharedVolume,[B]*[/B],71ad77c5-a774-4e6a-b926-760b7fecd09e]"
                        { "Cluster":"Cluster-A",
                            "FriendlyVolumeName":"C:\\ClusterStorage\\ClusterA-Store001",
                            "FileSystem":"NTFS",
                            "Name":"Store001 on xxxxx.xxxxxx.local",
                            "State":"Online",
                            "OwnerNode":"clusternode-02",
                            "SharedVolumeInfo":"System.Collections.ObjectModel.Collection`1[Microsoft.FailoverClusters.PowerShell.ClusterSharedVolumeInfo]",
                            "Id":"71ad77c5-a774-4e6a-b926-760b7fecd09e"
                        }
                        
                        $ zabbix_get -s xxx.xxx.xxx.xxx -p 16092 -k "wsfc[Get,ClusterSharedVolume,[B]SharedVolumeInfo.*[/B],71ad77c5-a774-4e6a-b926-760b7fecd09e]"
                        { "FaultState":"NoFaults",
                            "FriendlyVolumeName":"C:\\ClusterStorage\\ClusterA-Store001",
                            "Partition":"Microsoft.FailoverClusters.PowerShell.ClusterDiskPartitionInfo",
                            "PartitionNumber":"2",
                            "VolumeOffset":"135266304",
                            "MaintenanceMode":false,
                            "RedirectedAccess":false
                        }
                        
                        $ zabbix_get -s xxx.xxx.xxx.xxx -p 16092 -k "wsfc[Get,ClusterSharedVolume,[B]SharedVolumeInfo.Partition.*[/B],71ad77c5-a774-4e6a-b926-760b7fecd09e]"
                        { "Name":"\\\\?\\Volume{8ccc2789-bfae-42d0-972d-d2ee01717a36}",
                            "DriveLetterMask":"0",
                            "FileSystem":"NTFS",
                            "FreeSpace":"381033381888",
                            "MountPoints":"System.Collections.ObjectModel.ReadOnlyCollection`1[System.String]",
                            "PartitionNumber":"2",
                            "PercentFree":"43.81741",
                            "Size":"869593509888",
                            "UsedSpace":"488560128000",
                            "HasDriveLetter":false,
                            "IsCompressed":false,
                            "IsDirty":"Unknown",
                            "IsFormatted":true,
                            "IsNtfs":true,
                            "IsPartitionNumberValid":true,
                            "IsPartitionSizeValid":true
                        }[/SIZE]

                        Comment

                        • Infestor
                          Junior Member
                          • Feb 2020
                          • 8

                          #72
                          Подскажите, сталкивался ли кто-нибудь с проблемой задержки получения данных? На заббиксе в Latest data (last check) иногда более 1-2 часов. В какую сторону смотреть? Игрался с таймаутами на агентах кластера, но безуспешно.

                          Comment

                          Working...