E-Mail Hipchat mit Postfix, Fluentd und Python auf Azure

Überblick

  1. [Prämisse] Benachrichtigungsmail wird vom Überwachungssystem gesendet (diesmal ist dies problematisch, verwenden Sie also einen Befehl von localhost).
  2. Mail mit Postfix empfangen
  3. Kick Python Skript 1 mit / etc / Aliase
  1. fließendes Parsen je nach Inhalt der Mail und Kicks Python-Skript 2 (diesmal ohne Analyse)

Lass uns in Ordnung gehen

Erstellen Sie einen Server in Azure

Registrieren Sie sich wie folgt, wenn Sie im ersten Monat ein kostenloses Ticket für 20.000 Yen erhalten können. Microsoft Azure Free Trial: Try Azure | Azure Free Trial

Die Telefonnummer, die erste 0 wird herausgezogen ... oder so ähnlich, sie ist normalerweise registriert. Referenz: [[Abonnement] Persönliche Authentifizierung für neue Windows Azure-Verträge - Microsoft Azure-Supportteam-Website - Site Home - MSDN-Blogs](http://blogs.msdn.com/b/dsazurejp/archive/2013/09/12/ new-subscription-personal-indentification.aspx)

Ich habe centos6.5 (was ist OpenLogic?) Mit 1 Kern-CPU und 1,75 GB Speicher gemacht. Der Verwaltungsbildschirm ist eine Ressource, also ein Shareot.

azure.png

Ich habe fluentd (wegen fluent-cat) mit td-agent, ruby2.0.0 oder gem installiert.

Referenz: Ruby mit rbenv (CentOS) --Qiita installieren

Skriptausführung von Postfix

Ich habe mich nicht mit der nervigen virtuellen Domain oder irgendetwas in der Umgebung angelegt. Bitte zögern Sie nicht, es zu benutzen.

Ich habe an 3 Stellen mit Postfix gespielt

/etc/postfix/main.cf


#Fügen Sie Folgendes hinzu
allow_mail_to_commands = alias,forward,include

/etc/aliases


#Fügen Sie Folgendes hinzu
hoge: :include:/home/hoge/.forward

/home/hoge/.forward


"|/usr/bin/python /home/hoge/mail_parser/script1.py"

Normalerweise handelt es sich um sendmail, daher muss möglicherweise auf postfix umgeschaltet werden, aber dieser war ärgerlich. Der Grund für die Aufnahme ist, den Ausführungsbenutzer von script1.py zu ändern, nicht wahr? Ich war wütend auf einen Berechtigungsfehler, also ...

Nachdem Sie die Einstellungen geändert haben, vorsichtig

$ newaliases
$ /etc/init.d/postfix reload

Und spiegeln Sie die Einstellungen wider.

Referenz: [K-One Enterprise Engineer-Memo (`・ ω ・ ´) Business !!: Postfix-Einstellung Teil 5 Starten Sie das durch E-Mail-Empfang ausgelöste Programm](http://k-1-ne-jp.blogspot.jp/ 2013/01 / postfix_11.html) Mail mit einzeiligem Mail-Befehl überspringen - Mountain Walk-Programmierer

Fließender Beitrag von der Standardeingabe

Skript 1 sieht wie folgt aus und führt dem Parser Rohdaten von der Standardeingabe zu.

/home/hoge/mail_parser/script1.py


#! /usr/local/bin/python
# -*- coding:utf-8 -*-

from fluent import sender
from fluent import event
import sys
import email

### get stdin
input_lines = sys.stdin.read()

### get mail text
mail_text = email.message_from_string(input_lines)

### send message to fluentd
sender.setup('out.test', host='localhost', port=24224)
event.Event('follow', {
    'from': mail_text["from"],
    'to': mail_text["to"],
    'date': mail_text["date"],
    'subject': mail_text["subject"],
    'body': mail_text.get_payload()
    })

fließende (td-agent) Einstellungen

Empfangen Sie mit tcp mit in_forward und führen Sie Skript 2 mit out_exec aus.

/etc/td-agent/td-agent.conf


### built-in TCP input
<source>
  type forward
  port 24224
</source>

### file output
<match local.**>
  type file
  path /var/log/td-agent/access
</match>

### debug stdout
<match debug.**>
  type stdout
</match>

### out_exec
<match out.**>
  type exec
  command /usr/bin/python /var/td-agent/bin/hipchat_poster/script2.py
  time_key got_at
  time_format %Y-%m-%d %H:%M:%S
  format json
  flush_interval 5s
  buffer_path /var/td-agent/tmp/buffer
  buffer_chunk_limit 256m
  buffer_queue_limit 10
  retry_limit 3
  retry_wait 1s
</match>

Wenn Sie out.test in local.test oder debug.test in script1.py oben ändern,

echo "postfix test mail" | mail -s "test mail" hoge@localhost

Sie können eine Testmail senden und überprüfen, ob der Inhalt der Mail in die Datei geschrieben wurde.

Übrigens, wenn Sie Daten an out_exec übergeben, wird der Pfad der Pufferdatei, die die Daten enthält, an das Argument des Ausführungsbefehls übergeben. Seien Sie also dort vorsichtig. Zum Glück konnte ich es lösen, indem ich es den Leuten um mich herum erzählte, aber ich habe Angst vor einem Missverständnis der Spezifikationen ... Ich habe mich gefragt, ob es mit Standardeingaben kommen würde ...

Wenn Sie den fließenden Puffer nicht richtig steuern, bleibt er hängen. Seien Sie also vorsichtig. Ich muss noch viel darüber verstehen.

Referenz: exec Output Plugin | Fluentd Mehrstufiger fließender + mongodb hamari Ort - Stanakas Blog

Poste Hipchat von json im Pfad der Argumentdatei

Dann liest Script 2 den json des Argumentdateipfads und sendet eine Nachricht wie folgt an hipchat.

Es ist notwendig, ein Hipchat-Konto zu erstellen und Token im Voraus auszugeben, Hypcaht mit Pip zu platzieren und ein Verzeichnis zu öffnen.

/var/td-agent/bin/hipchat_poster/script2.py



from hypchat import HypChat
import sys
import json

def main():
        ### api call rundown
        API_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
        ROOM_NUMBER = 000000
        DEFAULT_COLOR = "purple"

        ### get fluentd log
        f = open(sys.argv[1], 'r')
        data = json.load(f)
        input_lines = "[" + data["date"] + "] " + data["subject"] + ":" + data["body"]

        ### post message to hipchat
        hc = HypChat(API_KEY)
        room = hc.get_room(ROOM_NUMBER)
        message = input_lines
        room.notification(message, color=DEFAULT_COLOR)
        return 0

if __name__ == "__main__":
        main()

Referenz: Überprüfen Sie die Funktion der Fluentd-Plug-Ins in_exec und out_exec | OpenGroove

Nachdem

echo "postfix test mail" | mail -s "test mail" hoge@localhost

Als ich es gepostet habe, konnte ich es wie folgt im Hipchat posten. Ich bin glücklich.

HipChat.png

Bonus: Gründe für die Umsetzung

Übrigens habe ich vorerst Monit oder etwas in die Überwachung eingefügt und versucht, die Alert-Mail zu fliegen, aber da es sich um ein Studium handelt, werde ich verschiedene explizite Alert-Mails erstellen, und wenn ich einen fließenden Parser dafür schreibe, bin ich mit dieser Kreation sehr zufrieden. Ich habe es getan, also beim nächsten Mal.

das ist alles.

Recommended Posts

E-Mail Hipchat mit Postfix, Fluentd und Python auf Azure
Verwenden von Python und MeCab mit Azure Databricks
Ein Memo mit Python2.7 und Python3 in CentOS
Verwenden Sie Python und MeCab mit Azure-Funktionen
Installieren Sie OpenCV 4.0 und Python 3.7 unter Windows 10 mit Anaconda
Verwenden Sie Python und word2vec (gelernt) mit Azure Databricks
Überprüfen Sie die E-Mail mit Python
Mail per Python senden
Installieren Sie Selenium auf Ihrem Mac und probieren Sie es mit Python aus
Automatisches Folgen auf Twitter mit Python und Selen! (RPA)
Erhalten Sie Kommentare auf Youtube Live mit [Python] und [Pytchat]!
Ubuntu 20.04 auf Himbeer-Pi 4 mit OpenCV und mit Python verwenden
Automatisieren Sie Chrome mit Python und Selen auf Ihrem Chromebook
Programmieren mit Python und Tkinter
Ver- und Entschlüsselung mit Python
Senden Sie japanische Post mit Python3
Python und Hardware-Verwenden von RS232C mit Python-
Python auf Ruby und wütend Ruby auf Python
Python mit Pyenv und Venv
Funktioniert mit Python und R.
IP-Spoof mit tor unter macOS und mit Python prüfen
Testen Sie Python mit Miniconda unter OS X und Linux mit travis-ci
Hinweise zum Bereitstellen von pyenv mit Homebrew und zum Verwalten von Python-Versionen
Kommunizieren Sie mit FX-5204PS mit Python und PyUSB
Hinweise zu Python- und Wörterbuchtypen
Roboter läuft mit Arduino und Python
Python 3.6 unter Windows ... und zu Xamarin.
Installieren Sie Python 2.7.9 und Python 3.4.x mit pip.
Neuronales Netzwerk mit OpenCV 3 und Python 3
AM-Modulation und Demodulation mit Python
Scraping mit Node, Ruby und Python
Erstellen Sie mit Python und GAS Termine für AtCoder-Wettbewerbe in Google Kalender
Erstellen Sie eine 64-Bit-Python 2.7-Umgebung mit TDM-GCC und MinGW-w64 unter Windows 7
Scraping mit Python, Selen und Chromedriver
Erstellen Sie mit Anaconda und PyCharm eine Python-Umgebung auf Ihrem Mac
[Automatisierung] Senden Sie Outlook-E-Mails mit Python
Fehler und Lösung bei der Installation von Python3 mit Homebrew auf einem Mac (Catalina 10.15)
IME On / Off wird in Zusammenarbeit mit Python und Arduino durch LED angezeigt
Verknüpfen Sie Modelica und Python unter Windows
Holen Sie sich Daten von VPS MySQL mit Python 3 und SQL Alchemy
JSON-Codierung und -Decodierung mit Python
Hadoop-Einführung und MapReduce mit Python
[GUI in Python] PyQt5-Drag & Drop-
Einfache Mailübertragung mit Eile Python3
Lesen und Schreiben von NetCDF mit Python
Ich habe mit PyQt5 und Python3 gespielt
Hinweise zur Verwendung von rstrip mit Python.
Lesen und Schreiben von CSV mit Python
Installieren Sie lp_solve unter Mac OSX und rufen Sie es mit Python auf.
Benachrichtigen Sie HipChat mit AWS Lambda (Python)
Mehrfachintegration mit Python und Sympy
Erste Schritte mit Python 3.8 unter Windows
Koexistenz von Python2 und 3 mit CircleCI (1.0)
[Python] Mail mit Outlook senden
Sugoroku-Spiel und Zusatzspiel mit Python
FM-Modulation und Demodulation mit Python
[Memo] Tweet auf Twitter mit Python
Senden Sie E-Mails über Google Mail mit Python 3.4.3.
Arbeiten Sie nicht mit Python mit OpenCV auf AMD Ryzen CPU unter WSL2 Ubuntu 18.04 und 20.04