La voie de la mise à jour de Splunkbase avec votre propre application Splunk compatible avec Python v2 / v3

Cet article est l'un des articles du Splunk Advent Calendar 2019. Veuillez profiter des Autres articles.

Cette fois, il est bon de publier ma propre application sur Splunkbase, Il est temps (?!) De devoir supporter Python 3 ... Splunk aussi Migrez vers Python 3!

Ceci est pour les développeurs d'applications Splunk qui sont poursuivis à la date limite.

Pour me présenter brièvement, Dans mon travail quotidien, je suis principalement en charge de la construction et du dépannage de Splunk. Ma fonction préférée est l'index des types de métriques.

En bref sur le contexte de l'article.

Qu'est-ce que la migration Python 3 en premier lieu?

Le langage de programmation interpréteur Python Les séries v2 et v3 sont utilisées depuis longtemps, Maintenance de la série v2 (v2.7) par la communauté de développement Prend fin le 1er janvier 2020 Il a été annoncé il y a 12 ans (2008).

Maintenant, 2019 est enfin terminée un peu. Il est temps de soulever une taille lourde.

D'ailleurs, juste après la fin de la maintenance Après 2020/1, ça ne s'arrête pas brusquement. Juste pour être sûr.

En premier lieu, il devrait être écrit pour Python 3.

Oui. Tu as raison.

cependant,

Je pense qu'il y a de nombreux cas où il est reporté pour une raison quelconque.

Les affaires Python de Splunk.

De plus, il existe des circonstances particulières concernant Splunk.

Le logiciel appelé Splunk ** L'environnement d'exécution Python est inclus **. Par conséquent, sans installer Python séparément du côté OS, Il était disponible sous forme de plug-in (App, Add-on).

Ce Python fourni sera disponible jusqu'à l'autre jour (22 octobre 2019) J'étais dans une situation où je ne pouvais sélectionner que Python 2.7.

Python 3.7, une série v3, a commencé à être inclus dans Splunk v8.0.0.

Maintenant, je ne peux pas utiliser l'environnement comme excuse (c'est une nuance trompeuse).

À propos, la v8.0.0 inclut Python 2.7 et Python 3.7. Les deux environnements sont inclus et Pour chaque fonction utilisée dans l'application et le module complémentaire Vous pouvez choisir l'environnement à utiliser. Par défaut, il fonctionne avec la série traditionnelle v2.7. (Cependant, à quelques exceptions près telles que les fonctions d'application Web).

En tant que future feuille de route, À la mi-2020, le Python par défaut passera de la v2.7 à la v3.7 (la v2.7 peut être sélectionnée). Dans la seconde moitié de la version 2020, il semble que la v2.7 sera supprimée et que seule la v3.7 sera incluse.

Réécrire juste en v3.7?

À noter lors de la migration ** La notation compatible v2 / v3 est fortement recommandée **.

Eh bien, vous avez dit que la v2 ne sera pas maintenue par EOL, L'avis est raisonnable ...

Si vous connaissez Splunk, vous le connaissez peut-être. Il existe une fonction appelée recherche distribuée.

Splunk peut être utilisé tout-en-un dans une seule instance Il est également possible de séparer les instances pour chaque fonction principale afin d'améliorer l'efficacité et la disponibilité de la recherche. En tant qu'acteur principal,

Il peut être divisé en. Lorsque cette configuration distribuée est adoptée La commande de recherche reçue par la tête de recherche, À plusieurs indexeurs (également appelés pairs), Demander un traitement de recherche distribué.

À ce stade, l'application sur la tête de recherche également Il est transmis à l'indexeur dans le cadre de l'instruction et exécuté sur l'indexeur.

Avec une commande de recherche personnalisée, etc. Si vous écrivez un processus qui utilise Python Paramètres de la tête de recherche et de l'indexeur (spécification de l'environnement Python) Ce serait bien s'ils étaient les mêmes La tête de recherche est compatible v3.7, Si vous spécifiez que l'indexeur fonctionne avec la v2.7, Avec la notation compatible v3 et incompatible v2 Le traitement distribué sur l'indexeur échoue Le scénario attend.

Dans une telle situation, la notation pour Python v2 / v3 est Conseillé.

Quelle est la différence entre Python v2 / v3?

