Custom Alerts の設定
- 印刷する
- PDF
Custom Alerts の設定
- 印刷する
- PDF
Article Summary
Share feedback
Thanks for sharing your feedback!
VPC環境で利用できます。
Cloud Hadoopクラスタ内で発生した Alertsをユーザーの設定に応じて通知できます。本ガイドでは、Cloud Hadoopクラスタ内の Oozieワークフローと Ambariで発生した Alertsをユーザーの設定に応じてメール、メッセージなどに通知する2つの方法について説明します。
- ローカル SMTPサーバを直接構築して Oozieワークフロー内の Alertsをメール通知する方法
- NAVERクラウド SENSサービスを利用して Ambari内の Alertsをメッセージ通知する方法
SMTPサーバを使用したメール Alerts
本ガイドでは Oozieワークフロー内の Alertsをメール通知するために Cloud Hadoopクラスタのエッジノードに SMTPサーバの sendmailをインストールして利用します。クラスタ外部に別途 STMPサーバを構築して利用する場合にクラスタと SMTPサーバが通信できるように ACGを設定します。
a. SMTPサーバの構築
- Cloud Hadoop(VPC)エッジノードに sshでアクセスします。エッジノードにでアクセスする方法は、SSHでクラスタノードにアクセスガイドを参考にしてください。
- 以下のコマンドを実行して sendmail のインストール有無を確認します。
rpm -qa |grep sendmail
- インストールされて以内場合、以下のコマンドを実行して sendmail をダウンロードします。
sudo yum install -y sendmail sendmail-cf
- Sendmailの関連設定変更するために以下のコマンドを実行して の関連設定変更するために以下のコマンドを実行して sendmai.mc ファイルを読み込みます。
cd /etc/mail sudo vi sendmail.mc
- sendmail.mc ファイル内容を以下のとおりに変更します。
- 52、53番列の dnl を削除
- 118番列の 127.0.0.1 を 0.0.0.0 に変更
<変更前>
[52] dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
[53] dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
[118] DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
<変更後>
[52] TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
[53] define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
[118] DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl
- 以下のコマンドを実行して sendmail.mc で sendmail.cf ファイルを作成します。
sudo sh -c "sudo m4 sendmail.mc > sendmail.cf"
- 以下のコマンドを実行して /etc/mail/access ファイルに Oozieが動作中の m-001ノード、m-002ノードの IPを追加します。
sudo vi /etc/mail/access
<変更前>
# By default we allow relaying from localhost...
Connect:localhost.localdomain RELAY
Connect:localhost RELAY
Connect:127.0.0.1 RELAY
<変更後>
# By default we allow relaying from localhost...
Connect:localhost.localdomain RELAY
Connect:localhost RELAY
Connect:127.0.0.1 RELAY
Connect:10.0.3.16 RELAY
Connect:10.0.3.17 RELAY
- 以下のコマンドを実行して access ipを適用します。
sudo makemap hash access < access
- 正常に動作しているか確認するために sendmail を実行してテストを行います。その後、送信したメールを確認します。
sudo systemctl start sendmail
sudo yum -y install mailx
mail test123@navercorp.com
Subject: test
test
test
.
EOT
b. Ambariで Oozie Email Notificationを設定
- Ambariにアクセスした後に [Oozie] > [CONFIGS] > [ADVANCED] > [Custom oozie-site] > [Add Property ...] ボタンをクリックして以下の2個の設定を追加した後に、[SAVE] ボタンをソ押して保存し、[RESTART] ボタンを押して再起動します。
- Key: "oozie.email.from.address", Value: "送信者に使用するアドレス(例: oozie@localhost.com")
- Key: "oozie.email.smtp.host", Value: "SMTPサーバがインストールされているサーバの Ip(本ガイドではエッジノードに SMTPサーバをインストールしたため、エッジノードの IP)
c. Hueで Oozie Email Notificationのテスト
本ガイドでは Oozieワークフローの失敗状況を再現するために、Hue にアクセスして以下のような単純なワークフローを実行しました。Shell Actionを実行した後に移行状態をすべて KILL 状態に任意設定しました。Hue Oozie Workflowで Sqoop、Hiveを使用するガイドを参考して、複雑なワークフローにも同様に適用できます。
- [Hue] にアクセスして左側メニューの [Oozieエディタ] > [Workflow] ボタンをクリックします。その後、以下のように任意の Shell Scriptをワークフローに追加して [設定] ボタンをクリックします。
- Oozieワークフローの失敗状況を再現するために、以下の状態ように移行状態をすべて KILL 状態に設定します。
- ワークフロー内のエラーメッセージの設定で エラー発生時に EMAIL にチェックして受信する Eメールアドレス、件名と内容を入力します。
- ワークフローを提出すると、しばらくして失敗します。その後、メールが正常に送信されたかを確認します。
SENSサービスを使用したメッセージ Alerts
本ガイドでは Ambari内の Alertsについてのメッセージ Alerts機能を具現するために NAVERクラウドの SENSサービスを利用します。SENSサービスについての説明は Simple & Easy Notification Serviceのご紹介ガイドを参考にしてください。
a. SENSプロジェクトの作成
- SENSサービスを利用するために SENSプロジェクトを作成して Key値を照会します。サービスについての説明はご利用ガイドをご参考ください。
- SENS SMSサービスを利用するために発信番号を登録します。サービスについての説明はCalling Number
をご参考ください。
b. Ambari Alert Notificationsの設定
- Ambariにアクセスした後 [Alerts] > [ACTIONS] > [Manage Notifications] > [+] ボタンをクリックして以下のとおりに Alert targetを登録します。
- Cloud Hadoop(VPC)エッジノードに sshでアクセスします。エッジノードにでアクセスする方法は、SSHでクラスタノードにアクセスを参考にしてください。
- 以下のコマンドを実行して Custom Alertsファイルを /var/lib/ambari-server/resources/scripts パスに作成します。本ガイドでは SENSサービスでメッセージ送信リクエストを送る APIを活用します。SENSサービス APIについての説明は SMS APIガイドを参考にしてください。Ncloud API Signatureの作成についての説明は Ncloud APIガイドを参考にしてください。
sudo vi /var/lib/ambari-server/resources/scripts/alert.py
#!/usr/bin/env python
import sys
import urllib2
import json
import logging
from datetime import datetime
import hashlib
import hmac
import base64
import time
SENS_API_ENDPOINT = "https://sens.apigw.ntruss.com/sms/v2/services/{SENSコンソールから発行された serviceId}/messages」
LOG_PATH_FILE = "/var/log/ambari-server/custom_notification.log"
TIMESTAMP = int(time.time() * 1000)
TIMESTAMP = str(TIMESTAMP)
def test_notification():
definition_name = sys.argv[1]
definition_label = sys.argv[2]
service_name = sys.argv[3]
alert_state = sys.argv[4]
alert_text = sys.argv[5]
send_message_from_sens(definition_name, definition_label, service_name, alert_state, alert_text)
def send_message_from_sens(definition_name, definition_label, service_name, alert_state, alert_text):
try:
log_data = str(TIMESTAMP + " -- " + 'Alert Dispatcher' + " -- " + definition_name + " -- " + definition_label + " -- " + service_name + " -- " + alert_state + " -- " + alert_text + " -- ")
request_body = { "type":"SMS", "from":{発信番号}, "content":log_data, "messages":[ { "to":{着信番号} } ] }
headers={"Content-Type": "application/json; charset=utf-8", "x-ncp-apigw-timestamp": TIMESTAMP, "x-ncp-iam-access-key": {ポータルまたは Sub Accountから発行された Access Key ID}, "x-ncp-apigw-signature-v2": make_signature()}
data = json.dumps(request_body, ensure_ascii=False)
req = urllib2.Request(SENS_API_ENDPOINT, data, headers)
f = urllib2.urlopen(req)
response = f.read()
f.close()
file = open(LOG_PATH_FILE, "a+")
file.write(log_data)
file.write(response)
file.close()
except Exception as err:
logging.warning(err)
def make_signature():
access_key = {ポータルまたは Sub Accountが発行された Access Key ID}
secret_key = ポータルまたは Sub Accountが発行された Access Key ID
secret_key = bytes(secret_key)
method = "POST"
uri = "/sms/v2/services/{SENSコンソールから発行された serviceId}/messages"
message = method + " " + uri + "\n" + TIMESTAMP + "\n" + access_key
message = bytes(message)
signingKey = base64.b64encode(hmac.new(secret_key, message, digestmod=hashlib.sha256).digest())
return signingKey
if __name__ == '__main__':
test_notification()
- 以下のコマンドを実行して Ambari Alertsに対するログを記録するファイルを /var/log/ambari-server/ パスに作成します。
sudo vi /var/log/ambari-server/custom_notification.log
- 以下のコマンドを実行して alert.py と custom_notification.log ファイルに対する権限を設定します。
sudo chmod -R 700 /var/lib/ambari-server/resources/scripts/alert.py
sudo chmod -R 766 /var/log/ambari-server/custom_notification.log
- 以下のコマンドを実行して ambari.properties ファイルに Alert Scriptファイルのパスを追加します。
sudo vi /etc/ambari-server/conf/ambari.properties
notification.dispatch.alert.script=/var/lib/ambari-server/resources/scripts/alert.py
- 以下のコマンドを実行して ambari-server を再起動します。
sudo ambari-server restart
- SENSサービスコンソールにアクセスしてメッセージ送信が正常に処理されたか確認します。
この記事は役に立ちましたか?