E-mail hipchat avec postfix, fluentd et python sur Azure

Aperçu

  1. [Premise] Un e-mail d'alerte est envoyé depuis le système de surveillance (cette fois, c'est gênant, utilisez donc une commande de localhost)
  2. Recevoir du courrier avec postfix
  3. Lancer le script python 1 avec / etc / aliases
  1. fluentd analyse en fonction du contenu du mail et lance le script python 2 (cette fois, il passe sans analyse)

Allons dans l'ordre

Créer un serveur dans Azure

Inscrivez-vous à partir de ce qui suit lorsque vous pouvez obtenir un billet gratuit pour 20000 yens gratuitement le premier mois. Microsoft Azure Free Trial: Try Azure | Azure Free Trial

Le numéro de téléphone, le premier 0 est retiré ... ou quelque chose comme ça, il est généralement enregistré. référence: [[Abonnement] Authentification personnelle pour les nouveaux contrats Windows Azure - Site de l'équipe de support Microsoft Azure - Accueil du site - Blogs MSDN](http://blogs.msdn.com/b/dsazurejp/archive/2013/09/12/ new-subscription-personal-indentification.aspx)

J'ai créé centos6.5 (qu'est-ce qu'OpenLogic?) Avec 1 processeur central et 1,75 Go de mémoire. L'écran de gestion est une ressource, donc c'est un partage.

azure.png

J'ai installé fluentd (à cause de fluent-cat) avec td-agent, ruby2.0.0 ou gem.

référence: Installez ruby en utilisant rbenv (CentOS) --Qiita

Exécution de script à partir de postfix

Je n'ai pas joué avec le domaine virtuel ennuyeux ou quoi que ce soit autour de lui. N'hésitez pas à l'utiliser.

J'ai joué avec postfix à 3 endroits

/etc/postfix/main.cf


#Ajoutez ce qui suit
allow_mail_to_commands = alias,forward,include

/etc/aliases


#Ajoutez ce qui suit
hoge: :include:/home/hoge/.forward

/home/hoge/.forward


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

Normalement c'est sendmail, donc il peut être nécessaire de passer à postfix, mais celui-ci était ennuyeux. La raison de l'inclusion est de changer l'utilisateur d'exécution de script1.py, n'est-ce pas? Je me suis fâché avec une erreur d'autorisation, alors ...

Après avoir modifié les paramètres, doucement

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

Et refléter les paramètres.

référence: [K-One Enterprise Engineer Memo (`・ ω ・ ´) Business !!: postfix Setting Part 5 Démarrez le programme déclenché par la réception du courrier](http://k-1-ne-jp.blogspot.jp/ 2013/01 / postfix_11.html) Ignorer le courrier avec la commande de messagerie sur une ligne - Programmeur de marche en montagne

Message Fluentd à partir de l'entrée standard

Le script 1 est comme le suivant, fournissant du courrier brut à l'analyseur à partir d'une entrée standard.

/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()
    })

Paramètres courants (td-agent)

Recevoir avec tcp avec in_forward et exécuter le script 2 avec out_exec.

/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>

Si vous remplacez out.test par local.test ou debug.test dans script1.py ci-dessus,

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

Vous pouvez envoyer un mail de test et vérifier que le contenu du mail est écrit dans le fichier.

Au fait, lors du passage de données à out_exec, le chemin du fichier tampon contenant les données est passé comme argument de la commande d'exécution, alors soyez prudent. Heureusement, j'ai pu le résoudre en le disant aux gens autour de moi, mais j'ai peur de mal comprendre les spécifications ... Je me demandais si cela viendrait avec une entrée standard ...

De plus, si vous ne contrôlez pas correctement le tampon fluentd, il restera bloqué, alors faites attention à cela. J'ai encore beaucoup à comprendre à ce sujet.

référence: exec Output Plugin | Fluentd Multi-stage fluentd + mongodb hamari place - blog destanaka

Publier hipchat de json dans le chemin du fichier d'argument

Ensuite, Script 2 lit le json du chemin du fichier d'argument et publie un message sur hipchat comme suit.

À l'avance, vous devez créer un compte hipchat, émettre des jetons, mettre hypcaht avec pip et ouvrir un répertoire.

/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()

référence: Vérifiez le fonctionnement des plug-ins Fluentd in_exec et out_exec | OpenGroove

Après ça

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

Quand je l'ai posté, j'ai pu le poster sur hipchat avec le sentiment suivant. Je suis heureux.

HipChat.png

Bonus: raisons de la mise en œuvre

Au fait, pour le moment, j'ai mis monit ou quelque chose dans la surveillance et j'ai essayé de faire voler le mail d'alerte, mais comme c'est pour étudier, je vais faire divers mails d'alerte explicites et écrire un analyseur fluide pour cela et je suis très satisfait de cette création. Je l'ai fait, donc la prochaine fois.

c'est tout.

Recommended Posts

E-mail hipchat avec postfix, fluentd et python sur Azure
Utilisation de Python et MeCab avec Azure Databricks
Un mémo contenant Python2.7 et Python3 dans CentOS
Utiliser Python et MeCab avec Azure Functions
Installez OpenCV 4.0 et Python 3.7 sur Windows 10 avec Anaconda
Utiliser Python et word2vec (appris) avec Azure Databricks
Valider l'e-mail avec Python
Envoyer des e-mails par Python
Installez le sélénium sur votre Mac et essayez-le avec python
Suivi automatique sur Twitter avec python et sélénium! (RPA)
Obtenez des commentaires sur youtube Live avec [python] et [pytchat]!
Ubuntu 20.04 sur raspberry pi 4 avec OpenCV et utilisation avec python
Automatisez Chrome avec Python et Selenium sur votre Chromebook
Programmation avec Python et Tkinter
Chiffrement et déchiffrement avec Python
Envoyer du courrier japonais avec Python3
Python et matériel - Utilisation de RS232C avec Python -
Python sur Ruby et Ruby en colère sur Python
python avec pyenv et venv
Fonctionne avec Python et R
Usurpation d'adresse IP à l'aide de tor sur macOS et vérification avec python
Tester Python avec Miniconda dans un environnement OS X et Linux avec travis-ci
Remarques sur le déploiement de pyenv avec Homebrew et la gestion des versions de Python
Communiquez avec FX-5204PS avec Python et PyUSB
Notes sur Python et les types de dictionnaire
Robot fonctionnant avec Arduino et python
Python 3.6 sous Windows ... et vers Xamarin.
Installez Python 2.7.9 et Python 3.4.x avec pip.
Réseau neuronal avec OpenCV 3 et Python 3
Modulation et démodulation AM avec python
Scraping avec Node, Ruby et Python
Créez des rendez-vous pour le concours AtCoder sur Google Agenda avec Python et GAS
Créez un environnement Python 2.7 64 bits avec TDM-GCC et MinGW-w64 sous Windows 7
Grattage avec Python, Selenium et Chromedriver
Créez un environnement Python sur votre Mac avec Anaconda et PyCharm
[Automation] Envoyer des e-mails Outlook avec Python
Erreur et solution lors de l'installation de python3 avec homebrew sur mac (catalina 10.15)
IME On / Off est affiché par LED en coopération avec Python et Arduino
Lier Modelica et Python sous Windows
Obtenez des données de VPS MySQL avec Python 3 et SQL Alchemy
Encodage et décodage JSON avec python
Introduction à Hadoop et MapReduce avec Python
[GUI en Python] PyQt5-Glisser-déposer-
Transmission de courrier facile avec Hâte Python3
Lire et écrire NetCDF avec Python
J'ai joué avec PyQt5 et Python3
Notes sur l'utilisation de rstrip avec python.
Lire et écrire du CSV avec Python
Installez lp_solve sur Mac OSX et appelez-le avec python.
Notifier HipChat avec AWS Lambda (Python)
Intégration multiple avec Python et Sympy
Premiers pas avec Python 3.8 sous Windows
Coexistence de Python2 et 3 avec CircleCI (1.0)
[Python] Envoyez des e-mails avec Outlook
Jeu Sugoroku et jeu d'addition avec Python
Modulation et démodulation FM avec Python
[Memo] Tweet sur Twitter avec Python
Envoyer des e-mails via gmail avec Python 3.4.3.
Ne fonctionne pas Python avec OpenCV sur le processeur AMD Ryzen sur WSL2 Ubuntu 18.04 et 20.04