Il semble qu'il s'écartera progressivement du sujet principal Je vais résumer les détails des différences liées à la version Python, Veuillez consulter d'autres articles pour plus de détails.

Dans mon expérience

Je me souviens en avoir été accro.

Lors de la réécriture en notation compatible, Je voudrais présenter deux, six et tox. En un mot, six est pour absorber les différences telles que les noms de fonctions, tox est un test unitaire pour les deux v2 / v3.

Différences entre Python v2 et v3 Efforts à absorber dans la bibliothèque six est Il est également inclus dans la bibliothèque pour le développement de l'application Splunk.

Aussi, Python 2 et Python 3 respectivement Pour exécuter des tests unitaires dans un environnement tox Un cadre est également disponible. Test unitaire du même code, Il peut être exécuté dans plusieurs environnements d'interprétation (tels que Python v2 et v3).

Jusqu'au contrôle qu'il n'y a pas de problème grammatical Dans une certaine mesure, il peut être manipulé mécaniquement avec un cadre ou autre.

Réécrire votre propre application Splunk.

Au fait, l'histoire de l'oreiller est devenue assez longue, mais il est temps pour le sujet principal.

Pour les vérifications de compatibilité des applications, L'application Splunk Platform Upgrade Readiness (https://splunkbase.splunk.com/app/4698/) est également disponible, J'ai besoin d'un environnement Splunk Enterprise, donc Tout d'abord, jetons un coup d'œil à l'API REST d'AppInspect. Plus tard, nous parlerons de l'application de préparation de mise à niveau de la plate-forme Splunk plus tard.

Vérification de compatibilité, partie 1: API REST AppInspect

Obtention d'un jeton d'authentification

