[PYTHON] Generieren Sie ein Bash-Skript, um die Einstellungen des Datadog-Monitors hinzuzufügen

Haftungsausschluss

Zweck

Verwenden einer JSON-Datei, die die Einstellungen des Datadog-Monitors beschreibt Generieren Sie ein Bash-Skript, um Monitoreinstellungen hinzuzufügen.

Eigentlich anstatt von der GUI wie Sashimi Löwenzahn einzustellen Die Monitoreinstellungen mit ähnlichen Inhalten können auf einmal angewendet werden, indem einfach ein Teil des Textes neu geschrieben wird.

Wenn Sie die Shell-Kunst vollständig nutzen, wird sie möglicherweise mit einer Shell vervollständigt. Ich habe nicht die Shell-Power und das Gefühl, so viel aufrechtzuerhalten, also mache ich es mit Python.

Inhalt

Verzeichnisaufbau

Verzeichnisaufbau


./
 ├ module/ 
 │   └ monitoring_script_builder.py (Skript zum Rendern der Vorlage)
 ├ template/
 │   └ create_monitor.j2
 ├ script/ (Skriptausgabe-Zielverzeichnis)
 ├ json/ (Datadog-Monitoreinstellungen JSON-Speicherort für Dateien)
 └ builder.py (Hauptskript)

Vorlagendatei

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}"

Diese Vorlage selbst ist eine Vorlage, die durch teilweises Ändern von offizielles Datadog-Beispiel erstellt wurde.

Skript

Skript zum Rendern von Vorlagen (Monitoring_script_builder.py)

Datadog-Anwendungsschlüssel und API-Schlüssel, Lesen Sie danach die Informationen (JSON-Datei), die in das Skript eingebettet werden sollen, und Rendert die Vorlage und gibt sie zurück (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

Hauptskript (builder.py)

Beim Lesen der JSON-Datei im JSON-Verzeichnis Lesen Sie den Datadog-API-Schlüssel und den Datadog-APP-Schlüssel aus den Umgebungsvariablen.

builder.py


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

#Teil der JSON-Datei lesen
file_list = glob.glob(os.path.join("json", "*.json"))


#Lesen Sie die wichtigsten Informationen
api_key = os.getenv('DD_API_KEY')
app_key = os.getenv('DD_APP_KEY')

#Datei aus Vorlage generieren
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", "")


    #Öffnen Sie die Datei zum Schreiben
    fout = open("script/" + file_out +"sh",'w')
    fout.write(rendered)
    fout.close()

Ausführungsbeispiel

Dieses Mal verwenden wir das folgende Beispiel.

json/sample.json



{
	"name": "{{host.name}}Cron wird angehalten bei.",
	"type": "service check",
	"query": "\"process.up\".over(\"process:cron\").by(\"host\",\"process\").last(2).count_by_status()",
	"message": "{{host.name}}von{{process.name}}Ist gestoppt.@Benachrichtigungsziel",
	"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": "@Benachrichtigungsziel\n\n10 Minuten sind vergangen,{{host.name}}von{{process.name}} \n wird gestoppt.",
		"thresholds": {
			"warning": 1,
			"ok": 1,
			"critical": 1
		}
}

Stellen Sie so ein (Schlüsselinformationen sind natürlich Dummy)

Ausführungsbeispiel


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

Wenn die Ausführung erfolgreich ist, unter `Skriptverzeichnis `

sample.sh sollte ausgegeben werden.




#### **`sample.Bestätigung von sh`**
```bash

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

curl -X POST -H "Content-type: application/json" \
-d '{
	"name": "{{host.name}}Cron wird angehalten bei.",
	"type": "service check",
	"query": "\"process.up\".over(\"process:cron\").by(\"host\",\"process\").last(2).count_by_status()",
	"message": "{{host.name}}von{{process.name}}Ist gestoppt.@Benachrichtigungsziel",
	"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": "@Benachrichtigungsziel\n\n10 Minuten sind vergangen,{{host.name}}von{{process.name}} \n wird gestoppt.",
		"thresholds": {
			"warning": 1,
			"ok": 1,
			"critical": 1
		}
}' "https://app.datadoghq.com/api/v1/monitor?api_key=${api_key}&application_key=${app_key}"

Verwendung dieses Skripts

Es wird verwendet, wenn Sie eine große Anzahl von Monitoreinstellungen eingeben möchten, die fast dieselben Bedingungen haben, sich jedoch geringfügig unterscheiden.

Wenn die Monitoreinstellung in json gespeichert ist und die Monitoreinstellung von Datadog fehlerhaft ist Wird zur Wiederherstellung verwendet. Dieser Punkt ist unterschiedlich, da für jede einzelne Monitoreinstellung ein Skript generiert wird. Es kann verwendet werden.

--Diversion der Monitoreinstellungen anderer Konten

Bei der Migration der von anderen Konten verwendeten Monitoreinstellungen Verfügbar über json export.

Verweise

Dadadog API Reference Grundlegende Verwendung von Jinja2

Recommended Posts

Generieren Sie ein Bash-Skript, um die Einstellungen des Datadog-Monitors hinzuzufügen
Fügen Sie MeCab ein Wörterbuch hinzu
So fügen Sie MicroPython ein C-Modul hinzu ...
Code, der zufällig eine Punktzahl generiert
[Python] Kopierskript zum Generieren eines Kopierprotokolls
Metaklasse (delete) zum Generieren eines Wörterbuchs
Skript zum Generieren eines Verzeichnisses aus einer JSON-Datei
So fügen Sie ein Paket mit PyCharm hinzu
Führen Sie ein Skript von Jupyter aus, um es zu verarbeiten
[Ubuntu] So führen Sie ein Shell-Skript aus
Ein einfaches IDAPython-Skript zum Benennen einer Funktion
Ich habe ein Skript erstellt, um Piktogramme anzuzeigen
Skript zum Erstellen einer Mac-Wörterbuchdatei
Fügen Sie VSCode eine virtuelle Python-Umgebung hinzu
So führen Sie Maya Python-Skripte aus
Fügen Sie einen Befehl hinzu, um ähnliche Dateien zusammen zu markieren
So generieren Sie ein Python-Objekt aus JSON
So fügen Sie einen Suchpfad für Python-Module hinzu
[Verbesserte Version] Skript zur Überwachung der CPU mit Python
So schreiben Sie einen ShellScript Bash für Anweisung
So fügen Sie Python ein Modul hinzu, das Sie in Julialang eingefügt haben
Ich habe ein Skript geschrieben, um ein WordPress-Plug-In hochzuladen
Ich habe versucht, eine zufällige Zeichenfolge zu generieren
Schreiben Sie ein Skript, um einen MySQL-Dump in TSV zu konvertieren
Schreiben wir ein entsprechendes Ping-Bestätigungsskript
[Bachstelze] Fügen Sie dem Bachstelzenprojekt eine Anmeldeseite hinzu
So schreiben Sie eine ShellScript-Bash-Case-Anweisung