[PYTHON] Générer un script bash pour ajouter les paramètres du moniteur Datadog

Avertissement

Objectif

Utilisation d'un fichier JSON décrivant les paramètres du moniteur Datadog Générez un script bash pour ajouter les paramètres du moniteur.

En fait, au lieu de régler depuis l'interface graphique comme le pissenlit sashimi Les paramètres du moniteur avec un contenu similaire peuvent être appliqués en une seule fois en réécrivant simplement une partie du texte.

Peut-être que si vous utilisez pleinement l'art Shell, il sera complété par un shell. Je n'ai pas la puissance du shell et le sentiment de maintenir autant, alors je le fais avec python.

Contenu

Structure du répertoire

Structure du répertoire


./
 ├ module/ 
 │   └ monitoring_script_builder.py (Script pour rendre le modèle)
 ├ template/
 │   └ create_monitor.j2
 ├ script/ (Répertoire de destination de sortie du script)
 ├ json/ (Paramètres du moniteur Datadog Emplacement de stockage des fichiers JSON)
 └ builder.py (Script principal)

Fichier modèle

create_monitor.j2


#!/bin/bash
api_key={{api_key}}
app_key={{app_key}}

curl -X POST -H "Content-type: application/json" \
-d '{{json}}' "https://app.datadoghq.com/api/v1/monitor?api_key=${api_key}&application_key=${app_key}"

Ce modèle lui-même est un modèle créé en modifiant partiellement exemple officiel de Datadog.

scénario

Script de rendu de modèle (monitoring_script_builder.py)

Clé d'application et clé API Datadog, Après cela, lisez les informations (fichier JSON) à intégrer dans le script et Rend et renvoie le modèle (create_monitor.j2).

monitoring_script_builder.py


from jinja2 import Template, Environment, FileSystemLoader


class MonitoringScriptBuilder():

    def __init__(self, **kwargs):
        env = Environment(loader=FileSystemLoader('./template/'))
        self.template = env.get_template('create_monitor.j2')

    def render(self, data, app_key, api_key):
        """
        """
        data['app_key'] = app_key
        data['api_key'] = api_key
        rendered = self.template.render(data)
        return rendered

Script principal (builder.py)

Lors de la lecture du fichier json dans le répertoire json Lisez la clé API Datadog et la clé APP Datadog à partir des variables d'environnement.

builder.py


from module.monitoring_script_builder import MonitoringScriptBuilder
import os
import glob
import re
builder = MonitoringScriptBuilder()

#Lecture d'une partie du fichier JSON
file_list = glob.glob(os.path.join("json", "*.json"))


#Lire les informations clés
api_key = os.getenv('DD_API_KEY')
app_key = os.getenv('DD_APP_KEY')

#Générer un fichier à partir d'un modèle
for file in file_list:
    f = open(file)
    json = f.read()
    data = {
        'json': json, 
    } 

    rendered = builder.render(data, app_key, api_key)
    print(rendered)

    f.close()

    file_out = file.replace("json", "")


    #Ouvrez le fichier pour l'écriture
    fout = open("script/" + file_out +"sh",'w')
    fout.write(rendered)
    fout.close()

Exemple d'exécution

Cette fois, nous utiliserons l'exemple suivant.

json/sample.json



{
	"name": "{{host.name}}Cron est arrêté à.",
	"type": "service check",
	"query": "\"process.up\".over(\"process:cron\").by(\"host\",\"process\").last(2).count_by_status()",
	"message": "{{host.name}}de{{process.name}}Est arrêté.@Destination de notification",
	"options": {
		"notify_audit": false,
		"locked": false,
		"timeout_h": 0,
		"no_data_timeframe": 2,
		"new_host_delay": 300,
		"notify_no_data": false,
		"renotify_interval": 10,
		"escalation_message": "@Destination de notification\n\n10 minutes se sont écoulées,{{host.name}}de{{process.name}} \n est arrêté.",
		"thresholds": {
			"warning": 1,
			"ok": 1,
			"critical": 1
		}
}

Définir comme ceci (les informations clés sont bien sûr factices)

Échantillon d'exécution


$ export APP_KEY="piyopiyo"
$ export API_KEY="hogehoge"
$ python ./builder.py

Si l'exécution réussit, sous le `répertoire de script `

sample.sh devrait être sorti.




#### **`sample.Confirmation de sh`**
```bash

#!/bin/bash
api_key=hogehoge
app_key=piyopiyo

curl -X POST -H "Content-type: application/json" \
-d '{
	"name": "{{host.name}}Cron est arrêté à.",
	"type": "service check",
	"query": "\"process.up\".over(\"process:cron\").by(\"host\",\"process\").last(2).count_by_status()",
	"message": "{{host.name}}de{{process.name}}Est arrêté.@Destination de notification",
	"options": {
		"notify_audit": false,
		"locked": false,
		"timeout_h": 0,
		"no_data_timeframe": 2,
		"new_host_delay": 300,
		"notify_no_data": false,
		"renotify_interval": 10,
		"escalation_message": "@Destination de notification\n\n10 minutes se sont écoulées,{{host.name}}de{{process.name}} \n est arrêté.",
		"thresholds": {
			"warning": 1,
			"ok": 1,
			"critical": 1
		}
}' "https://app.datadoghq.com/api/v1/monitor?api_key=${api_key}&application_key=${app_key}"

Utilisation de ce script

--Grande quantité de paramètres du moniteur de pissenlit sashimi

Il est utilisé lorsque vous souhaitez saisir un grand nombre de paramètres de moniteur légèrement différents dans presque les mêmes conditions.

Lorsque le paramètre du moniteur est stocké dans json et que le paramètre du moniteur de Datadog est interrompu Utilisé pour la récupération. Ce point est différent car un script est généré pour chaque paramètre de moniteur unique. Il peut être utilisé.

--Diversion des paramètres du moniteur d'autres comptes

Lors de la migration des paramètres du moniteur utilisés par d'autres comptes Disponible via l'exportation json.

Les références

Dadadog API Reference Utilisation de base de Jinja2

Recommended Posts

Générer un script bash pour ajouter les paramètres du moniteur Datadog
Ajouter un dictionnaire à MeCab
Pour ajouter un module C à MicroPython ...
Code qui génère un score au hasard
[python] Script de copie pour générer un journal de copie
Metaclass (wip) pour générer un dictionnaire
Script pour générer un répertoire à partir d'un fichier json
Comment ajouter un package avec PyCharm
Exécuter un script depuis Jupyter pour traiter
[Ubuntu] Comment exécuter un script shell
Un simple script IDAPython pour nommer une fonction
J'ai fait un script pour afficher des pictogrammes
Script pour créer un fichier de dictionnaire Mac
Ajouter un environnement virtuel Python à VSCode
Comment exécuter des scripts Maya Python
Ajouter une commande pour marquer ensemble des fichiers similaires
Comment générer un objet Python à partir de JSON
Comment ajouter un chemin de recherche de module Python
[Version améliorée] Script pour surveiller le CPU avec Python
Comment écrire une instruction ShellScript Bash for
Pour ajouter un module à python que vous mettez dans Julialang
J'ai écrit un script pour télécharger un plug-in WordPress
J'ai essayé de générer une chaîne de caractères aléatoire
Ecrire un script pour convertir un vidage MySQL en TSV
Écrivons un script de confirmation ping de manière appropriée
[Wagtail] Ajouter une page de connexion au projet Wagtail
Comment écrire une instruction de cas bash ShellScript