DéveloppeurWeb.Com
    DéveloppeurWeb.Com
    • Agile Zone
    • AI Zone
    • Cloud Zone
    • Database Zone
    • DevOps Zone
    • Integration Zone
    • Web Dev Zone
    DéveloppeurWeb.Com
    Home»Uncategorized»De jolies données dans des rangées soignées
    Uncategorized

    De jolies données dans des rangées soignées

    mars 14, 2023
    De jolies données dans des rangées soignées
    Share
    Facebook Twitter Pinterest Reddit WhatsApp Email

    DBA Mary extraordinaire,
    Qu’est-ce qui fait grandir vos tables ?
    Lorsque les requêtes se propulsent dans mon shell TSQL
    les données sont ingérées en petites rangées soignées.

    Ce sera probablement le dernier article de ma série sur la surveillance du serveur DNS pihole. Vous pouvez trouver la partie 1, « Votre Pi-Hole est une riche source de données », ici et la partie 2, « Mind the Gap », ici. Si vous avez lu, il devrait être clair qu’il ne s’agit pas tant du pi-hole en particulier que de la manière dont New Relic vous permet de manipuler les données d’observabilité. La vérité est que le pi-hole m’a fourni un certain nombre d’excellents exemples des différentes façons dont les données peuvent se présenter à partir de divers systèmes.

    Cela dit, dans cet article, je vais aborder une situation qui se produit souvent avec la sortie JSON — des données qui doivent être enregistrées sous forme de lignes séquentielles sous un seul champ mais qui finissent par être réparties sur plusieurs champs.

    Je vais continuer à tirer parti du pi-trou pour cet exemple. Dans le post précédent, toute notre attention était concentrée sur la sortie d’un point de terminaison d’API unique : ?summaryRaw. Mais, le pi-hole a de nombreux autres points de terminaison qui émettent des données, notamment :

    • topItems=xx — affiche les xx meilleurs domaines et les meilleurs annonceurs demandés.
    • topClients=xx— affiche les principales sources de requêtes DNS au sein de votre réseau.
      • getForwardDestinations – Affiche les serveurs DNS externes où vont les requêtes DNS une fois qu’elles sortent de votre réseau.
    • getQueryTypes — Afficher le volume de chaque type de requête DNS (A, AAAA, PTR, SRV, etc.).

    (Vous pouvez en savoir plus sur tous les points de terminaison API possibles dans cet article.).

    Considérons donc une intégration Flex configurée pour rassembler certaines des informations que j’ai identifiées ci-dessus :

    integrations:
      - name: nri-flex
        config:
          name: badpihole
          apis:
            - name: badpihole_querytypes
              url: http://pi.hole/admin/api.php?getQueryTypes&auth=abcdefg1234567890 #your auth key goes here
              headers:
                accept: application/json

    (Notez que j’ai volontairement nommé les éléments « mauvais » pour que vous puissiez les trouver car, finalement, je ne pense pas qu’ils aient de la valeur dans le format actuel)

    Lorsque vous le regardez dans NRQL, vous verrez un résultat comme celui-ci :
    Résultat NRQL

    Le problème devient encore pire lorsque les résultats sont très variables. Par exemple, topItems renverra les meilleurs domaines et annonceurs pour une période donnée. Bien que cela POURRAIT rester quelque peu cohérent, dans des réseaux plus grands ou plus dynamiques, cette liste peut changer radicalement.

    Donc, avec l’élément YAML de :

            - name: badpihole_topitems
              url: http://pi.hole/admin/api.php?topItems=10&auth=abcdefg1234567890 #your auth key goes here
              headers:
                accept: application/json
    

    Vous pouvez voir le nombre de colonnes augmenter d’un instant à l’autre :
    Nombre de colonnes

    Ce qu’il faut, c’est transformer les données entrantes de sorte qu’au lieu d’apparaître comme ceci :

    "top_ads.unity3d.com": 54,
    "top_ads.display.ravm.tv": 90,
    "top_ads.hbopenbid.pubmatic.com": 49,

    Au lieu de cela, il est réorganisé dans un format plus semblable à celui-ci :

    Name: "top_ads.display.ravm.tv",
    Count: 90,
    Name: "top_ads.display.ravm.tv"
    Count: 90,
    Name: "top_ads.hbopenbid.pubmatic.com"
    Count: 49,

    Le résultat ressemble à ceci lorsqu’il est affiché dans New Relic :
    Résultat affiché dans New Relic

    Puissance cosmique phénoménale, Itty Bitty Command

    Comment cette transformation s’opère-t-elle ? Grâce à l’utilisation remarquablement simple du jq utilitaire. j’ai mentionné jq dans la partie 2 de cette série où l’utilisation était beaucoup plus complexe.

    Comme cela arrive souvent dans la technologie, ce que nous demandons est une opération beaucoup plus complexe, et pourtant la structure est bien plus facile à comprendre :

    jq: > 
      .[]|.top_queries|to_entries|map({queryname:.key,querycount:.value})
    

    Comme avec le jq sorcellerie dans mon dernier post ; cela est dû en grande partie au génie de mon collègue Haihong Ren. En plaçant cette ligne dans le contexte d’un fichier Flex YAML complet, cela ressemblerait à ceci :

    integrations:
      - name: nri-flex
        config:
          name: pihole
          apis:
            - name: pihole_topitems
              url: http://pi.hole/admin/api.php?topItems=10&auth=abcdefg1234567890 #your auth key goes here
              headers:
                accept: application/json
              jq: > 
                .[]|.top_queries|to_entries|map({queryname:.key,querycount:.value})

    Le résultat, comme je l’ai montré plus tôt, est des données plus faciles à résumer, interroger, trier, sélectionner et afficher.
    Afficher

    Section bonus spéciale Clip-and-Save

    Il n’y a pas vraiment grand-chose à résumer ici, sauf pour souligner que la plate-forme de New Relic n’est pas seulement suffisamment flexible pour vous permettre de collecter à peu près n’importe quel type de télémétrie dont vous avez besoin ; mais aussi pour les manipuler afin de transformer les données en informations, ce qui motive une action réfléchie au sein de votre organisation.

    Si vous souhaitez essayer tout cela par vous-même mais préférez ne pas avoir à tout CONSTRUIRE vous-même (et en cela, j’applaudis votre engagement envers l’économie d’effort), alors vous trouverez ci-dessous le fichier YAML complet. Et voici un lien vers un démarrage rapide avec le tableau de bord illustré ci-dessus.

    integrations:
      - name: nri-flex
        config:
          name: pihole
          variable_store:
            authkey: abcdefg1234567890 #your auth key goes here
    # In order for this integration to work, you need to include your pihole API key.
    # You can get the token by loggin into your pihole and going to Settings/API/Show API token 
    #   or by connecting directly to the pihole device and getting the WEBPASSWORD variable from /etc/pihole/setupVars.conf
    
          apis:
            - name: pihole_summary
              url: http://pi.hole/admin/api.php?summaryRaw&auth=${var:authkey}
              headers:
                accept: application/json
    
            - name: pihole_topitems
              url: http://pi.hole/admin/api.php?topItems=10&auth=${var:authkey}
              headers:
                accept: application/json
              jq: > 
                .[]|.top_queries|to_entries|map({queryname:.key,querycount:.value})
    
            - name: pihole_topclients
              url: http://pi.hole/admin/api.php?topClients=10&auth=${var:authkey}
              headers:
                accept: application/json
              jq: > 
                .[]|.top_sources|to_entries|map({clientname:.key,clientcount:.value})
    
            - name: pihole_toforwarddest
              url: http://pi.hole/admin/api.php?getForwardDestinations&auth=${var:authkey}
              headers:
                accept: application/json
              jq: > 
                .[]|.forward_destinations|to_entries|map({destinationname:.key,destinationcount:.value})
    
            - name: pihole_querytypes
              url: http://pi.hole/admin/api.php?getQueryTypes&auth=${var:authkey}
              headers:
                accept: application/json
              jq: > 
                .[]|.querytypes|to_entries|map({querytype:.key,querycount:.value})
    
            - name: pihole_recentblocked
              url: http://pi.hole/admin/api.php?recentBlocked&auth=${var:authkey}
              headers:
                accept: application/json

    Share. Facebook Twitter Pinterest LinkedIn WhatsApp Reddit Email
    Add A Comment

    Leave A Reply Cancel Reply

    Catégories

    • Politique de cookies
    • Politique de confidentialité
    • CONTACT
    • Politique du DMCA
    • CONDITIONS D’UTILISATION
    • Avertissement
    © 2023 DéveloppeurWeb.Com.

    Type above and press Enter to search. Press Esc to cancel.