Wysyłanie powiadomień SMS z usługi monitoringu przy użyciu Amazon SNS (cz.2)
We wcześniejszym artykule rozpoczęliśmy demonstrację jak przygotować usługę Amazon AWS SNS (Simple Notification Service) do wysyłania powiadomień z systemu monitoringu Icinga 2. Dotychczas pokazaliśmy przygotować usługę SNS i skonfigurować politykę dostępu oraz użytkownika w IAM. W tym artykule dokończymy to co rozpoczęliśmy i skonfigurujemy serwer z systemem Icinga2 oraz uruchomimy działającą usługę. Zapraszamy.
Przygotowanie systemu konfiguracji serwera z systemem Icinga 2 do monitorowania i wysyłania powiadomień SMS
Do wysłania powiadomień SMS z Amazon Web Services będziemy wykorzystywać dedykowany zestaw narzędzi Boto3 SDK dla języka Python. Wszystkie dostępne narzędzia SDK dla pozostałych języków programowania można znaleźć na bezpośrednio na stronie https://aws.amazon.com/tools/
Instalacja i konfiguracja AWS SDK Boto3 dla języka Python.
Zainstalowanie Boto3 jest dosyć proste i skupia się zazwyczaj na wydaniu jednej komendy w systemie linux:
pip install boto3
W razie problemów, dodatkową pomoc możemy uzyskać na stronie https://aws.amazon.com/sdk-for-python/
Po zainstalowaniu pakietu edytujemy plik /root/.boto i podajemy w nim własne dane uwierzytelniające, które otrzymaliśmy przy tworzeniu użytkownika IAM. Poniżej został zamieszczony przykład, jak powinna wyglądać zawartość pliku. Należy w nim oczywiście podać własne dane dostępowe.
[Credentials]
ec2_region_name = us-east-1
aws_access_key_id = AK23........6FQ
aws_secret_access_key = 4rc3..........P63cu
Do poprawnej obsługi powiadomień, musimy napisać własny skrypt umożliwiający wysyłanie wiadomości SMS z dowolnymi danymi. Poniżej zamieszczam przykładowy skrypt, pozwalający na wysyłanie dowolnej wiadomości.
/etc/icinga2/scripts/send_sns.py
#!/usr/bin/env python
import sys
import boto3
message = sys.argv[1:]
client = boto3.client('sns', region_name='us-east-1')
message_string = ', '.join(message)
response = client.publish(
TopicArn = 'arn:aws:sns:us-east-1:ACCOUNT_ID:Icingaweb2',
Message = message_string
)
Bezpośrednie podpięcie do systemu Icinga 2
Poniżej zostanie przedstawiona konfiguracja systemu Icinga 2 umożliwiająca wysyłanie służąca do wysyłania powiadomień SMS za pomocą przygotowanego skryptu.
Przykładowa komenda w systemie Icinga 2 może wyglądać następująco:
object NotificationCommand "snsapi-host-notification" {
import "plugin-notification-command"
command = [ SysconfDir + "/icinga2/scripts/send_sns.py", "$host.state$ $host.name$
$icinga.short_date_time$ output $host.output$" ]
}
Utworzenie powiadomienia w systemie, które zostanie przypisane do każdego hosta z włączonymi powiadomieniami o nazwie "pagersns".
apply Notification "sns-icingaadmins" to Host {
import "snsapi-host-notification"
user_groups = host.vars.notification.pagersns.groups
users = host.vars.notification.pagersns.users
assign where host.vars.notification.pagersns
}
Szablon dla powiamień jaki będzie wykorzystywany przez przypisanie powyższego powiadomienia:
template Notification "snsapi-host-notification" {
command = "snsapi-host-notification"
states = [ Up, Down ]
types = [ Problem, Acknowledgement, Recovery, Custom ]
period = "24x7"
}
Do poprawnego przypisania wcześniej wspomnianego powiadomienia, w konfiguracji hosta należy uwzględniać poniższy kod.
vars.notification["pagersns"] = {
groups = [ "snsapi-admins" ]
}
Podsumowanie
W artykule został przedstawiony, krok po kroku, sposób konfiguracji usługi SNS, proces tworzenia użytkownika IAM z ograniczonym dostępem do usługi SNS oraz konfiguracja systemu monitoringu Icinga 2 do wysyłania powidomień SMS.
Oczywiście jest to zalążek tego, do czego można wykorzystać usługę SNS jak i można skonfigurować monitoring Icinga 2. Natomiast jest to dobry początek pokazujący praktyczne zastosowanie usługi SNS.
Pamiętajmy że usługę SNS możemy wykorzystać do wysyłania zarówno powiadomień SMS, wiadomości e-mail, jak i wykorzystując protokół HTTP i HTTPS. Szczegółowy opis usługi SNS znajdziecie bezpośrednio na stronie https://aws.amazon.com/sns/