$ curl -X GET \
       -u {splunk.nom d'utilisateur com} \
       --url "https://api.splunk.com/2.0/rest/login/splunk"

Il vous sera demandé votre mot de passe Entrez le mot de passe du compte utilisateur splunk.com.

{
    "data": {
        "token": "{Chaîne de jeton. Moins que,$Voir dans TOKEN}",
        "user": {
            "email": "{Adresse e-mail enregistrée}",
            "groups": [
                "Beta Users"
            ],
            "name": "{Nom enregistré}",
            "username": "{splunk.nom d'utilisateur com}"
        }
    },
    "msg": "Successfully authenticated user and assigned a token",
    "status": "success",
    "status_code": 200
}

Ici, nous allons vérifier la chaîne de caractères de token dans la réponse en utilisant la procédure suivante. (La chaîne de jeton est assez longue, il peut donc être préférable de la placer dans une variable shell, etc.)

Dans ce qui suit, on suppose que le jeton obtenu ici est défini dans la variable d'environnement TOKEN. (Reportez-vous à $ TOKEN)

Émission d'une demande d'inspection d'application

$ curl -X POST
       -H "Authorization: bearer $TOKEN"
       -H "Cache-Control: no-cache"
       -F "app_package=@\"line-alert-for-splunk_100.tgz\""
       -F "included_tags=py3_migration"
       --url "https://appinspect.splunk.com/v1/app/validate"
{
    "request_id": "a32e91f8-7767-400f-a33f-xxxxxxxxxxxx",
    "message": "Validation request submitted.",
    "links": [
        {
            "rel": "status",
            "href": "/v1/app/validate/status/a32e91f8-7767-400f-a33f-xxxxxxxxxxxx"
        },
        {
            "rel": "report",
            "href": "/v1/app/report/a32e91f8-7767-400f-a33f-xxxxxxxxxxxx"
        },
        {
            "rel": "package",
            "href": "/v1/app/package/a32e91f8-7767-400f-a33f-xxxxxxxxxxxx"
        }
    ]
}

Utilisez l'ID de demande inclus dans la réponse pour interroger les résultats.

Vérifier l'état et les résultats de l'inspection de l'application

Pour vérifier l'avancement de la demande d'inspection Interrogez le point de terminaison d'état.

$ curl -X GET
       -H "Authorization: bearer $TOKEN"
       -H "Cache-Control: no-cache"
       --url https://appinspect.splunk.com/v1/app/validate/status/a32e91f8-7767-400f-a33f-xxxxxxxxxxxx
{
    "request_id": "a32e91f8-7767-400f-a33f-xxxxxxxxxxxx",
    "status": "SUCCESS",
    "info": {
        "error": 0,
        "failure": 0,
        "skipped": 0,
        "manual_check": 0,
        "not_applicable": 3,
        "warning": 0,
        "success": 10
    },
    "links": [
        {
            "rel": "self",
            "href": "/v1/app/validate/status/a32e91f8-7767-400f-a33f-xxxxxxxxxxxx"
        },
        {
            "rel": "report",
            "href": "/v1/app/report/a32e91f8-7767-400f-a33f-xxxxxxxxxxxx"
        }
    ]
}

Si le statut est SUCCESS, vous avez terminé.

Utilisez le point de terminaison du rapport pour obtenir les résultats.

$ curl -X GET
       -H "Authorization: bearer $TOKEN"
       -H "Cache-Control: no-cache"
       --url https://appinspect.splunk.com/v1/app/report/a32e91f8-7767-400f-a33f-xxxxxxxxxxxx

S'il n'est pas spécifié, json sera renvoyé. Vous pouvez également obtenir le résultat en HTML en spécifiant Content-Type comme il convient.

$ curl -X GET
       -H "Authorization: bearer $TOKEN"
       -H "Content-Type: text/html"
       -H "Cache-Control: no-cache"
       --url https://appinspect.splunk.com/v1/app/report/a32e91f8-7767-400f-a33f-xxxxxxxxxxxx

191215-appinspect-MSTeams-1.png

C'est plus facile à voir. Si les échecs et les erreurs dans la colonne Totaux sont égaux à zéro, c'est un soulagement.

Vérification de compatibilité n ° 2: application de préparation à la mise à niveau de la plate-forme Splunk

Ensuite, dans l'application Splunk Platform Upgrade Readiness, Je vais vous présenter la méthode de vérification.

À l'origine, lors de la mise à niveau de Splunk v7.x vers Splunk v8.0 C'est une application à vérifier C'est pratique car vous pouvez également vérifier la compatibilité avec Python 3.

Cependant, faire Mettre à niveau la source Splunk Enterprise v7.1, v7.2, v7.3 L'un ou l'autre environnement est requis. De plus, il convient de noter ** Ne fonctionne pas avec Splunk 8 mis à jour! **

Si vous avez la chance d'avoir la série cible v7.x, installez l'application et Depuis la liste des applications dans l'interface utilisateur Web Splunk Ouvrez l'application Splunk Platform Upgrade Readiness.

Sélectionnez le bouton Exécuter une nouvelle analyse en haut à droite À partir du menu déroulant Paramètres de numérisation Sélectionnez Analyser la sélection personnalisée d'applications.

191215-upgrade_readiness_app-MSTeams-3a.png

Une liste des applications installées sera affichée sur le côté droit de l'écran. Sélectionnez l'application que vous souhaitez vérifier dans la liste.

191215-upgrade_readiness_app-MSTeams-3b.png

Sélectionnez le bouton Numériser.

Attendez un moment et vous devriez voir le résultat. Cela dépend des fichiers inclus dans l'application, mais cela peut prendre de quelques minutes à quelques dizaines de minutes. Est-il bon d'attendre patiemment?

Une fois terminé, l'interface graphique affichera Scan terminé Vous pouvez voir les résultats de l'analyse.

191215-upgrade_readiness_app-MSTeams-4.png

À propos, le journal des opérations de l'application Upgrade Readiness Dans $ SPLUNK_HOME / var / log / upgrade_readiness_app / upgrade_readiness.log Ce sera une sortie.

2019-12-11 16:57:44,671 INFO 140663382782080 - Scan initiated
2019-12-11 16:57:44,671 INFO 140663382782080 - Retrieving key to write progress
2019-12-11 16:57:44,771 INFO 140663382782080 - Found key for existing entry: 5df0a1788f02502eb0569f21
2019-12-11 16:57:44,829 INFO 140663382782080 - Total 1 apps found for user: admin
2019-12-11 16:57:44,905 INFO 140663382782080 - 0 apps out of 1 scanned. Scanning App: Microsoft Teams alert for Splunk
2019-12-11 16:57:59,288 INFO 140084004323456 - Handling a request
2019-12-11 16:57:59,289 INFO 140084004323456 - Executing function, name=get_read_progress

(Omission)

2019-12-11 17:19:17,115 INFO 140663382782080 - Deployment scanned successfully for user: admin

Dans Documents publics,

Some Splunk apps are too large to scan. If you cannot scan a Splunk app, follow the app's documentation for updates on Python 3 readiness. Je trouve également une disposition qui dit, alors je prie pour ne pas échouer.

Ce n'est pas productif d'attendre en serrant, Jetons un coup d'œil aux points de rénovation de l'application Splunk. Si vous regardez le document public Act on scan results (https://docs.splunk.com/Documentation/UpgradeReadiness/2.0.0/Use/Use#Act_on_scan_results), Les éléments suivants sont décrits.

C'est aussi une bonne idée de réaliser les parties qui peuvent être traitées à l'avance.

Lorsque l'analyse est terminée, une liste de résultats s'affiche.

191215-upgrade_readiness_app-MSTeams-1.png

Contrôle 7: vous pouvez trouver que Status: dans les scripts Python est ** Warning **.

Cette application est modélisée avec le [Add-on Builder] légèrement plus ancien (https://splunkbase.splunk.com/app/2962/). Il semble que les fichiers sont complètement bloqués.

Il est affiché sur le côté droit de chaque élément dans la liste des problèmes. Cliquez sur le lien Voir les problèmes Les points de correction sont affichés (cela est utile).

191215-upgrade_readiness_app-MSTeams-2.png

Analyse de l'application de préparation à la mise à niveau C'est comme regarder un fichier Python indépendamment (mon imagination) Même lorsque la v2 / v3 est branchée conditionnellement et traitée dans un autre fichier, etc. Il semble qu'il y ait une possibilité qu'il soit un candidat pour la réparation. J'ai peur du nombre de résultats d'analyse pendant un moment, Vérifiez-le et corrigez-le si nécessaire.

(Édition supplémentaire) J'ai trouvé un problème avec la compatibilité des applications tierces autres que la mienne.

S'il a été publié sur Splunkbase, Cherchons une version mise à jour.

Si le support continue par l'auteur et le responsable Il peut être judicieux de demander des réparations.

Si vous avez le courage, il peut être judicieux de le réparer vous-même, Après avoir confirmé qu'il n'y a pas de problème avec la licence, tout en considérant l'impact de l'opération sur les autres, Je pense que ce serait bien d'être soutenu. Quand il fait beau et que la version correspondante est terminée Vous pouvez également contacter l'auteur et les faire fusionner C'est peut-être le vrai frisson de l'open source.

Téléchargez la version mise à jour sur Splunkbase.

Enfin, téléchargez la version mise à jour et réappliquez.

Connectez-vous à Splunkbase et Accédez à Mon compte - Mon profil dans l'e-mail supérieur.

191211-splunkbase-1.png

Sélectionnez l'application cible dans vos applications et sélectionnez Dans le menu Outils d'administration en haut Sélectionnez Gérer l'application.

191211-splunkbase-2.png

Sélectionnez Nouvelle version en haut à droite.

191211-splunkbase-3.png

Le contrat de distribution du développeur Splunkbase sera affiché. Se mettre d'accord

Une zone de dépôt appelée Version: Nouvelle version sera affichée. Téléchargez une nouvelle version de l'application.

Vous serez redirigé vers une page où vous pourrez rédiger des notes de publication, etc. Il existe également une colonne de compatibilité de version Splunk, donc J'ai également vérifié 8.0.

Si vous enregistrez, l'application est terminée. Après cela, prions pour que l'examen passe en toute sécurité.

Finalement.

Dans cet article, comment utiliser Splunk comme la recherche, Sans toucher à une introduction pratique du module complémentaire ou à l'utilisation d'une configuration astucieuse, J'ai mis l'accent sur la façon de développer et de publier l'application Splunk.

Je vous serais reconnaissant si vous pouviez trouver quelque chose d'utile.

Bien sûr, la version mise à jour de l'application Il est également important de l'exécuter dans l'environnement Splunk v8 et de vérifier son fonctionnement.

Non limité à Splunk App, lors de la modification d'applications Il peut également être nécessaire de vérifier la partie qu'il n'y a pas de différence dans la logique métier. C'est peut-être une théorie idéale, mais préparez correctement un test unitaire et préparez-le correctement. Vérifier que le même résultat peut être obtenu avec Python 2 et Python 3 avec tox etc. Je pense que c'est un moyen d'éviter la régression.

Concernant la nouvelle version de votre propre application, J'ai écrit un article intitulé Ma première application Splunk sur Splunkbase, donc si vous êtes intéressé, jetez un œil.

Alors joyeux Noël !!

Recommended Posts

La voie de la mise à jour de Splunkbase avec votre propre application Splunk compatible avec Python v2 / v3
La route de la compilation vers Python 3 avec Thrift
Mémo pour créer votre propre Box avec le Python de Pepper
[Road to Intermediate Python] Définissez dans votre propre classe
Exécutez l'intelligence de votre propre bibliothèque python avec VScode.
Essayez docker: créez votre propre image de conteneur pour une application Web Python
Mémo pour demander des KPI avec python
[Introduction à Udemy Python3 + Application] 47. Traitez le dictionnaire avec une instruction for
Pour importer votre propre module avec jupyter
Publiez votre propre bibliothèque Python sur Homebrew
[TensorFlow / Keras] La route pour assembler un RNN de votre structure préférée
[Introduction à Python] Comment obtenir l'index des données avec l'instruction for
Essayez de créer votre propre AWS-SDK avec bash
Le moyen le plus rapide pour les débutants de maîtriser Python
[Python] matplotlib: Formatez le diagramme de votre mémoire
Spécifiez le fichier exécutable Python à utiliser avec virtualenv
Utilisez Logger avec Python pour le moment
Dites bonjour au monde avec Python avec IntelliJ
Créez rapidement votre propre module avec setuptools (python)
Le moyen le plus simple d'utiliser OpenCV avec python
Introduction à Python avec Atom (en route)
python: utilisez votre propre classe pour numpy ndarray
Étapes pour installer votre propre bibliothèque avec pip
Obtenez AccessToken pour le compte de service avec le SDK Firebase Admin Python
La première étape de l'apprentissage automatique ~ Pour ceux qui veulent essayer l'implémentation avec python ~
[Pour les débutants] Web scraping avec Python "Accédez à l'URL de la page pour obtenir le contenu"
Comment définir l'environnement de développement pour chaque projet avec VSCode + extension Python + Miniconda
Essayez de résoudre le livre des défis de programmation avec python3
Faire de l'application Python CUI une application pour Mac
[Introduction à l'application Udemy Python3 +] 66. Création de votre propre exception
[Introduction à Python] Comment itérer avec la fonction range?
Exécutez avec CentOS7 + Apache2.4 + Python3.6 pour le moment
Essayez d'améliorer votre propre quiz d'introduction avec Python
Provisionnement de flotte avec AWS IoT SDK for Python v2
Essayez de résoudre le problème d'affectation du médecin de formation avec Python
J'ai essayé de toucher un fichier CSV avec Python
Étapes pour installer le dernier Python sur votre Mac
J'ai essayé de résoudre Soma Cube avec python
[Python] Comment spécifier l'emplacement de téléchargement avec youtube-dl
Convertissez l'image au format .zip en PDF avec Python
Utilisez CASA Toolkit dans votre propre environnement Python
Informations pour contrôler les moteurs avec Python sur RaspberryPi
PIL en Python sur Windows8 (pour Google App Engine)
Premiers pas avec Google App Engine pour Python et PHP
Spécifiez MinGW comme compilateur utilisé dans Python
Pour ceux qui veulent écrire Python avec vim
Appelez votre propre module python à partir du package ROS
J'ai essayé de résoudre le problème avec Python Vol.1
[Python] Comment réécrire le style de table avec python-pptx [python-pptx]
[Python] Road to the Serpent (5) Jouez avec Matplotlib
Programmez avec votre smartphone n'importe où! (Recommandé pour le langage C / Python)
[Python] Lorsque vous souhaitez importer et utiliser votre propre package dans le répertoire supérieur
La route vers Pythonista
La route vers Djangoist
J'ai essayé de trouver l'entropie de l'image avec python
J'ai essayé de simuler la propagation de l'infection avec Python
J'étais accro au débogueur Python pdb pendant 2 minutes
Mettre à jour Raspberry Pi Python vers 3.7 ou version ultérieure avec pyenv