---
title: "Custom Alerts 설정"
slug: "hadoop-vpc-29"
tags: ["cloud hadoop"]
updated: 2026-05-21T09:01:28Z
published: 2026-05-21T09:03:07Z
canonical: "guide-gov.ncloud-docs.com/hadoop-vpc-29"
---

> ## Documentation Index
> Fetch the complete documentation index at: https://guide-gov.ncloud-docs.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Custom Alerts 설정

<p class="platform-info type-vpc">VPC 환경에서 이용 가능합니다.</p>

Cloud Hadoop 클러스터 내에서 발생한 Alerts를 사용자의 설정에 따라 전달 받을 수 있습니다. 이 가이드에서는 Cloud Hadoop 클러스터 내 Oozie 워크플로 및 Ambari에서 발생한 Alerts를 사용자의 설정에 따라 메일, 메시지 등으로 전달 받기 위한 방법 두 가지에 대하여 설명합니다.
1. [로컬 SMTP 서버를 직접 구축하여 Oozie 워크플로 내 Alerts를 메일로 전달받는 방법](#SMTP서버를사용한메일Alerts)
2. [네이버클라우드 SENS 서비스를 사용하여 Ambari 내 Alerts를 메시지로 전달받는 방법](#SENS서비스를사용한메시지Alerts)

## SMTP 서버를 사용한 메일 Alerts<a name="SMTP서버를사용한메일Alerts"></a>

이 가이드에서는 Oozie 워크플로 내 Alerts를 메일로 전달받기 위해 Cloud Hadoop 클러스터의 엣지 노드에 SMTP 서버로 sendmail을 설치하여 사용합니다. 클러스터 외부에 별도의 STMP 서버를 구축하여 사용하실 경우에는 클러스터와 SMTP 서버가 통신할 수 있도록 ACG를 설정해야 합니다.

### a. SMTP 서버 구축<a name="aSMTP서버구축"></a>

1. Cloud Hadoop (VPC) 엣지 노드에 ssh로 접속해 주십시오. 엣지 노드에 접속하는 방법은 [SSH로 클러스터 노드 접속](/docs/hadoop-chadoop-3-2-vpc) 가이드를 참고해 주십시오.
2. 아래 명령어를 수행해 **sendmail** 설치 여부를 확인해 주십시오.
      ```bash
    rpm -qa |grep sendmail
    ```
3. 설치가 되어있지 않다면, 아래 명령어를 수행해 **sendmail**을 다운로드해 주십시오.
    ```bash
    sudo yum install -y sendmail sendmail-cf
    ```
4. **sendmail** 관련 설정을 변경하기 위해 아래 명령어를 수행해 **sendmai.mc** 파일을 읽어 주십시오. 
    ```bash
    cd /etc/mail
    sudo vi sendmail.mc
    ```
5. **sendmail.mc** 파일 내용을 아래와 같이 변경해 주십시오.
* 56, 57번 줄의 **dnl**을 제거
* 121번 줄의 **127.0.0.1**을 **0.0.0.0**으로 변경

<변경 전>
```bash
[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
```
<변경 후>
```bash
[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
```
6. 아래 명령어를 수행해 **sendmail.mc**로 **sendmail.cf** 파일을 생성해 주십시오.
```bash
sudo sh -c "sudo m4 sendmail.mc > sendmail.cf" 
```
7. 아래 명령어를 수행해 **/etc/mail/access** 파일에 Oozie가 동작중인 m-001 노드, m-002 노드의 IP를 추가해 주십시오.
```bash
sudo vi /etc/mail/access
```

<변경 전>
```bash
# By default we allow relaying from localhost...
Connect:localhost.localdomain       RELAY
Connect:localhost                            RELAY
Connect:127.0.0.1                           RELAY
```

<변경 후>
```bash
# 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
```
8. 아래 명령어를 수행해 access ip를 적용해 주십시오.
```bash
sudo makemap hash access < access
```

9. 정상적으로 동작하는지 확인하기 위해 **sendmail**을 실행하여 테스트를 진행해 주십시오. 그 후 전송한 메일을 확인해 주십시오.
```bash
sudo systemctl start sendmail
sudo yum -y install mailx
mail test123@navercorp.com
Subject: test
test
test
.
EOT
```

### b. Ambari에서 Oozie Email Notification 설정 <a name="bAmbari에서OozieEmailNotification설정"></a>

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](https://cdn.document360.io/f2d93c92-8957-408f-94df-b9b370f76a32/Images/Documentation/hadoop-vpc-29_1.png){height="" width="80%"}

### c. Hue에서 Oozie Email Notification 테스트 <a name="cHue에서OozieEmailNotification테스트"></a>
이 가이드에서는 Oozie 워크플로의 실패 상황을 재현하기 위해 **Hue**에 접속하여 아래와 같은 단순한 워크플로를 실행하였습니다. Shell Action을 수행한 뒤 전환 상태를 모두 **KILL** 상태로 임의 설정하였습니다. [Hue Oozie Workflow에서 Sqoop, Hive 사용](/docs/hadoop-vpc-28) 가이드를 참고하여 복잡한 워크플로에도 동일하게 적용해볼 수 있습니다.

1. **[Hue]** 에 접속하여 좌측 메뉴 **[Oozie 편집기]** > **[Workflow]** 버튼을 클릭해 주십시오. 그 후 아래와 같이 임의의 Shell Script를 워크플로에 추가하고 **[설정]** 버튼을 클릭해 주십시오.
![hadoop-vpc-29_2.png](https://cdn.document360.io/f2d93c92-8957-408f-94df-b9b370f76a32/Images/Documentation/hadoop-vpc-29_2.png){height="" width="80%"}
2. Oozie 워크플로의 실패 상황을 재현하기 위해 아래와 같이 전환 상태를 모두 **KILL** 상태로 설정해 주십시오.
![hadoop-vpc-29_3_ko.png](https://cdn.document360.io/f2d93c92-8957-408f-94df-b9b370f76a32/Images/Documentation/hadoop-vpc-29_3_ko.png){height="" width="80%"}
3. 워크플로 내 오류 메시지 설정에서 **오류 발생 시 EMAIL**에 체크한 뒤 수신할 메일 주소, 제목 및 내용을 입력해 주십시오.
![hadoop-vpc-29_4_ko.png](https://cdn.document360.io/f2d93c92-8957-408f-94df-b9b370f76a32/Images/Documentation/hadoop-vpc-29_4_ko.png){height="" width="80%"}
4. 워크플로를 제출하면 잠시 뒤 실패합니다. 그 후 메일이 정상적으로 발송되었는지 확인해 주십시오.  

## SENS 서비스를 사용한 메시지 Alerts<a name="SENS서비스를사용한메시지Alerts"></a>

이 가이드에서는 Ambari 내 Alerts에 대한 메시지 Alerts 기능을 구현하기 위해 네이버클라우드의 SENS 서비스를 사용합니다. SENS 서비스에 대한 설명은 [Simple & Easy Notification Service 소개
](/docs/sens-overview) 가이드를 참고해 주십시오.

### a. SENS 프로젝트 생성<a name="aSENS프로젝트생성"></a>
1. SENS 서비스를 사용하기 위해 SENS 프로젝트를 생성하고 Key 값들을 조회해 주십시오. 이에 대한 설명은 [공통 가이드](/docs/sens-start)를 참고해 주십시오.
2. SENS SMS 서비스를 사용하기 위해 발신번호를 등록해 주십시오. 이에 대한 설명은 [Calling Number 가이드](/docs/sens-callingno)를 참고해 주십시오.

### b. Ambari Alert Notifications 설정<a name="bAmbariAlertNotifications설정"></a>
1. Ambari에 접속 후 **[Alerts]** > **[ACTIONS]** > **[Manage Notifications]** > **[+]** 버튼을 클릭하여 아래와 같이 Alert target을 등록해 주십시오.
![hadoop-vpc-29_5.png](https://cdn.document360.io/f2d93c92-8957-408f-94df-b9b370f76a32/Images/Documentation/hadoop-vpc-29_5.png){height="" width="80%"}
2. Cloud Hadoop (VPC) 엣지 노드에 ssh로 접속해 주십시오. 엣지 노드에 접속하는 방법은 [SSH로 클러스터 노드 접속](/docs/hadoop-chadoop-3-2-vpc)를 참고해 주십시오.
3. 아래 명령어를 수행해 Custom Alerts 파일을 **/var/lib/ambari-server/resources/scripts** 경로에 생성해 주십시오. 이 가이드에서는 SENS 서비스에 메시지 전송 요청을 보내는 API를 활용합니다. SENS 서비스 API에 대한 설명은 [SMS API](https://api.ncloud-docs.com/docs/sens-sms-send) 가이드를 참고해 주십시오. Ncloud API Signature 생성에 대한 설명은 [Ncloud API](https://api-gov.ncloud-docs.com/docs/common-ncpapi-ncpapi#시그니처생성) 가이드를 참고해 주십시오.
```bash
sudo vi /var/lib/ambari-server/resources/scripts/alert.py
```
```python
#!/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.gov-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에서 발급받은 Secret Key}
    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()
```
4. 아래 명령어를 수행해 Ambari alerts에 대한 로그를 기록할 파일을 **/var/log/ambari-server/** 경로에 생성해 주십시오.
```bash
sudo vi /var/log/ambari-server/custom_notification.log
```
5. 아래 명령어를 수행해 **alert.py**와 **custom_notification.log** 파일에 대한 권한을 설정해 주십시오.
```bash
sudo chmod -R 700 /var/lib/ambari-server/resources/scripts/alert.py
sudo chmod -R 766 /var/log/ambari-server/custom_notification.log
```
6. 아래 명령어를 수행해 **ambari.properties** 파일에 Alert Script 파일의 경로를 추가해 주십시오.
```bash
sudo vi /etc/ambari-server/conf/ambari.properties
```
```Properties
notification.dispatch.alert.script=/var/lib/ambari-server/resources/scripts/alert.py
```
7. 아래 명령어를 수행해 **ambari-server**를 재시작해 주십시오.
```bash
sudo ambari-server restart
```
8. SENS 서비스 콘솔에 접속해 메시지 전송이 정상적으로 처리되었는지 확인해 주십시오.
![hadoop-vpc-29_7_ko.png](https://cdn.document360.io/f2d93c92-8957-408f-94df-b9b370f76a32/Images/Documentation/hadoop-vpc-29_7_ko.png)

![hadoop-vpc-29_6_ko.png](https://cdn.document360.io/f2d93c92-8957-408f-94df-b9b370f76a32/Images/Documentation/hadoop-vpc-29_6_ko.png)
