참고:
- 이 사용지침서에서는 Oracle Cloud에 접근해야 합니다. 무료 계정에 등록하려면 Oracle Cloud Infrastructure 무료 계층 시작하기를 참조하십시오.
- Oracle Cloud Infrastructure 인증서, 테넌시 및 구획에 대한 예제 값이 사용됩니다. 랩을 완료한 후에는 이러한 값을 클라우드 환경과 관련된 값으로 대체하십시오.
OCI 경보를 Syniverse SMS API와 통합
소개
이 자습서에서는 CPU 활용률을 기반으로 경보를 생성하고 정의된 임계값에 도달할 때 SMS 경보를 전송하도록 구문 분석을 구성합니다.
제공한 솔루션은 ONS(Oracle Notifications Service)를 사용하여 Syniverse SMS API를 호출할 수 있는 함수에 이벤트 및 알람 통지를 전달하고 SMS 메시지를 전송하는 기능을 제공합니다. 모든 것이 매개변수화되고 오브젝트 저장소도 포함된 프로덕션 지원 솔루션을 구축합니다. 여기서는 SMS 및 Oracle Vault를 저장하여 Syniverse API 자격 증명을 저장하는 전화 번호를 저장했습니다.
하나의 토픽으로 ONS를 생성하여 Oracle 기능을 호출하도록 통지 경보를 수신하고 해당 항목에 대한 하나의 가입을 수행합니다. 모니터링 경보를 구성합니다. 예를 들어, CPU 활용률이 70%를 초과할 때마다 Oracle 함수가 ONS를 트리거하여 Syniverse 끝점을 호출하고 SMS를 전송합니다.
다음 다이어그램은 이 작업의 작동 방식을 보여줍니다.

