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.
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.
Oui. Tu as raison.
cependant,
Je pense qu'il y a de nombreux cas où il est reporté pour une raison quelconque.
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.
À 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é.
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
print
de l'instruction à la fonction (nécessite des parenthèses après print
)/
, //
) a changé.reduction
etc. que j'avais l'habitude de parcourir a été déplacé vers fonctools
ConfigParser
est maintenant configparser
.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.
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.
$ 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
)
$ 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.
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
C'est plus facile à voir. Si les échecs et les erreurs dans la colonne Totaux sont égaux à zéro, c'est un soulagement.
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.
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.
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.
À 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.
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).
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.
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.
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.
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.
Sélectionnez Nouvelle version en haut à droite.
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é.
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