SMS 이벤트 설정
OPENMARU APM 이벤트 설정하기
OPENMARU APM 에 접속하여 설정 - 서버 관리 - 서버 설정 - 이벤트 메뉴를 선택하면 SMS 이벤트 설정을 할 수 있다.

SMS 이벤트 설정 항목

| 항목 | 설명 |
|---|---|
| ① 사용여부 | 이벤트를 SMS로 전송할 것인지를 TRUE 또는 FALSE 로 설정한다. ex) TRUE |
| ② 요약 정보만 전송 여부 | 이벤트를 모아서 전송 (FALSE: 단건 전송) |
| ③ 사용자 그룹전송 여부 | 사용자별로 그룹하여 전송 (DBMS Insert 방식은 사용 불가) |
| ④ 기본 Info 로그 전송 여부 | 경고정책에 없는 일반 정보 이벤트 발송 여부 |
| ⑤ 기본 Info 로그 받을 사용자 | 경고정책에 없는 일반 정보 이벤트를 받을 사용자 |
| ⑥ 메시지 레벨 | ALL, INFO, WARN, FORECAST, CRITICAL ex) ALL로 선택 후 "Event Processor" application.properties 설정에서 필터링 또는 반대로 적절히 활용 |
각 경고정책에서 "Alerts via"에서 "Event Processor" 추가 선택

