본문으로 건너뛰기

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.ignoreMinutes5지정된 시간 이전 데이터는 무시한다.
sms.message.length200메시지 길이를 제한한다.
sms.sendLevelsCRITICAL보낼 메시지 지정 (콤마를 통해서 지정)

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}발생 시간 (TimeMillis)
${sms.eventData.level}이벤트 레벨
${sms.eventData.agentType}에이전트 종류
${sms.eventData.hostname}호스트 이름
${sms.eventData.ipAddress}아이피
${sms.eventData.instanceId}인스턴스 이름
${sms.eventData.readableMessage}메시지 내용 (시간 및 에이전트 정보 제외)
${sms.eventData.readableWhere}에이전트 정보

시작 및 중지

    ./start.sh
./tail.sh

테스트 방법

이벤트 -> 이벤트 목록 -> "심각 이벤트 발생테스트"로 테스트할 수 있습니다.

단, 경고정책 설정 여부와 관계 없이 "admin" 계정에만 발송됨