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.
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)
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.
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
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()
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}"
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.
Dadadog API Reference Grundlegende Verwendung von Jinja2
Recommended Posts