Syniverse 계정 및 API 키 생성
-
동기화 개발자 커뮤니티로 이동하여 계정을 만듭니다.
-
Syniverse 계정에 사인인하고 애플리케이션 메뉴로 이동한 다음 새로 생성을 누릅니다.
-
다음을 입력합니다.
- 애플리케이션 이름: oci
- 설명: OCI 경보 또는 OCI 로그가 포함된 실시간 SMS
- 계정: 초기 계정을 선택합니다.
-
애플리케이션을 생성한 후 애플리케이션 이름을 누르고 인증 키를 확장하여 API 세부정보를 확인합니다. 이 정보는 Oracle 함수 및 Vault에 사용됩니다.
자세한 내용은 여기를 확인하십시오.
OCI 구획 생성
-
OCI 콘솔에 관리자로 사인인하고 왼쪽 맨 위에 있는 메뉴에서 ID를 선택한 다음 구획을 선택합니다.
-
구획 생성을 누르고 다음 예를 사용하여 구획을 생성합니다.
- 이름: syniverse_compartment
- 상위 구획: 구획을 선택합니다. 기존 구획의 하위로 만들려면 관련 상위 구획을 선택하고, 그렇지 않으면 기본 루트 컨테이너를 수락합니다.
Oracle Vault 생성
-
왼쪽 상단 모서리에 있는 메뉴에서 보안을 선택하고 저장소를 선택합니다.
-
만든 syniverse_compartment를 선택합니다.
-
저장소 생성을 누르고 syniverse_api_credentials 이름으로 저장소를 생성합니다.
-
저장소를 선택하고 키 생성을 누르고 syniverse_token name으로 키를 생성합니다.
-
왼쪽 탐색 창의 리소스 아래에서 보안 링크를 누릅니다.
-
암호 생성을 누르고 다음 예를 사용합니다.
- 이름: secret_token
- 암호화 키: 이전에 생성한 syniverse_token을 선택합니다.
- 보안 내용: Syniverse에서 액세스 토큰을 추가해야 합니다.
-
암호 my-secret을 누르고 암호 OCID를 복사하고 func.yaml 파일의 값을 바꿉니다.
Oracle Vault에 대한 동적 그룹을 생성합니다.
-
왼쪽 상단 모서리에 있는 메뉴에서 ID를 선택한 다음 동적 그룹을 선택합니다.
-
동적 그룹 생성을 누르고 다음 예를 사용합니다.
- 이름: 합성 그룹
- 규칙: 모든 {instance.compartment.id = '
'}
버킷 생성 및 오브젝트 스토리지에 파일 업로드
-
버킷을 생성합니다.
-
왼쪽 상단 모서리에 있는 메뉴에서 코어 인프라를 선택한 다음 오브젝트 스토리지를 선택합니다.
-
생성한 syniverse_compartment 구획을 선택합니다.
-
버킷 생성을 누르고 syniverse_phone_target_list 이름으로 버킷을 생성합니다.
-
-
전화 번호로 파일을 만들고 업로드합니다. 이 함수에는 SMS를 보낼 수신자 전화가 있는 파일을 읽으므로 객체 저장소 종속성이 있습니다.
-
numbers.txt라는 로컬 파일을 생성하고 사용 중인 사례에 사용할 전화 번호를 추가합니다. 파일은 공백 없이 쉼표로 구분해야 합니다.
-
Object Storage 세부 정보 화면에서 객체 업로드를 누르고 업로드할 numbers.txt 파일을 선택합니다. 예를 들어, numeric.txt 파일에 다음과 같은 내용이 포함될 수 있습니다.
+3530871231234, +35308712312345선택적으로 정책을 추가하여 이 버킷 또는 파일에 대한 액세스를 몇 명에게 제한할 수 있습니다.
-
-
Oracle Function 읽기 객체 스토리지에 대한 동적 그룹을 생성합니다.
-
왼쪽 상단 모서리에 있는 메뉴에서 ID를 선택한 다음 동적 그룹을 선택합니다.
-
동적 그룹 생성을 누르고 다음 예를 사용합니다.
- 이름: fn-obj-store-group
- 규칙: ALL {resource.type = 'fnfunc', resource.compartment.id = '
'}
-
-
이 동적 그룹에 대한 정책을 생성합니다.
-
왼쪽 맨 위에 있는 메뉴에서 ID를 선택한 다음 정책을 선택합니다.
-
정책 생성을 누르고 다음 예를 사용합니다.
-
이름: fn-obj-store-list-policy
-
문: Policy Builder에서 Cutmomize(고급)를 누릅니다.
allow dynamic-group fn-obj-store-list to manage all-resources in compartment my-compartment
-
-
VCN(가상 클라우드 네트워크) 생성
-
왼쪽 맨 위에 있는 메뉴에서 코어 인프라를 선택하고 네트워킹을 선택한 다음 가상 클라우드 네트워크를 선택합니다.
-
생성한 syniverse_compartment 구획을 선택합니다.
-
VCN 마법사 시작을 누르고 인터넷 접속이 있는 VCN을 선택하고 VCN 마법사 시작을 누릅니다.
-
VCN 이름을 추가하고 모든 기본값을 유지 관리합니다.
-
VCN을 생성하려면 다음 및 확인을 누릅니다.
Oracle 함수 생성
-
왼쪽 상단 모서리에 있는 메뉴에서 개발자 서비스를 선택한 다음 함수를 선택합니다.
-
생성한 syniverse_compartment 구획을 선택합니다.
-
애플리케이션 생성을 누르고 syniverse_notification 이름으로 애플리케이션을 생성합니다. 생성한 구획, VCN 및 서브넷을 선택합니다.
-
Cloud Shell을 실행합니다.
-
지역의 컨텍스트 사용:
fn list contextfn list context fn use context us-phoenix-1 -
함수의 구획 ID로 컨텍스트 업데이트:
fn update context oracle.compartment-id <**compartment-id**> -
사용할 레지스트리의 위치로 컨텍스트를 업데이트합니다.
fn update context registry phx.ocir.io/<tenancy_name>/[YOUR-OCIR-REPO]phx를 세 자리 지역 코드로 바꿉니다.
-
인증 토큰 생성을 누릅니다.
비밀번호로 인증 토큰을 사용하여 레지스트리에 사인인합니다.
docker login phx.ocir.io <-- Replace phx with the three-digit region code다음 정보를 묻는 메시지가 표시됩니다.
- 사용자 이름: tenancyname/username
- 비밀번호: 비밀번호 생성
주: Oracle Identity Cloud Service를 사용하는 경우 사용자 이름은 tenancyname/oracleidentitycloudservice/username입니다.
-
{\f2732 'hello-world' }boilerplate }함수를 생성합니다.
fn init --runtime python syniverse이 기능은 간단한 fn python 예제로 폴더 "syniverse" 을 생성합니다 .
파일의 내용을 아래 코드로 바꿉니다.
-
다음 코드 조각에 표시된 대로 필요한 Python 모듈을 가져옵니다.
import io import os import oci import json import requests import logging import datetime import base64 from fdk import response -
alart 데이터의 구문을 분석하고 Syniverse API를 호출하여 SMS를 전송하도록 함수를 정의합니다.
if "body" in log: body = log.get("body") else: body = "" if "timestampEpochMillis" in log: time_in_millis = log.get("timestampEpochMillis") / 1000.0 dt = datetime.datetime.fromtimestamp(time_in_millis).strftime('%Y-%m-%d %H:%M') body = body + "\ntime " + dt else: body = body + "" -
필요한 페이로드를 사용하여 Syniverse API를 호출하십시오.
secret_token = os.environ['SYNIVERSE_TOKEN'] response_token = read_secret_value(secret_client, secret_token) response_host = os.environ['SYNIVERSE_HOST'] response_channel = os.environ['SYNIVERSE_CHANNEL'] syniversehost = response_host syniversetoken = "Bearer " + response_token syniversechannel = "channel:" + response_channel payload = {} payload.update({"from":syniversechannel}) payload.update({"to":phone}) payload.update({"body":body})구성 요소에는 Syniverse 구성, Syniverse 끝점 URL 및 인증 토큰과 함께 객체 저장소 구성, 네임스페이스, 버킷 이름 및 파일 이름이 포함되며, 3단계에서 저장소에 저장한 인증을 위한 토큰이 포함됩니다.
func.yaml
schema_version: 20180708 name: syniverse version: 0.0.335 runtime: python entrypoint: /python/bin/fdk /function/func.py handler memory: 1024 timeout: 120 config: SYNIVERSE_TOKEN: <i><paste OCID secret_token here></i> SYNIVERSE_HOST: https://api.syniverse.com/scg-external-api/api/v1/messaging/message_requests SYNIVERSE_CHANNEL: <Syniverse API channel> SYNIVERSE_NAMESPACE: <OCI tenancy name> SYNIVERSE_BUCKET_NAME: synivese_phone SYNIVERSE_OBJECT_NAME: numbers.txtrequirements.txt
fdk requests oci통지 샘플 json
{"dedupeKey":"8303d9fb-e3b8-4d49-a888-64bef88f3dbd","title":"syniverse","body":"High CPU usage alert in \\"syniverse\\" instance","type":"OK_TO_FIRING","severity":"CRITICAL","timestampEpochMillis":1605622680000,"alarmMetaData":[{"id":"<i><paste OCID.alarm.oc1.phx.xxxxxxxxxxxxxxxxxxx></i>","status":"FIRING","severity":"CRITICAL","query":"CpuUtilization[1m]{resourceDisplayName = \\"instance-syniverse\\"}.max() > 70","totalMetricsFiring":1,"dimensions":[{"instancePoolId":"Default","resourceDisplayName":"instance-syniverse","faultDomain":"FAULT-DOMAIN-2","resourceId":"*<paste OCID here>*","availabilityDomain":"YVsm:PHX-AD-1","imageId":"<i><paste ocid1.image.oc1.phx.yyyyyyyyyyyyyyy></i>","region":"us-phoenix-1","shape":"VM.Standard.E3.Flex"}]}],"version":1.0}Syniverse API에 대한 자세한 내용은 여기서 확인할 수 있습니다.
-
-
앱을 생성합니다.
fn create app syniverse --annotation oracle.com/oci/subnetIds= '["ocid1.subnet.oc1.phx.aaaaxxxxxxxxxxx"]'서브넷 OCID에 대한 subnetIds를 변경합니다.
-
함수 배치:
fn -v deploy --app syniverse -
Policy for Oracle 함수를 생성합니다.
-
왼쪽 맨 위에 있는 메뉴에서 ID를 선택한 다음 정책을 선택합니다.
-
정책 생성을 누르고 다음 예를 사용합니다.
- 이름: oracle_funcgion_policy
- 문: Policy Builder에서 Cutmomize(고급)를 누릅니다.
allow service FAAS to use virtual-network-family in tenancy allow service FAAS to read repos in tenancy
-
컴퓨트 인스턴스 생성
-
왼쪽 상단 모서리에 있는 메뉴에서 컴퓨트를 선택한 다음 인스턴스를 선택합니다.
-
인스턴스 생성을 누르고 다음 예를 사용합니다.
- 이름: instance-syniverse
- 이미지: 기본 Oracle Linux 7.8을 그대로 사용하거나 Oracle Linux 6.10을 선택합니다.
- 모양 변경: 구성을 선택합니다.
- 네트워킹 구성: 생성한 VCN, 서브넷 구획 및 서브넷을 선택합니다.
- SSH 키 추가: ssh Rsa 공용 키를 추가합니다.
Oracle Notification Service에 대한 항목 및 가입 생성
-
왼쪽 상단 모서리에 있는 메뉴에서 애플리케이션 통합을 선택한 다음 통지를 선택합니다.
-
항목 생성을 누르고 Syniverse_SNS_Notification 이름의 항목을 생성합니다.
-
항목을 선택하고 가입 생성을 누르고 다음 예를 사용합니다.
- 프로토콜: 함수
- 기능 구획: 생성한 syniverse_compartment 구획을 선택합니다.
- 함수 애플리케이션: syniverse_notification
- 함수: 합성기
알람 정의 생성
-
왼쪽 상단 모서리에 있는 메뉴에서 모니터링을 선택한 다음 알람 정의를 선택합니다.
-
알람 생성을 누르고 다음 예를 사용합니다.
- Alarm Name: 70% CPU 활용률
- 알람 심각도: 위기
- 알람 본문: OCI 알람: 합성 CpuUtilization: 70
-
척도 설명에서 syniverse_compartment 구획을 선택하고 척도 네임스페이스를 oci_computeagent로, 척도 이름을 CpuUtilization로, 간격을 1m으로, 통계를 Max로 선택합니다.
-
트리거 규칙에서 70보다 큰 값을 선택합니다.
-
통지에서 대상 서비스를 통지 서비스로 선택하고 syniverse_compartment 구획을 선택한 다음 항목을 Syniverse_SMS_Notification로 선택합니다.
컴퓨트 인스턴스에서 스트레스 테스트를 수행하려면 스트레스 도구를 설치합니다.
-
컴퓨트 인스턴스에 SSH 사용:
ssh -i ~/path/for/ssh-key.key opc@your_machine_ip -
stress를 설치합니다.
sudo yum install stress -
명령을 실행하여 응력을 시작합니다. 이렇게 하면 엔드 투 엔드 데모 흐름이 시작됩니다.
stress --cpu 20 --io 4 --vm 4 --vm-bytes 1024M --timeout 60s
문제 해결
이 섹션에서는 간단한 전자 메일 경고를 사용하여 솔루션의 상태를 모니터하는 방법을 보여줍니다.
기능
함수에 대한 자세한 내용은 기술 문서를 참조하십시오.
통지 서비스에 대한 항목 및 가입 생성
-
왼쪽 상단 모서리에 있는 메뉴에서 애플리케이션 통합을 선택한 다음 통지를 선택합니다.
-
항목 생성을 누르고 my_function_status 이름의 항목을 생성합니다.
-
항목을 선택하고 가입 생성을 누르고 다음 예를 사용합니다.
- 프로토콜: 전자메일을 보내고 전자메일을 통해 구독을 추가합니다.
-
가입이 "보류 중" 상태로 생성됩니다. 확인 전자 메일이 수신되며 전자 메일의 링크를 눌러서 전자 메일 주소를 확인해야 합니다.
측정항목 확인 및 측정항목에서 알람 정의 생성
-
왼쪽 상단 모서리에 있는 메뉴에서 개발자 서비스를 선택한 다음 함수를 선택합니다.
-
모니터할 응용 프로그램 및 함수를 선택합니다.
-
측정항목 페이지에서 "함수 오류" 차트로 이동하여 [옵션]을 누르고 이 질의에 대해 알람 생성
-
이름을 추가하고 통지에서 대상 서비스를 통지 서비스로 선택하고 your_compartment 구획을 선택한 다음 토픽을 my_function_status로 선택합니다.
통지
이 섹션에서는 간단한 전자 메일 경고를 사용하여 ONS(Oracle Notification Service)의 상태를 모니터하는 방법을 보여줍니다.
자세한 내용은 기술 문서를 참조하십시오.
통지 서비스에 대한 항목 및 가입 생성
-
왼쪽 상단 모서리에 있는 메뉴에서 애플리케이션 통합을 선택한 다음 통지를 선택합니다.
-
항목 생성을 누르고 my_ons_status 이름의 항목을 생성합니다.
-
항목을 선택하고 가입 생성을 누르고 다음 예를 사용합니다.
- 프로토콜: 전자메일을 보내고 전자메일을 통해 구독을 추가합니다.
-
가입이 "보류 중" 상태로 생성됩니다. 확인 전자 메일이 수신되며 전자 메일의 링크를 눌러서 전자 메일 주소를 확인해야 합니다.
측정항목 확인 및 측정항목에서 알람 정의 생성
-
왼쪽 상단 모서리에 있는 메뉴에서 애플리케이션 통합을 선택한 다음 통지를 선택합니다.
-
모니터할 통지를 선택하고 왼쪽 탐색 창의 리소스 아래에서 측정 단위 링크를 누릅니다.
-
알람을 추가할 차트(예: "실패한 메시지 수")에서 [옵션]을 누르고 이 질의에 대한 알람 생성
-
이름을 추가하고 통지에서 대상 서비스를 통지 서비스로 선택하고 your_compartment 구획을 선택한 다음 토픽을 my_ons_status로 선택합니다.
결론
이 사용지침서에서는 Oracle Cloud Infrastructure 및 Syniverse 고객이 로우오버헤드로 확장성이 뛰어난 솔루션을 구성하여 Oracle Functions를 통해 Oracle Cloud Infrastructure 알림에서 SMS를 생성 및 전송하는 방법을 보여 줍니다.
감사의 글
작성자 - 이고르 아라가오 데 소우자
추가 학습 자원
docs.oracle.com/learn에서 다른 실습을 찾아보거나 Oracle Learning YouTube channel에서 무료 학습 콘텐츠에 액세스할 수 있습니다. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer로 변경하십시오.
제품 설명서는 Oracle Help Center를 참조하십시오.
Integrate OCI alerts with Syniverse SMS API
F51371-01
December 2021
Copyright © 2021, Oracle and/or its affiliates.