Ad Widget

Collapse

Autoregistration par FQDN

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • namoussi
    Junior Member
    • Oct 2020
    • 5

    #1

    Autoregistration par FQDN

    Bonjour,

    Je souhaite superviser l'ensemble des parc clients pour des raison technique on ne peux pas déployer des collecteurs chez le client je souhaite donc mettre en place une supervision par autoregistration, tout nous client ont des noms de domaine différents, j'ai donc essayer de faire une autoregistration par domaine, le serveur est installé chez nous et on a ouvert port quand je déploie le script j'ai cette erreur a chaque et je ne sais pas d'ou ca peut venir.

    Steps to reproduce:

    Server=10.10.1.111

    ServerActive=10.10.1.111
    1. HostnameItem=system.run[powershell -noprofile -noninteractive -command "& gcim win32_computersystem -Property dnshostname,domain | foreach \{ ($_.DNSHostname + '.' + $_.Domain).ToLower() }"]

    Result:


    2020/10/22 17:33:20.995363 starting manager
    2020/10/22 17:33:21.001366 [0] processing update request (1 requests)
    2020/10/22 17:33:21.001366 [0] registering new client
    2020/10/22 17:33:21.001366 [0] adding new request for key: 'system.run[powershell -noprofile -noninteractive -command "& gcim win32_computersystem -Property dnshostname,domain | foreach \{ ($_.DNSHostname + '.' + $_.Domain).ToLower() }"]
    2020/10/22 17:33:21.001366 [0] created direct exporter task for plugin 'SystemRun' itemid:0 key 'system.run[powershell -noprofile -noninteractive -command "& gcim win32_computersystem -Property dnshostname,domain | foreach \{ ($_.DNSHostname + '.' + $_.Domain).ToLower() }"]
    2020/10/22 17:33:21.001366 [0] created configurator task for plugin SystemRun
    2020/10/22 17:33:21.001366 plugin SystemRun: executing configurator task
    2020/10/22 17:33:21.002364 executing direct exporter task for key 'system.run[powershell -noprofile -noninteractive -command "& gcim win32_computersystem -Property dnshostname,domain | foreach \{ ($_.DNSHostname + '.' + $_.Domain).ToLower() }"]
    2020/10/22 17:33:21.002364 [SystemRun] Executing command:'powershell -noprofile -noninteractive -command "& gcim win32_computersystem -Property dnshostname,domain | foreach \{ ($_.DNSHostname + '.' + $_.Domain).ToLower() }"
    2020/10/22 17:33:21.260368 [SystemRun] commandowershell -noprofile -noninteractive -command "& gcim win32_computersystem -Property dnshostname,domain | foreach \{ ($_.DNSHostname + '.' + $_.Domain).ToLower() }"
    2020/10/22 17:33:21.260368 executed direct exporter task for key' SystemRun' itemid:0 key 'system.run[powershell -noprofile -noninteractive -command "& gcim win32_computersystem -Property dnshostname,domain | foreach \{ ($_.DNSHostname + '.' + $_.Domain).ToLower() }"]
    2020/10/22 17:33:21.760378 cannot process configuration: cannot get system hostname using "system.run[powershell -noprofile -noninteractive -command "& gcim win32_computersystem -Property dnshostname,domain | foreach \{ ($_.DNSHostname + '.' + $_.Domain).ToLower() }" configuration parameter: character ":" is not allowed in host name


  • jean-louis.abegg
    Member
    • Feb 2020
    • 37

    #2
    Bonjour namoussi,

    Pourrais-tu m'expliquer plus précisément ce que tu souhaites effectuer?

    Je suppose que par collecteur, tu entends des proxy? ou des agents?

    Combien de sites?

    Quel type de surveillance?

    Tu pourrais initier des découvertes par site, en mettant les machines ainsi détectées dans des groupes dédiés au client?

    Cordialement

    Comment

    • namoussi
      Junior Member
      • Oct 2020
      • 5

      #3
      Bonjour,
      On a environ une centaine de site client, chaque site il y a environ 5 serveur pour les plus modestes et pour les grands client on est sur de grandes infrastructure avec des dizaines de serveurs switch routeur et parefeu, pour des raison techniques on souhaiterais donc si possible avoir une supervision sur notre serveur sans l'installation ou le configuration tiers en dehors de l'agent. on souhaite donc avec l'agent que je vais déployer via GPO avoir autoregistration des serveur avec leurs nom complets afin de les regrouper par clients (chaque groupe => client), la surveillance que je souhaiterai effectué (CPU RAM ETAT DISQUE et le plus important pour nous la carte reseau)
      Click image for larger version