khan-event-processor 설치
khan-event-processor-5.1.0-2.6-dist.zip
drwxr-x--- 4 khanapm khan 137 Mar 15 15:57 config
-rwxr-xr-x 1 khanapm khan 671 Jan 4 12:57 kill.sh
drwxr-x--- 2 khanapm khan 44 Mar 15 15:57 lib
drwxr-x--- 2 khanapm khan 21 Mar 15 15:57 logs
-rwxr-xr-x 1 khanapm khan 594 Jan 4 12:57 nohup.sh
-rwxr-xr-x 1 khanapm khan 1057 Jan 4 12:57 start.sh
-rwxr-xr-x 1 khanapm khan 633 Jan 4 12:57 status.sh
-rwxr-xr-x 1 khanapm khan 599 Jan 4 12:57 tail.sh
khan-event-processor설정
config/application.properties
#
# Database Connection
#
*jdbc.driverClass=org.mariadb.jdbc.Driver*
*jdbc.url=jdbc:mariadb://localhost:3306/sms*
*jdbc.user.name=sms*
*jdbc.user.password=sms01*
*#*
*#jdbc.driverClass=oracle.jdbc.driver.OracleDriver*
*#jdbc.url=jdbc:oracle:thin:@192.168.23.28:1521:XE*
*#jdbc.user.name=opennaru*
*#jdbc.user.password=opennaru*
#
# Rabbit MQ Connection
#
rabbitmq.host=localhost
rabbitmq.port=5672
rabbitmq.username=khan
rabbitmq.password=opennaru12#$
#
# Ignore SMS Event Message is older than minutes
#
sms.ignoreMinutes=5
#
# Crop SMS Message
#
sms.message.length=200
*# #*
*## ALL, INFO, WARN, FORECAST, CRITICAL*
*# ALL : Send ALL Messages to SMS DB*
*# Comma-delimited send level definitions*
*# ex) WARN, CRITICAL - send WARN and CRITICAL only*
*sms.sendLevels=CRITICAL*
application.properties 파일의 SMS와 관련된 설정은 다음과 같다.
| 구분 | 설정값 | 설명 |
|---|---|---|
| sms.ignoreMinutes | 5 | 지정된 시간 이전 데이터는 무시한다. |
| sms.message.length | 200 | 메시지 길이를 제한한다. |
| sms.sendLevels | CRITICAL | 보낼 메시지 지정 (콤마를 통해서 지정) |
config/spring-context.xml
{/* SMS Message to Database */}
<route id="smsEventToDatabase" autoStartup="true">
<from uri="direct:sendSMSDB"/>
<transacted/>
{/* crop message */}
<setHeader headerName="messageLimit">
<simple resultType="java.lang.Integer">\{\{sms.message.length}}</simple>
</setHeader>
{/* make message UID String 20 byte and crop sms message with sms.message.length in application.properties */}
<bean ref="messageContentProcessor"/>
{/*<bean ref="inspectProcessor"/>*/}
<bean ref="velocityProcessor"/>
<doTry>
*{/* For Oracle DB Insert */}*
*<to uri="mybatis:SmsOracleDB.insert?statementType=Insert"/>*
*{/* For Maria DB Insert */}*
*{/*<to uri="mybatis:SmsMariaDB.insert?statementType=Insert"/>*/}*
*{/* For REST API CALL */}*
*{/*<to uri="direct:sendSMSHttp"/>*/}*
<doCatch>
<exception>java.sql.SQLException</exception>
<bean ref="counterProcessor" method="handleException"/>
<rollback/>
</doCatch>
</doTry>
<onCompletion>
<bean ref="counterProcessor" method="report"/>
<bean ref="timeWatch" method="stop"/>
</onCompletion>
</route>
{/* SMS Message to HTTP */}
<route id="smsEventToHttp" autoStartup="true">
<from uri="direct:sendSMSHttp"/>
...
<doTry>
<to uri="velocity:template/HTTP-POST-BODY.vm?contentCache=true"/>
*{/* REST API URL 설정 */}*
<to uri="http://localhost/send"/>
...
</camelContext>
</beans>
DBMS Query 작성
DBMS 종류에 따라 파일 선택
config/mappers/SMS-MariaDB.xml
config/mappers/SMS-OracleDB.xml
아래 DBMS Table은 예제이며 고객사 상황에 맞게 아래 변수를 활용하여 작성한다.
<insert id="insert" parameterType="com.opennaru.khan.monitoring.app.event.SmsEvent">
<![CDATA[
INSERT INTO
SMS_SKTELINK
(
CMP_MSG_ID,
CMP_USR_ID,
ODR_FG,
SMS_GB,
USED_CD,
MSG_GB,
WRT_DTTM,
SND_DTTM,
SND_PHN_ID,
RCV_PHN_ID,
CALLBACK,
SND_MSG,
CMP_SND_DTTM,
CMP_RCV_DTTM,
REG_SND_DTTM,
REG_RCV_DTTM,
EXPIRE_VAL,
SMS_ST,
RSLT_VAL,
RSRVD_ID,
RSRVD_WD
)
VALUES(
#{msgId},
'00000',
'1',
'1',
'00',
'A',
TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS'),
TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS'),
'02-1234-1234',
#{phoneNumber},
'02-1234-1234',
#{message},
NULL,
NULL,
NULL,
NULL,
0,
'0',
'99',
NULL,
NULL
)
]]>
</insert>
DBMS 방식 활용 가능 변수
| 구분 | 설명 |
|---|---|
#{msgId} | yyyyMMddHHmmss + “9” + 00001(순번) (20 자리) |
#{phoneNumber} | 받는 사람 번호 |
#{email} | 이메일 주소 |
#{subject} | 메시지 제목 |
#{message} | 메시지 내용(TEXT) |
#{htmlMessage} | 메시지 내용(HTML) |
REST API Data 설정(JSON)
{
"subject" : "${sms.subject}",
"contents" : "${sms.message}",
"html" : "${sms.htmlMessage}",
"phoneNumber" : "${sms.phoneNumber}",
"email" : "${sms.email}",
"sender" :
{
"emailAddress" : "knoxportal@samsung.com"
},
"smsRecipients" :
[
#foreach( $phone in $sms.phoneNumbers )
{
"address" : "${phone}"
}#if( $foreach.hasNext ), #end
#end
],
"mailRecipients" :
[
#foreach( $email in $sms.emails )
{
"address" : "${email}"
}#if( $foreach.hasNext ), #end
#end
]
}
REST API 방식 활용 가능 변수
| 구분 | 설명 |
|---|---|
${sms.msgId} | yyyyMMddHHmmss + “9” + 00001(순번) (20 자리) |
${sms.phoneNumber} | 받는 사람 번호 |
${sms.phoneNumbers} | 받는 사람 번호 목록, 그룹 전송 여부(Gather users) true : 사용자 배열 형태로 전달 (phoneNumber=null) false : 사용자 단위로 전달 |
${sms.subject} | 메시지 제목 |
${sms.message} | 메시지 내용(TEXT) |
${sms.htmlMessage} | 메시지 내용(HTML) |
${sms.eventKey.year} | 연도 yyyy (4자리) |
${sms.eventKey.month} | 월 MM (2자리) |
${sms.eventKey.date} | 일 dd (2자리) |
${sms.eventKey.hour} | 시간 HH (2자리) |
${sms.eventKey.minute} | 분 mm (2자리) |
${sms.eventKey.second} | 초 ss (2자리) |
${sms.eventKey.count} | 순번 (5자리) |
${sms.eventData.created} |