Ad Widget

Collapse

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

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

    #31
    Накатал PowerShell скрипт для Hyper-V кластера, выкладываю для критики / предложений. Пока что жуткая альфа. Сильно не ругайтесь, я не настоящий сварщик.

    Если не указывать -ClusterName, то будет взят текущий (тот, в который входит сервер, на котором запущен скрипт)
    Параметр в -Object указывается только для взятия метрики конкретного ресурса (CSV-тома, сервиса, VM-ки)

    Подключить к Zabbix можно через UserParameters, в случае подключения в рамках использования отказоустойчивого агента, скрипт следует раскидать по нодам кластера.

    Скрипт отлаживался на Windows Server 2008R2 RUS. Некорректная работа при работе с русскими наименованиями ресурсов кластера вероятна. Кластер, конечно, не будет убит, просто скрипт может вываливаться с ошибками.

    Что умеет (в теории):
    1) Выдает JSON для LLD CSV / VM / Generic Services. JSON вроде корректный, но в автообнаружении не испытывал - не дошли руки.
    Code:
    > powershell -File clusterinfo.ps1 [-ClusterName "Мой первый кластер"] -Action Discovery -Class (VM | CSV | Service)
    2) Выдает для CSV:
    PercentFree - свободное пространство в % для заданного тома
    Code:
    > powershell -File clusterinfo.ps1 [-ClusterName "MyFirstCluster"] -Action Get -Class CSV -Object "Диск кластера 2" -Metric PercentFree
    SummaryPercentFree - свободное пространство в % для всех CSV томов в кластере
    SummarySize - общее дисковое пространство в байтах для всех CSV томов в кластере
    SummaryUsedSpace - использованное дисковое пространство в байтах для всех CSV томов в кластере
    CSVsTotal - количество CVS томов в кластере
    CSVsOnline - количество CVS томов в кластере, находящихся в состоянии Online

    Code:
     > powershell -File clusterinfo.ps1 [-ClusterName "Мой первый кластер"] -Action Get -Class CSV -Metric (SummaryPercentFree | SummarySize | SummaryUsedSpace | CSVsTotal | CSVsOnline)
    3) Для Generic Service:
    State - состояние заданного сервиса (OnlinePending / Online / OfflinePending / Offline ...)
    Code:
    > powershell -File clusterinfo.ps1 [-ClusterName "MyFirstCluster"] -Action Get -Class Service -Object "Zabbix Agent [MyFirstCluster]" -Metric State
    ServicesTotal - общее количество сервисов в кластере (на всех нодах)
    ServicesOnline - количество сервисов в состоянии Online
    ServicesOnlinePending - количество сервисов в состоянии OnlinePending ("Запускается")
    Code:
    > powershell -File clusterinfo.ps1 [-ClusterName "MyFirstCluster"] -Action Get -Class Service -Metric (ServicesTotal | ServicesOnline | ServicesOnlinePending)
    4) Для VM:
    State - состояние заданной виртуальной машины (OnlinePending / Online / OfflinePending / Offline ...)
    Code:
    > powershell -File clusterinfo.ps1 [-ClusterName "MyFirstCluster"] -Action Get -Class VM -Object "Виртуальная машина [Гагарин]" -Metric State
    VMsTotal - общее количество виртуальных машин в кластере (на всех нодах)
    VMsOnline - количество виртуальных машин в состоянии Online ("Работает")
    VMsOffline - количество виртуальных машин в состоянии Offline ("Выкл.")
    VMsOnlinePending - количество виртуальных машин в состоянии OnlinePending ("Запускается")
    VMsOfflinePending - количество виртуальных машин в состоянии OfflinePending ("Завершение работы")
    Code:
    > powershell -File clusterinfo.ps1 [-ClusterName "MyFirstCluster"] -Action Get -Class VM -Metric (VMsTotal | VMsOnline | VMsOffline | VMsOnlinePending | VMsOfflinePending)
    5) Для Memory:
    SummaryTotalPhysicalMemory - общее количество установленной физической памяти в кластере (на всех нодах)
    SummaryFreePhysicalMemory - количество свободной физической памяти в кластере
    SummaryPercentFreePhysicalMemory - % свободной физической памяти в кластере
    SummaryTotalVirtualMemory - общее количество виртуальной памяти в кластере
    SummaryFreeVirtualMemory - количество свободной виртуальной памяти в кластере
    Code:
    > powershell -File clusterinfo.ps1 [-ClusterName "MyFirstCluster"] -Action Get -Class Memory -Metric (SummaryTotalPhysicalMemory | SummaryFreePhysicalMemory | SummaryPercentFreePhysicalMemory | SummaryTotalVirtualMemory | SummaryFreeVirtualMemory)
    Attached Files

    Comment

    • sadman
      Senior Member
      • Dec 2010
      • 1611

      #32
      Наконец-то дошли руки до переделки скрипта дергающего значения метрик с кластера и его ресурсов.

      В связи с чем и прошу тестировать: https://github.com/zbx-sadman/WSFC. Темплейт c графиками и триггерами для Zabbix 2.4 в комплекте.

      Тестирую на WS2008R2 SP1, но скорее всего будет работать и на ветках 2012, 2016 - только больше метрик будет доступно, судя по MSDN.

      Что умеет:
      1) Делать LLD для Cluster, ClusterNode, ClusterSharedVolume, ClusterResourceGenericService, ClusterResourceVirtualMachine и др/;
      2) Находить через WMI ключевые параметры для ресурса VirtualMachine - например кол-во динамически выделенной памяти;
      3) Получать по объектам данные из области ClusterParameter (в MSDN всякого понаписано);
      4) Возвращать значения любых (надеюсь) метрик, доступных для найденных объектов;
      5) Складывать, считать количество - например кол-во выделенных vCPU на кластер или работающих ВМ на заданной ноде;
      6) Показывать метрики, доступные для найденных объектов;
      7) Наверное что-то ещё.

      Предупреждаю, что .NET CPU жрет, как сумасшедший - выключайте в шаблоне, что точно не пригодится. В ряде случаев нужно будет заменить аккаунт, под которым запускается кластеризованный Zabbix agent с "LocalSystem" на тот, что имеет право читать WMI с удаленных нод. Подробнее об этом и другом - в readme.md.

      Пробуйте, спрашивайте, предлагайте.

      Comment

      • narmo
        Junior Member
        • Nov 2016
        • 20

        #33
        Originally posted by sadman
        Наконец-то дошли руки до переделки скрипта дергающего значения метрик с кластера и его ресурсов.

        В связи с чем и прошу тестировать: https://github.com/zbx-sadman/WSFC. Темплейт c графиками и триггерами для Zabbix 2.4 в комплекте.

        Тестирую на WS2008R2 SP1, но скорее всего будет работать и на ветках 2012, 2016 - только больше метрик будет доступно, судя по MSDN.

        Что умеет:
        1) Делать LLD для Cluster, ClusterNode, ClusterSharedVolume, ClusterResourceGenericService, ClusterResourceVirtualMachine и др/;
        2) Находить через WMI ключевые параметры для ресурса VirtualMachine - например кол-во динамически выделенной памяти;
        3) Получать по объектам данные из области ClusterParameter (в MSDN всякого понаписано);
        4) Возвращать значения любых (надеюсь) метрик, доступных для найденных объектов;
        5) Складывать, считать количество - например кол-во выделенных vCPU на кластер или работающих ВМ на заданной ноде;
        6) Показывать метрики, доступные для найденных объектов;
        7) Наверное что-то ещё.

        Предупреждаю, что .NET CPU жрет, как сумасшедший - выключайте в шаблоне, что точно не пригодится. В ряде случаев нужно будет заменить аккаунт, под которым запускается кластеризованный Zabbix agent с "LocalSystem" на тот, что имеет право читать WMI с удаленных нод. Подробнее об этом и другом - в readme.md.

        Пробуйте, спрашивайте, предлагайте.
        Попробовал запустить у себя - в Правила обнаружения - "Unsupported item key"

        Comment

        • sadman
          Senior Member
          • Dec 2010
          • 1611

          #34
          Originally posted by narmo
          Попробовал запустить у себя - в Правила обнаружения - "unsupported item key"
          Я верно предполагаю, что всю остальную информацию предлагается угадать?

          Comment

          • narmo
            Junior Member
            • Nov 2016
            • 20

            #35
            Originally posted by sadman
            Я верно предполагаю, что всю остальную информацию предлагается угадать?
            Виноват, исправляюсь:
            Сделал всё по инструкции с гитхаба
            Zabbix 3.2.1.
            агент (активный) на Windows server 2008r2 на активной ноде в кластере из 3х хостов.
            Template WSFC: Cluster shared volumes - wsfc[Discovery,ClusterSharedVolume] выдаёт ошибку "Value should be a JSON object"
            Пробовал выполнить скрипт на виндовой машине - выполняется, возвращает 0
            Last edited by narmo; 01-11-2016, 11:58.

            Comment

            • sadman
              Senior Member
              • Dec 2010
              • 1611

              #36
              Originally posted by narmo
              Виноват, исправляюсь:
              агент (активный) на Windows server 2008r2 на активной ноде в кластере из 3х хостов.
              Template WSFC: Cluster shared volumes - wsfc[Discovery,ClusterSharedVolume] выдаёт ошибку "Value should be a JSON object"
              Пробовал выполнить скрипт на виндовой машине - выполняется, возвращает 0
              Вот ключевой способ проверки. Сначала он должен дать JSON. Возможно проблема в правах, там всё очень крепко на доменные аккаунты повязано.

              Code:
              zabbix_agentd.exe -c zabbix_agentd.conf -t wsfc[Discovery,ClusterSharedVolume]
              
              wsfc[Discovery,ClusterSharedVolume]           [t|{
               "data":[
                      { "{#ID}":"71ad77c5-a774-4e6a-b926-760b7fecd09e", "{#CLUSTER}":"Cluster-A", "{#NAME}":"Store001 on xxxxxxxxxx", "{#STATE}":"Online", "{#FRIENDLYVOLUMENAME}":"C:\\ClusterStorage\\ClusterA-Store001", "{#FILESYSTEM}": }
                  ]
              }]
              Еще парочка способов убедиться, что всё ок:

              Code:
              powershell  -ExecutionPolicy "RemoteSigned" -NoProfile -File wsfc.ps1 -Action "Discovery" -Object "ClusterNode" -defaultConsoleWidth -Verbose 
              ...
              powershell  -ExecutionPolicy "RemoteSigned" -NoProfile -File wsfc.ps1 -Action "Discovery" -Object "ClusterResourceVirtualMachine" -defaultConsoleWidth -Verbose

              Comment

              • narmo
                Junior Member
                • Nov 2016
                • 20

                #37
                zabbix_agentd.exe -c zabbix_agentd.conf -t wsfc[Discovery,ClusterSharedVolume] ---- как и у Вас в примере. отрабатывает без ошибок

                Строки из PS тоже без ошибок и выдают данные.
                Все Discovery отрабатывают нормально, ошибка только в обнаружении "Cluster shared volumes"
                Служба запускается от доменного админа.

                Куда ещё можно копать?

                Comment

                • sadman
                  Senior Member
                  • Dec 2010
                  • 1611

                  #38
                  Originally posted by narmo
                  Служба запускается от доменного админа.
                  Куда ещё можно копать?
                  Сделать с узла, где Zabbix Server:
                  Code:
                  zabbix_get -s <wsfc_agent_host> -k "wsfc[Discovery,ClusterSharedVolume]"
                  Теоретически должно вывалить ошибку или еще что-нибудь, что можно анализировать.

                  Есть, конечно, вариант, что строки JSON настолько длинные, что виндовая консоль их рвет пополам. Тогда нужно править Set-Variable -Option Constant -Name "CONSOLE_WIDTH" -Value 512

                  Comment

                  • narmo
                    Junior Member
                    • Nov 2016
                    • 20

                    #39
                    zabbix_get -s <wsfc_agent_host> -k "wsfc[Discovery,ClusterSharedVolume]"[/CODE] - не совсем понимаю как сделать с сервера.
                    Запустить из консоли ? или как то через фронэнд забикса?
                    Сервер забикса на centos 7 - если поможет

                    Set-Variable -Option Constant -Name "CONSOLE_WIDTH" -Value 512 - дописать в конфиг клиента?

                    Comment

                    • sadman
                      Senior Member
                      • Dec 2010
                      • 1611

                      #40
                      Originally posted by narmo
                      zabbix_get -s <wsfc_agent_host> -k "wsfc[Discovery,ClusterSharedVolume]"[/CODE] - не совсем понимаю как сделать с сервера.
                      Запустить из консоли ?
                      Из консоли, терминала, командной строки... как оно ещё называется...

                      Set-Variable -Option Constant -Name "CONSOLE_WIDTH" -Value 512 - дописать в конфиг клиента?
                      Найти строку в .ps1 и увеличить Value. Но это маловероятный случай.

                      Comment

                      • narmo
                        Junior Member
                        • Nov 2016
                        • 20

                        #41
                        Originally posted by sadman
                        Из консоли, терминала, командной строки... как оно ещё называется...
                        [root@zabbix share]# zabbix_get -s hyperv -k "wsfc[Discovery,ClusterSha redVolume]"
                        {
                        "data":[
                        { "{#ID}":"2b86e6ea-78b3-428b-a7dd-2c94b88996c9", "{#CLUSTER}":"hyperv", "{#NAME}":"Диск кластера 1", "{#STATE}":"Online", "{#FRIENDLYVOLUMENAME}":"C:\\ ClusterStorage\\Volume1", "{#FILESYSTEM}": },
                        { "{#ID}":"c812d0f4-4aa6-4882-b1d8-cf01ca637b90", "{#CLUSTER}":"hyperv", "{#NAME}":"Диск кластера 2", "{#STATE}":"Online", "{#FRIENDLYVOLUMENAME}":"C:\\ ClusterStorage\\Volume2", "{#FILESYSTEM}": },
                        { "{#ID}":"a10b29b1-5a22-4940-81d5-7ffd07c5c5d0", "{#CLUSTER}":"hyperv", "{#NAME}":"Диск кластера 3", "{#STATE}":"Online", "{#FRIENDLYVOLUMENAME}":"C:\\ ClusterStorage\\Volume3", "{#FILESYSTEM}": }
                        ]
                        }


                        Найти строку в .ps1 и увеличить Value. Но это маловероятный случай.
                        увеличил до 1500

                        Кстати, вин сервер русский стоит, может в этом дело?


                        Не помогло (

                        Comment

                        • narmo
                          Junior Member
                          • Nov 2016
                          • 20

                          #42
                          ещё заметил в правилах обнаружения
                          Code:
                          Template WSFC: Cluster network interfaces	Прототипы элементов данных 4	Прототипы триггеров 4	Прототипы графиков	Прототипы узлов сети	wsfc[Discovery,ClusterNetworkInterface]	10м	Zabbix агент	Активировано
                          ошибка:
                          Cannot create item: item with the same key "icmpping[]" already exists.
                          Cannot create item: item with the same key "icmppingloss[]" already exists.
                          Cannot create item: item with the same key "icmppingsec[]" already exists.

                          Comment

                          • sadman
                            Senior Member
                            • Dec 2010
                            • 1611

                            #43
                            Originally posted by narmo
                            {
                            "data":[
                            { "{#ID}":"2b86e6ea-78b3-428b-a7dd-2c94b88996c9", "{#CLUSTER}":"hyperv", "{#NAME}":"Диск кластера 1", "{#STATE}":"Online", "{#FRIENDLYVOLUMENAME}":"C:\\ ClusterStorage\\Volume1", "{#FILESYSTEM}": }

                            Не помогло (
                            А замените-ка в .ps1
                            Code:
                             'ClusterSharedVolume'           { $ObjectProperties = @("ID", "CLUSTER", "NAME", "STATE", "FRIENDLYVOLUMENAME", "FILESYSTEM"); }
                            На
                            Code:
                             'ClusterSharedVolume'           { $ObjectProperties = @("ID", "CLUSTER", "NAME", "STATE", "FRIENDLYVOLUMENAME"); }
                            Свойство FileSystem у CSV только в 2012-м сервере появилось, а для 2008-го с ним невалидный JSON получается.

                            И 1500 нет смысла ставить - сами же видите, какие строчки короткие.

                            Cannot create item: item with the same key "icmpping[]" already exists.
                            Cannot create item: item with the same key "icmppingloss[]" already exists.
                            Cannot create item: item with the same key "icmppingsec[]" already exists.
                            Последствия применения шаблона к узлу-кластеру, к которому уже подключен "Template ICMP Ping". Или его отлинкуйте или добавьте к ключам icmp*[] какие-нибудь параметры - интервал или размер пакета (https://www.zabbix.com/documentation.../simple_checks ), чтобы вновьсозданные ключи не дублировались с существующими.

                            Comment

                            • narmo
                              Junior Member
                              • Nov 2016
                              • 20

                              #44
                              Originally posted by sadman
                              А замените-ка в .ps1
                              Свойство FileSystem у CSV только в 2012-м сервере появилось, а для 2008-го с ним невалидный JSON получается.
                              Поменял - wsfc[Discovery,ClusterSharedVolume] не выдаёт ошибку.
                              Появилась ошибка в wsfc[Discovery,ClusterResourceVirtualMachine] - "Timeout while executing a shell script."

                              Update: выставил таймаут в конфиге на 30 - ошибка ушла.
                              Буду продолжать наблюдение до утра.

                              Ещё вопрос:"
                              На фронтэнде забикса в вкладке "мониторинг" выбираю "Последние данные", ставлю фильтр по "Узлы сети", вписываю свой хост, то инфы по "wsfc[Discovery,ClusterSharedVolume]" нет - это нормально?
                              Так же, подозреваю, от отсутствия ифны - не могу построить график по CSV?
                              Last edited by narmo; 01-11-2016, 15:53.

                              Comment

                              • sadman
                                Senior Member
                                • Dec 2010
                                • 1611

                                #45
                                Originally posted by narmo
                                Поменял - wsfc[Discovery,ClusterSharedVolume] не выдаёт ошибку.
                                А JSON валидировался?

                                Появилась ошибка в wsfc[Discovery,ClusterResourceVirtualMachine] - "Timeout while executing a shell script."
                                Если при powershell -ExecutionPolicy "RemoteSigned" -NoProfile -File wsfc.ps1 -Action "Discovery" -Object "ClusterResourceVirtualMachine" -defaultConsoleWidth -Verbose все ОК, то нужно докручивать таймаут в конфиге агента.

                                Comment

                                Working...