Name:	c41ea72a33a95cbcbb7cb7b1fb2b9228.png
Views:	230
Size:	37.4 KB
ID:	412187

      Comment

      • jean-louis.abegg
        Member
        • Feb 2020
        • 37

        #4
        Bonjour namoussi,

        Je comprends mieux, merci pour le schéma.
        Donc, tout cela passe par VPN, ce qui devrait générer un adressage ip particulier à chaque site.
        Tu as donc le choix entre faire de la découverte (en rentrant une plage réseau pour chacun des sites distant) des clients zabbix avec création automatique des machines découvertes, ou créer manuellement chaque machine et y associer le bon template. Il ne faut pas rejeter la création manuelle car fixer une découverte génère forcément du trafic réseau, ce qui coûte toujours sur un VPN. Personnellement, pour 5 serveurs distants, je ne m'embêterais pas sur la découverte...mais pour une dizaine...ça commence a valoir le coup. On peut aussi créer une exportation d'une machine bien configurée, pour ensuite créer un fichier d'import façon 'mailing'... c'est entre les 2...
        Un élément cléf sera de gérer le template associé à tes serveurs aux petits oignons: faire le tour de ce qui juste utile et désactiver/retirer tout ce qui n'a pas une utilité directe. Car si un template fait 100 mesures à la seconde (j'ai déjà vu ce genre de choses...) par machines, je vous laisse calculer ce que ca fait à la fin... Donc, limitation des besoins au strict nécessaire pour ne faire transiter que l'utile. Ensuite se pose la question du type de transaction...actif vs passif. Le fait que ton serveur zabbix demande l'information et ait une réponse est certes plus 'facile', mais en l’occurrence, je pousserait plutôt l'autre mode: le serveur zabbix communique une fois avec le client en lui donnant les mesures à effectuer, et c'est le client qui pousse régulièrement les données vers le serveur. C'est plus économe! Mais la difficulté est de bien surveiller l'état de l'arrivée des données pour détecter une rupture de lien.
        Le temps entre chaque découverte et la plage IP est aussi consommatrice, je pense que je n'ai pas besoin de l'expliquer.
        Zabbix gère très bien l'appartenance en multi-groupe, aussi je ne pense pas que le gros du problème soit de séparer l'appartenance de tel ou tel serveur.

        Cependant, au vu de la taille du projet, je pense que tu as deux choix:
        - expérimenter et découvrir par toi même => il faut du temps et de la patience.
        - acheter du service vers l'une des sociétés spécialisée => ça coûte mais tu gagnes du temps et tu as des garanties.

        Je reviens sur ton post initial: le service zabbix-agent2 ... tu as déployé ton serveur sur quoi? windows? ca y ressemble en tout cas... et c'était ton serveur ou un de tes clients? Et je vois de l'appel powershell...ta supervision... c'est de l'hyper-v?

        Cordialement

        Comment

        • namoussi
          Junior Member
          • Oct 2020
          • 5

          #5
          Bonjour,
          Merci de votre réponse, j'ai bien compris mais comme dis plutot le nombre de clients et le nombres de serveurs est bien trop élevé (c'est auto-registration qui m'a pousser a choisir Zabbix a centreon) car je ne peux malheureusement créer manuellement toutes les hotes (sachant que j'ai plusieurs hotes derriere une adresse ip publique par client), pour le template je configurerais au fil du temps, pour la supervistion je veux une supervision active.
          Le zabbix-agent2 a été déployé en local pour le teste sur un hyperV le serveur zabbix est héberger au sein de l'hyper V, je veux un serveur AD qui est dans l'hyperV. la commande est censé donner le nom complet de la machine avec le domain et cest par le domaine que je souhaite faire l'autoregistration

          Comment

          • jean-louis.abegg
            Member
            • Feb 2020
            • 37

            #6
            Bonjour,
            Oui, je comprends bien, je mettais juste en garde sur les volumétries et les incidences de tel ou tel choix stratégique de surveillance.
            Le fait d'utiliser les agents en actif limitera déjà la volumétrie.
            Tu peux aussi préciser une metadata dans la config de tes clients zabbix, mais là n'est pas, pour l'instant, le coeur du problème.
            Revenons donc sur ton premier post.
            L'erreur de ton agent zabbix, c'est bien sur l'un de tes clients de test?
            Je confirme qu'il n'est pas normal que le service s'arrête...
            Problème de droits (client zabbix, powershell...) ou problème de conf fournie au client.
            Avec conf de base, le service s'arrête t-il?
            A la chasse aux erreurs dans le log...
            2020/10/22 17:33:21.760378 cannot process configuration: cannot get system hostname using "system.run[powershell -noprofile -noninteractive -command "& gcim win32_computersystem -Property dnshostname,domain | foreach \{ ($_.DNSHostname + '.' + $_.Domain).ToLower() }" configuration parameter: character ":" is not allowed in host name
            Si je traduis, configuration parameter: character ":" is not allowed in host name => le nom d'hote retourné contiendrait le caractère ":" ce qui pose problème.
            As-tu fais tourner tes commandes powershell à la main? que retournent elles?

            Cordialement

            Comment

            • steve.destivelle
              Senior Member
              Zabbix Certified Trainer
              Zabbix Certified SpecialistZabbix Certified Professional
              • Feb 2017
              • 304

              #7
              Bonsoir Namoussi,

              pourquoi ne pas générer le nom du serveur via un script qui te génèrerai le contenu de ton fichier de configuration avec le nom FQDN ?
              C'est ce que j'ai pour un client qui souhaite une remontée avec le FQDN afin de pouvoir distinguer les machines sur les multiples domaines qu'ils ont.

              Steve
              "Estimez la taille de votre base de données Zabbix: http://tools.izi-it.io
              "Rejoignez le ZABBIX Discord francophone https://discordapp.com/invite/hvauXEQ"

              "izi-it.io / ZABBIX Certified Trainer / ZABBIX French Evangelist"

              Comment

              • namoussi
                Junior Member
                • Oct 2020
                • 5

                #8
                Bonjour,
                Merci pour les réponses, jean louis la config de base tourne c'est à partir du moment ou j'ajoute la ligne HostnameItem=system.run et ca me retourne cette erreur.
                Steve j'ai essayé de le faire par le script ci dessous, mais ca ne fonctionnait pas.


                HostnameItem=system.run[cscript /nologo c:\zabbix\zabbix_fqdn.vbs]

                zabbix_fqdn.vbs


                Code:
                ' Print FQDN in lower case letters
                ' Volker Fröhlich (2011)
                
                option explicit
                dim Message
                dim output
                dim WshShell, objEnv
                dim mydomain
                
                ' Read value from registry
                function readFromRegistry (strRegistryKey, strDefault )
                Dim WSHShell, value
                
                On Error Resume Next
                Set WSHShell = CreateObject("WScript.Shell")
                value = WSHShell.RegRead( strRegistryKey )
                
                if err.number <> 0 then
                readFromRegistry= strDefault
                else
                readFromRegistry=value
                end if
                
                set WSHShell = nothing
                end function
                
                mydomain = readfromRegistry("HKLM\SYSTEM\CurrentControlSet\se rvices\Tcpip\Parameters\Domain", "asdf")
                
                ' Get the WshShell object
                Set WshShell = CreateObject("WScript.Shell")
                
                ' Get collection by using the Environment property
                Set objEnv = WshShell.Environment("Process")
                
                
                Message = LCase(objEnv("COMPUTERNAME")) & "." & mydomain
                
                ' Write to stdout
                set output = wscript.stdout
                output.writeline Message

                Comment

                • jean-louis.abegg
                  Member
                  • Feb 2020
                  • 37

                  #9
                  Ok, c'est donc dans le fichier de conf du client que se situe le problème.
                  un recherche m'a fait remonter ce post, deja ancien...
                  https://www.zabbix.com/forum/zabbix-...toregistration => HostnameItem=system.run[hostname -f] does the trick.
                  C'était valable dans une vieille version...1.8.
                  Sinon, il y a une possibilité avec powershell plutot que le vbs... https://zabbix.org/wiki/Docs/howto/fqdn-windows

                  Certes, on cherche un peu a 'contourner' le problème plutôt que de l'attaquer en frontal et de trouver précisément ce qui bug dans la conf, mais bon, si ca peut nous conduire au résultat escompté...
                  Donc deux tests a faire... espérons que ce soit concluant sinon on va se plonger (avec délices?) dans du débuggage...

                  Cordialement

                  Comment

                  • namoussi
                    Junior Member
                    • Oct 2020
                    • 5

                    #10
                    le hostname -f c'est une command pour system linux, qui retourne bien le nom de la machine complet, le powershell me retourn la même erreur qu'au début

                    Comment

                    • jean-louis.abegg
                      Member
                      • Feb 2020
                      • 37

                      #11
                      Ah, c'est curieux...
                      directement en powershell,
                      [System.Net.Dns]::GetHostByName(($env:computerName)).Hostname.ToLo wer()
                      retourne bien le nom fqdn de l'hote.
                      une autre facon d'avoir le même résultat:
                      (Get-WmiObject win32_computersystem).DNSHostName+"."+(Get-WmiObject win32_computersystem).Domain
                      dans les 2 cas, la chaine retournée ne contient pas de ":"
                      Tu n'as pas de GPO bloquant l'exécution anonyme de PS ou VB ?
                      Est-ce dans la manière de transmettre la commande powershell? system.run[powershell -noprofile -noninteractive -command "..."]
                      Peux-tu faire un essai avec une commande bateau du genre echo truc.muche ... voir qui du passage de la commande ou de l'exécution nous joue ce mauvais tour...

                      Cordialement

                      Comment

                      Working...