Custom Alerts の設定
    • PDF

    Custom Alerts の設定

    • PDF

    Article Summary

    VPC環境で利用できます。

    Cloud Hadoopクラスタ内で発生した Alertsをユーザーの設定に応じて通知できます。本ガイドでは、Cloud Hadoopクラスタ内の Oozieワークフローと Ambariで発生した Alertsをユーザーの設定に応じてメール、メッセージなどに通知する2つの方法について説明します。

    1. ローカル SMTPサーバを直接構築して Oozieワークフロー内の Alertsをメール通知する方法
    2. NAVERクラウド SENSサービスを利用して Ambari内の Alertsをメッセージ通知する方法

    SMTPサーバを使用したメール Alerts

    本ガイドでは Oozieワークフロー内の Alertsをメール通知するために Cloud Hadoopクラスタのエッジノードに SMTPサーバの sendmailをインストールして利用します。クラスタ外部に別途 STMPサーバを構築して利用する場合にクラスタと SMTPサーバが通信できるように ACGを設定します。

    a. SMTPサーバの構築

    1. Cloud Hadoop(VPC)エッジノードに sshでアクセスします。エッジノードにでアクセスする方法は、SSHでクラスタノードにアクセスガイドを参考にしてください。
    2. 以下のコマンドを実行して sendmail のインストール有無を確認します。
      rpm -qa |grep sendmail
      
    3. インストールされて以内場合、以下のコマンドを実行して sendmail をダウンロードします。
      sudo yum install -y sendmail sendmail-cf
      
    4. Sendmailの関連設定変更するために以下のコマンドを実行して の関連設定変更するために以下のコマンドを実行して sendmai.mc ファイルを読み込みます。
      cd /etc/mail
      sudo vi sendmail.mc
      
    5. sendmail.mc ファイル内容を以下のとおりに変更します。
    • 52、53番列の dnl を削除
    • 118番列の 127.0.0.10.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
    
    1. 以下のコマンドを実行して sendmail.mcsendmail.cf ファイルを作成します。
    sudo sh -c "sudo m4 sendmail.mc > sendmail.cf" 
    
    1. 以下のコマンドを実行して /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
    
    1. 以下のコマンドを実行して access ipを適用します。
    sudo makemap hash access < access
    
    1. 正常に動作しているか確認するために sendmail を実行してテストを行います。その後、送信したメールを確認します。
    sudo systemctl start sendmail
    sudo yum -y install mailx
    mail test123@navercorp.com
    Subject: test
    test
    test
    .
    EOT
    

    b. Ambariで Oozie Email Notificationを設定

    1. 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)
      hadoop-vpc-29_1.png

    c. Hueで Oozie Email Notificationのテスト

    本ガイドでは Oozieワークフローの失敗状況を再現するために、Hue にアクセスして以下のような単純なワークフローを実行しました。Shell Actionを実行した後に移行状態をすべて KILL 状態に任意設定しました。Hue Oozie Workflowで Sqoop、Hiveを使用するガイドを参考して、複雑なワークフローにも同様に適用できます。

    1. [Hue] にアクセスして左側メニューの [Oozieエディタ] > [Workflow] ボタンをクリックします。その後、以下のように任意の Shell Scriptをワークフローに追加して [設定] ボタンをクリックします。
      hadoop-vpc-29_2.png
    2. Oozieワークフローの失敗状況を再現するために、以下の状態ように移行状態をすべて KILL 状態に設定します。
      hadoop-vpc-29_3_ja.png
    3. ワークフロー内のエラーメッセージの設定で エラー発生時に EMAIL にチェックして受信する Eメールアドレス、件名と内容を入力します。
      hadoop-vpc-29_4_ja.png
    4. ワークフローを提出すると、しばらくして失敗します。その後、メールが正常に送信されたかを確認します。

    SENSサービスを使用したメッセージ Alerts

    本ガイドでは Ambari内の Alertsについてのメッセージ Alerts機能を具現するために NAVERクラウドの SENSサービスを利用します。SENSサービスについての説明は Simple & Easy Notification Serviceのご紹介ガイドを参考にしてください。

    a. SENSプロジェクトの作成

    1. SENSサービスを利用するために SENSプロジェクトを作成して Key値を照会します。サービスについての説明はご利用ガイドをご参考ください。
    2. SENS SMSサービスを利用するために発信番号を登録します。サービスについての説明はCalling Number
      をご参考ください。

    b. Ambari Alert Notificationsの設定

    1. Ambariにアクセスした後 [Alerts] > [ACTIONS] > [Manage Notifications] > [+] ボタンをクリックして以下のとおりに Alert targetを登録します。
      hadoop-vpc-29_5.png
    2. Cloud Hadoop(VPC)エッジノードに sshでアクセスします。エッジノードにでアクセスする方法は、SSHでクラスタノードにアクセスを参考にしてください。
    3. 以下のコマンドを実行して 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()
    
    1. 以下のコマンドを実行して Ambari Alertsに対するログを記録するファイルを /var/log/ambari-server/ パスに作成します。
    sudo vi /var/log/ambari-server/custom_notification.log
    
    1. 以下のコマンドを実行して alert.pycustom_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
    
    1. 以下のコマンドを実行して ambari.properties ファイルに Alert Scriptファイルのパスを追加します。
    sudo vi /etc/ambari-server/conf/ambari.properties
    
    notification.dispatch.alert.script=/var/lib/ambari-server/resources/scripts/alert.py
    
    1. 以下のコマンドを実行して ambari-server を再起動します。
    sudo ambari-server restart
    
    1. SENSサービスコンソールにアクセスしてメッセージ送信が正常に処理されたか確認します。
      hadoop-vpc-29_7_ja.png

    hadoop-vpc-29_6_ja.png


    この記事は役に立ちましたか?

    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.