Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

개요

CloudHub Portal 알람 엔드포인트는 CloudHub Portal 사용자 인터페이스를 사용하여 알람을 전송하는 Kapacitor 기반의 이벤트 핸들러를 만들 수 있습니다. CloudHub Portal을 사용하여 Application뿐만 아니라 특정 URL에도 알람 메시지를 보낼 수 있습니다.

이 가이드는 CloudHub Portal 알람 엔드포인트 구성을 위한 단계별 지침을 제공합니다.

CloudHub Portal에서 지원하는 Kapacitor 이벤트 핸들러

CloudHub Portal은 InfluxData의 데이터 처리 플랫폼과 Kapacitor를 통합하여 이벤트 핸들러에 알람 메시지를 전송합니다. CloudHub Portal는 다음 이벤트 핸들러를 지원합니다.

...

CloudHub Portal에서 Kapacitor 이벤트 핸들러를 구성하려면 Kapacitor를 설치하고 이를 CloudHub Portal에 연결합니다. Kapacitor 구성 페이지에는 이벤트 핸들러 구성 옵션이 포함됩니다.

알람 엔드포인트 구성

CloudHub Portal의 Configure Kapacitor 페이지에서는 알람 엔드포인트 구성이 나타납니다. 구성에 액세스하려면 연결된 Kapacitor 인스턴스가 있어야 합니다. 자세한 내용은 Kapacitor 설치 지침 및 CloudHub Portal에 Kapacitor 인스턴스 연결방법을 참조하세요.

알람 엔드포인트 구성 섹션의 구성 옵션이 모두 포함되지 않는 점을 유의하세요. 일부 이벤트 핸들러는 사용자가 알람 규칙에 의해 이벤트 핸들러 구성을 사용자 정의할 수 있도록 합니다. 예를 들어 CloudHub Portal에서 Slack Integration을 통해 사용자는 알람 엔드포인트 구성 섹션에서 Default Channel과 개별 알람 규칙 설정으로 다른 Channel을 지정할 수 있습니다.

...

Exec

exec 이벤트 핸들러는 외부 프로그램을 실행합니다. 이벤트 데이터는 STDIN을 통해 프로세스에 전달됩니다.

Expand
titleexec 이벤트 핸들러를 Cloud Portal이 아닌 CLI 환경에서 kapacitor 명령어를 통해 세팅해야 할 경우 참고하세요.

옵션

다음은 exec 이벤트 핸들러 옵션은 핸들러 파일 또는 TICKscript에서 .exec()을 설정할 때 사용할 수 있습니다.

Name

Type

Description

prog

string

실행할 프로그램 경로

args

list of string

인자로 사용할 프로그램들의 목록

예: 핸들러 파일

Code Block
id: handler-id
topic: topic-name
kind: exec
options:
  prog: /path/to/executable
  args: 'executable arguments'

예: TICKscript

Code Block
|alert()
  // ...
  .exec('/path/to/executable', 'executable arguments')

exec 이벤트 핸들러 사용하기

exec  이벤트 핸들러는 TICKscripts나 핸들러 파일을 활용하여, 알람 로직에 기반한 외부 프로그램을 실행할 수 있습니다.

메모: Exec 프로그램은 일반적으로 기본 시스템 $PATH에만 액세스할 수 있는 kapacitor 사용자로 실행됩니다. $PATH에 포함되지 않은 실행 파일을 사용하는 경우 실행 파일의 절대 경로를 전달하세요.

TICKscript에서 외부 프로그램 실행하기

다음 TICKscript는 .exec() 이벤트 핸들러를 사용하여 유휴 CPU 사용량이 10% 미만으로 떨어질 때마다 sound-the-alarm.py Python 스크립트를 실행합니다.

exec-cpu-alert.tick

Code Block
stream
  |from()
    .measurement('cpu')
  |alert()
    .crit(lambda: "usage_idle" < 10)
    .exec('/usr/bin/python', 'sound-the-alarm.py')

핸들러를 정의하여 외부 프로그램 실행하기

다음 설정은 "Hey, check your CPU"라는 메시지와 함께 cpu 항목에 알람을 보냅니다. cpu 항목을 구독하고 알람 메시지가 전송될 때마다 sound-the-alarm.py Python 스크립트를 실행하는 실행자가 추가됩니다.

항목에 알림 메시지를 전송하는 TICKscript를 생성합니다. 아래의 TICKscript는 유휴 CPU 사용량이 10% 미만으로 떨어질 때마다 cpu 항목에 알람 메시지를 전송합니다.

cpu_alert.tick

Code Block
stream
  |from()
    .measurement('cpu')
  |alert()
    .crit(lambda: "usage_idle" < 10)
    .message('Hey, check your CPU')
    .topic('cpu')

TICKscript 추가 및 실행하기:

Code Block
kapacitor define cpu_alert -tick cpu_alert.tick
kapacitor enable cpu_alert

cpu 항목을 구독하고 exec 이벤트 핸들러를 사용하여 sound-the-alarm.py Python 스크립트를 실행하는 핸들러 파일을 생성합니다.

exec_cpu_handler.yaml

Code Block
id: exec-cpu-alert
topic: cpu
kind: exec
options:
  prog: '/usr/bin/python'
  args: 'sound-the-alarm.py'

핸들러 추가하기:

Code Block
kapacitor define-topic-handler exec_cpu_handler.yaml

외부 프로그램으로 사용할 python script 작성

Code Block
$ vim alarm.py

--- vim ---
import os.path
from datetime import datetime

file = '/Users/choedaebeom/alarm-log.txt'

if os.path.isfile(file):
 fs = open('/Users/choedaebeom/alarm-log.txt','a')
else:
 fs = open('/Users/choedaebeom/alarm-log.txt','w')

now = datetime.now()
fs.write(str(now)+'\n')
fs.close()

:wq

exec 이벤트 핸들러 사용하기

  1. 왼쪽 내비게이션에서 Alert → Alert Setting 탭을 클릭하여 페이지를 이동합니다.

  2. 오른쪽 위의 + Build Alert Rule 버튼을 클릭합니다.

  3. 알람 규칙의 이름을 “exec idle cpu usage alert“ 으로 지정하고, Alert Type은 임계치 설정을 위해 Threshold로 지정합니다.

  4. Time Series는 telegraf.autogen → cpu → usage_idle로 설정합니다. Condition은 현재 알람 규칙의 실행 조건을 결정하는 단계입니다. usage_idle이 100% 미만 일 때 이벤트 핸들러가 실행됩니다. (100%는 테스트를 위한 값입니다. 실제 적용 시 상황에 알맞게 사용해야 합니다.)

  5. Condition의 조건에 만족했을 때 실행할 이벤트 핸들러입니다. 이 예제에서는 exec을 선택합니다.

  6. exec 입력창에 외부 프로그램을 실행시킬 프로그램의 경로와 외부 프로그램의 경로를 지정합니다. 구분자는 공백입니다.

    Code Block
    // 외부프로그램 실행시킬 프로그램 + 공백 + 외부프로그램
    /path/to/executable /executable/arguments
    
    // example
    /usr/local/bin/python3.7 /Users/choedaebeom/alarm.py


    Message 입력창에 아래 문구의 입력합니다. exec 이벤트 핸들러는 외부 프로그램(경보음, 경고등) 등을 실행시키기 위함입니다. 따라서 exec 이벤트 핸들러는 Message를 전송하지 않지만, 알람 규칙 내에 혼용되는 이벤트 핸들러들을 위해 입력합니다.

    Code Block
    '{{ .Time }}: CPU idle usage 100%'

  7. 오른쪽 위의 Save Rule 버튼을 클릭하여 알람 규칙을 저장합니다.

  8. exec 이벤트 핸들러가 외부 프로그램을 잘 실행시키는지 확인합니다.

...

HTTP/Post

post 이벤트 핸들러는 JSON 인코딩된 알람 데이터를 HTTP 엔드포인트에 전송합니다.

Expand
titlepost 이벤트 핸들러를 Cloud Portal이 아닌 CLI 환경에서 kapacitor 명령어를 통해 세팅해야 할 경우 참고하세요.

구성

post 이벤트 핸들러의 구성 및 기본 옵션 값은 kapacitor.conf에 설정됩니다. 아래는 예제 구성입니다.

Post Settings in kapacitor.conf

Code Block
[[httppost]]
  endpoint = "example"
  url = "http://example.com/path"
  headers = { Example = "your-key" }
  basic-auth = { username = "my-user", password = "my-pass" }
  alert-template = "{{.Message}}:{{range .Data.Series}}{{.Tags}},{{range .Values}}{{.}}{{end}}{{end}}"
  alert-template-file = "/path/to/template/file"
  row-template = "{{.Name}} host={{index .Tags \"host\"}}{{range .Values}} {{index . "time"}} {{index . "value"}}{{end}}"
  row-template-file = "/path/to/template/file"

endpoint

다수의 항목이 존재할 때 [[httppost] 구성의 식별자 역할을 하는 구성된 HTTP POST 엔드포인트의 이름입니다. 엔드포인트는 식별자일 뿐이며, 그것들은 HTTP POST URL에 추가되지 않습니다.

url

알람 데이터를 전송할 URL

headers

POST 요청에 설정할 추가 헤더 값

basic-auth

POST 요청에 설정할 인증 정보 세트.

alert-template

사용자 정의 HTTP body 구성을 위한 알람 템플릿입니다. 알람 템플릿은 알람 데이터를 사용할 때 post 알림 핸들러에서만 사용됩니다.

alert-template-file

알림 템플릿 파일의 절대 경로입니다.

row-template

사용자 정의 HTTP body 구성을 위한 Row template입니다. Row template은 한 번에 한 행을 사용하기 때문에 httpPost 노드 파이프 라인과 노드가 함께 사용됩니다.

row-template-file

Row template 파일의 절대 경로입니다.

환경 변수를 사용하여 구성 옵션 정의하기

endpointurl 및 headers 구성 옵션은 환경 변수로 정의할 수 있습니다.

Code Block
KAPACITOR_HTTPPOST_0_ENDPOINT = "example"
KAPACITOR_HTTPPOST_0_URL = "http://example.com/path"
KAPACITOR_HTTPPOST_0_HEADERS_Example1 = "header1"
KAPACITOR_HTTPPOST_0_HEADERS_Example2 = "header2"

다중 HTTP POST 엔드포인트 구성 및 사용

kapacitor.conf는 여러 [httppost] 섹션을 지원합니다. 각 구성의 endpoint 구성 옵션은 해당 특정 구성에 대해 고유한 식별자로 사용됩니다. Post Alert 핸들러와 함께 특정 [httppost] 구성을 사용하려면 Post 알람 핸들러 파일 또는 TICKscript에 엔드포인트를 지정합니다.

kapacitor.conf

Code Block
[[httppost]]
  endpoint = "endpoint1"
  url = "http://example-1.com/path"
  # ...

[[httppost]]
  endpoint = "endpoint2"
  url = "http://example-2.com/path"
  # ...

환경 변수를 사용하여 여러 HTTP POST 엔드포인트 구성을 추가 할 수도 있습니다. 변수 값은 각 변수 키의 숫자를 사용하여 그룹화됩니다.

Code Block
KAPACITOR_HTTPPOST_0_ENDPOINT = "example0"
KAPACITOR_HTTPPOST_0_URL = "http://example-0.com/path"
KAPACITOR_HTTPPOST_0_HEADERS_Example1 = "header1"
KAPACITOR_HTTPPOST_0_HEADERS_Example2 = "header2"

KAPACITOR_HTTPPOST_1_ENDPOINT = "example1"
KAPACITOR_HTTPPOST_1_URL = "http://example-1.com/path"
KAPACITOR_HTTPPOST_1_HEADERS_Example1 = "header1"
KAPACITOR_HTTPPOST_1_HEADERS_Example2 = "header2"

옵션

다음 post 이벤트 핸들러 옵션은 핸들러 파일 또는 TICKscript에서 .post()를 설정할 때 사용할 수 있습니다.

Name

Type

Description

url

string

알람 데이터가 전송될 URL

endpoint

string

사용할 HTTP POST 엔드포인트(kapacitor.conf에서 구성)의 이름. URL 대신 지정할 수 없습니다.

headers

map of string to string

POST 요청에 설정할 추가 헤더 셋

capture‑response

bool

HTTP 상태 코드가 2xx 코드가 아닌 경우 HTTP 응답을 읽고 기록합니다.

timeout

duration

HTTP POST의 timepout

skipSSLVerification

bool

POST 요청에 대한 SSL 확인을 비활성화합니다.

예: 핸들러 파일 - 사전 구성된 엔드포인트 사용

Code Block
id: handler-id
topic: topic-name
kind: post
options:
  # Using the 'example' endpoint configured in the kapacitor.conf
  endpoint: example

예: 핸들러 파일 - post 옵션 정의 “인라인"

Code Block
id: handler-id
topic: topic-name
kind: post
options:
  # Defining post options "inline"
  url: http://example.com/path
  headers:
    'Example1': 'example1'
    'Example2': 'example2'
  capture-response: true
  timeout: 10s
  skipSSLVerification: true

예: TICKscript - 사전 구성된 엔드포인트 사용

Code Block
|alert()
  // ...  
  // Using the 'example' endpoint configured in the kapacitor.conf
  .post()
    .endpoint('example')

예: TICKscript - Post 옵션 "인라인"정의

Code Block
|alert()
  // ...
  // Defining post options "inline"
  .post('https://example.com/path')
    .header('Example1', 'example1')
    .header('Example2', 'example2')
    .captureResponse()
    .timeout(10s)
    .skipSSLVerification()

Post 이벤트 핸들러 사용하기

post 이벤트 핸들러는 TICKscripts 또는 핸들러 파일에서 사용할 수 있습니다. 알람 및 HTTP POST 데이터를 HTTP 엔드포인트에 전송할 수 있습니다. 아래 예는 알람를 다루고 kapacitor.conf에 정의 된 동일한 [[httppost]] 구성을 사용합니다.

kapacitor.conf에서 HTTP POST 세팅

Code Block
[[httppost]]
  endpoint = "api-alert"
  url = "http://mydomain.com/api/alerts"
  headers = { From = "alerts@mydomain.com" }
  alert-template = "{{.Message}}:{{range .Data.Series}}{{.Tags}},{{range .Values}}{{.}}{{end}}{{end}}"

TICKscript에서 Post 알람 보내기

다음 TICKscript는 유휴 CPU 사용량이 10% 미만으로 떨어질 때마다 post() 이벤트 핸들러를 사용하여 “Hey, Check your CPU” 메시지를 전송합니다.

post-cpu-alert.tick

Code Block
stream
  |from()
    .measurement('cpu')
  |alert()
    .crit(lambda: "usage_idle" < 10)
    .message('Hey, check your CPU')
    .post()
      .endpoint('api-alerts')

kapacitor.conf에 정의된 [[httppost]] 설정을 사용하지 않을 경우, post 옵션을 인라인으로 지정할 수 있습니다.

post-cpu-alert.tick

Code Block
stream
  |from()
    .measurement('cpu')
  |alert()
    .crit(lambda: "usage_idle" < 10)
    .message('Hey, check your CPU')
    .post('https://example.com/path')
      .header('Example1', 'example1')
      .header('Example2', 'example2')
      .captureResponse()
      .timeout(10s)
      .skipSSLVerification()

핸들러를 정의하여 Post 알람보내기

다음 설정은“Hey, check your CPU”라는 메시지와 함께 알람을 cpu 항목에 전송합니다. cpu 항목을 구독하고 모든 알람 메시지를 kapacitor.conf에 정의된 URL 및 엔드포인트에 전송하는 Post 이벤트 핸들러가 추가됩니다.

알람 메시지를 cpu 항목에 전송하는 TICKscript를 작성하세요. 아래의 TICKscript는 유휴 CPU 사용량이 10%미만으로 떨어질 때마다 cpu 항목에 알람 메시지를 보냅니다.

cpu_alert.tick

Code Block
stream
  |from()
    .measurement('cpu')
  |alert()
    .crit(lambda: "usage_idle" < 10)
    .message('Hey, check your CPU')
    .topic('cpu')

TICKscript 추가 및 실행하기 :

Code Block
kapacitor define cpu_alert -tick cpu_alert.tick
kapacitor enable cpu_alert

cpu항목에 등록하고 이벤트 핸들러를 사용하여 HTTP 엔드포인트에 알람을 전송하는 핸들러 파일을 작성합니다.

post_cpu_handler.yaml

Code Block
id: post-cpu-alert
topic: cpu
kind: post
options:
  url: 'http://example.com/path'
  headers:
    'From': 'alert@mydomain.com'

핸들러 추가하기:

Code Block
kapacitor define-topic-handler post_cpu_handler.yaml

Post templating

Post 이벤트 핸들러를 사용하면 알람 및 Row template를 사용하여 POST의 컨텐츠 및 구조를 사용자 정의 할 수 있습니다.

Alert templates

Alert template는 사용자 정의 HTTP body를 구성하는 데 사용됩니다. 알람 데이터를 사용할 때 post 알람 관리자와 사용됩니다. 템플릿은 alert-template 구성을 사용하여 kapacitor.conf에 인라인으로 정의되거나 별도의 파일로 정의되며 alert-template-file 구성을 사용하여 참조됩니다.

알람 템플릿은 Golang Template 을 사용하며 다음 필드에 액세스 할 수 있습니다.

Field

Description

.ID

알람의 고유 ID

.Message

알람 메시지

.Details

알람의 세부 사항

.Time

알람 이벤트가 발생한 시간

.Duration

알람 이벤트의 지속 기간

.Level

알람의 레벨 (예 : INFO, WARN 또는 CRITICAL)

.Data

알람을 트리거 한 데이터

.PreviousLevel

알람 이전 수준 (예 : INFO, WARN 또는 CRITICAL)

.Recoverable

알람이 자동 복구 가능한지 여부를 나타냅니다.

Inline alert template

kapacitor.conf

Code Block
[[httppost]]
  endpoint = "example"
  url = "http://example.com/path"
  alert-template = "{{.Message}}:{{range .Data.Series}}{{.Tags}},{{range .Values}}{{.}}{{end}}{{end}}"

Alert template file

kapacitor.conf

Code Block
[[httppost]]
  endpoint = "example"
  url = "http://example.com/path"
  alert-template-file = "/etc/templates/alert.html"

/etc/templates/alert.html

Code Block
{{.Message}}:{{range .Data.Series}}{{.Tags}},{{range .Values}}{{.}}{{end}}{{end}}

Row templates

Row templates는 custom HTTP body를 구성하는 데 사용됩니다. 한 번에 한 행씩 소비하므로 httpPost 핸들러와 함께 사용됩니다. row-template 구성을 사용하여 kapacitor.conf에 인라인으로 정의되거나 별도의 파일로 정의되며 row-template-file구성을 사용하여 참조됩니다.

Row templates은 Golang Template 을 사용하며 다음 필드에 액세스 할 수 있습니다.

Field

Description

.Name

Data stream의 measurement name

.Tags

Data의 tag에 대한 map

.Values

값 목록. 각 지점의 시간에 대한 키와 지점의 다른 모든 필드에 대한 키를 포함하는 맵.

Inline row template

kapacitor.conf

Code Block
[[httppost]]
  endpoint = "example"
  url = "http://example.com/path"
  row-template = '{{.Name}} host={{index .Tags "host"}}{{range .Values}} {{index . "time"}} {{index . "value"}}{{end}}'

Row 템플릿 파일

kapacitor.conf

Code Block
[[httppost]]
  endpoint = "example"
  url = "http://example.com/path"
  row-template-file = "/etc/templates/row.html"

/etc/templates/row.html

Code Block
{{.Name}} host={{index .Tags \"host\"}}{{range .Values}} {{index . "time"}} {{index . "value"}}{{end}}

테스트 서버 만들기 Node.js

  1. http-server 디렉터리 생성 후 진입합니다.

    Code Block
    $ mkdir http-server && cd http-server

  2. 초기 package.json을 설정합니다.

    Code Block
    $ yarn init
    yarn init v1.16.0
    question name (http-server): 
    question version (1.0.0): 
    question description: 
    question entry point (index.js): 
    question repository url: 
    question author: 
    question license (MIT): 
    question private: 
    success Saved package.json

  3. expresss 라이브러리와 body-parser 라이브러리를 의존성 추가하고, package.json을 확인합니다.
    1. 의존성 추가

    Code Block
    $ yarn add express body-parser
    ...
    Done


    2. 의존성 확인

    Code Block
    $ cat package.json 
    {
      "name": "http-server",
      "version": "1.0.0",
      "main": "index.js",
      "license": "MIT",
      "dependencies": {
        "body-parser": "^1.19.0",
        "express": "^4.17.1"
      }
    }

  4. http-server.js 파일 생성 후 작성

    Code Block
    $ vi http-server.js
    
    --- vi ---
    const express = require('express')
    const bodyParser = require('body-parser')
    const app = express()
    
    app.use(bodyParser.json())
    
    app.post('/postAlert', (req, res) => {
      console.log(req.body)
    })
    
    app.listen(3333, () => {
      console.log('server start! http://localhost:3333')
    })
    
                                                                                                                                     
    :wq

    1. vi로 파일 생성하기

    2. 생성된 파일의 코드 작성하기

CloudHub에서 HTTP/Post 이벤트 핸들러 알람 규칙 설정하기

  1. 왼쪽 내비게이션에서 Alert → Alert Setting 탭을 클릭하여 페이지를 이동합니다.

     

  2. 오른쪽 위의 + Build Alert Rule 버튼을 클릭합니다.

     

  3. 알람 규칙의 이름을 “http/post idle cpu usage alert“으로 지정하고, Alert Type은 임계치 설정을 위해 Threshold로 지정합니다.

     

  4. Time Series는 telegraf.autogen → cpu → usage_idle로 설정합니다. Condition은 현재 알람 규칙의 실행 조건을 결정하는 단계입니다. usage_idle이 100% 미만 일 때 이벤트 핸들러가 실행됩니다. (100%는 테스트를 위한 값입니다. 실제 적용 시 상황에 알맞게 사용해야 합니다.)

     

  5. Condition의 조건에 만족했을 때 실행할 이벤트 핸들러입니다. 이 예제에서는 post를 선택합니다.

     

  6. Post 이벤트 핸들러의 HTTP endpoint for POST request 입력란에 http://127.0.0.1:3333을 입력하고, Message의 입력란에 '{{ .Time }}: CPU idle usage 100%'를 입력합니다.

     

  7. 오른쪽 위의 Save Rule 버튼을 클릭하여 알람 규칙을 저장합니다.

작성한 서버를 실행하고 들어오는 값 확인하기.

  1. CLI로 돌아와 테스트용 server를 실행하면 해당 포트로 알람 정보를 수신받는 것을 알 수 있습니다.

    Code Block
    $ node http-server.js 
    
    server start! http://localhost:3333
    { id: 'http idle cpu usage alert',
      message: '\'2020-04-01 08:17:06 +0000 UTC: CPU idle usage 100%\'',
      details: '{&#34;Name&#34;:&#34;cpu&#34;,&#34;TaskName&#34;:&#34;cloudhub-v1-b89c9ad8-a7e5-4c15-b215-8671633564d6&#34;,&#34;Group&#34;:&#34;nil&#34;,&#34;Tags&#34;:{&#34;cpu&#34;:&#34;cpu-total&#34;,&#34;host&#34;:&#34;choedaebeom-ui-MacBook-Pro.local&#34;},&#34;ServerInfo&#34;:{&#34;Hostname&#34;:&#34;localhost&#34;,&#34;ClusterID&#34;:&#34;af16b4ea-7523-40fd-acc2-3ae2d33a8fe4&#34;,&#34;ServerID&#34;:&#34;a6f2b0a0-28d6-4825-a1e0-3b1b20b5b189&#34;},&#34;ID&#34;:&#34;http idle cpu usage alert&#34;,&#34;Fields&#34;:{&#34;value&#34;:93.2391902024494},&#34;Level&#34;:&#34;CRITICAL&#34;,&#34;Time&#34;:&#34;2020-04-01T08:17:06Z&#34;,&#34;Duration&#34;:7749000000000,&#34;Message&#34;:&#34;&#39;2020-04-01 08:17:06 &#43;0000 UTC: CPU idle usage 100%&#39;&#34;}\n',
      time: '2020-04-01T08:17:06Z',
      duration: 7749000000000,
      level: 'CRITICAL',
      data: { series: [ [Object] ] },
      previousLevel: 'CRITICAL',
      recoverable: true }

...

Kafka

...

Kafka 알람 엔드포인트를 설정하는 방법입니다.

  1. Configure Kapacitor Connection 페이지에서 Kafka 탭을 클릭합니다.

  2. 다음을 입력하세요.

    • ID: Kafka 클러스터에 대한 유일한 식별자입니다. 기본은 localhost입니다.

    • Brokershost:port 형식을 사용하는 Kafka broker 주소 목록입니다.

    • Timeout: 불완전한 배치를 비우기 하기 전에 대기할 최대 시간입니다. 기본값은 10초입니다.

    • Batch Size: Kafka에 보내기 전에 일괄 처리된 메시지 수입니다. 기본값은 100입니다.

    • Batch Timeout: 일괄 처리 시간의 제한 기간입니다. 기본값은 1초입니다.

    • Use SSL: SSL 통신을 사용하려면 이 항목을 선택합니다.

    • SSL CA: SSL CA(인증 기관, certificate authority) 파일의 경로입니다.

    • SSL Cert: SSL 호스트 인증서의 경로입니다.

    • SSL Key: SSL 인증서 개인 키(private key) 파일의 경로입니다.

    • Insecure Skip Verify: SSL을 사용하지만, 체인 및 호스트 확인을 건너뛰려면 선택합니다. 자체 서명된 인증서를 사용하는지 여부를 묻습니다.

  3. Save Changes를 클릭하여 구성 설정을 저장합니다.

  4. Send Test Alert을 클릭하여 구성을 확인합니다.

...

Log

Log 이벤트 핸들러는 라인당 하나의 알람 이벤트로 지정된 로그 파일에 기록합니다. 지정된 로그 파일이 없는 경우, 해당 파일이 생성되고 작성됩니다.

Expand
titlelog 이벤트 핸들러를 Cloud Portal이 아닌 CLI 환경에서 kapacitor 명령어를 통해 세팅해야 할 경우 참고하세요.

Option

핸들러 파일(default는 kapacitor.conf) 혹은 TICKscript에서 .log()를 설정할 때 사용할 수 있습니다.

이름

유형

기술

path

string

로그 파일의 절대 경로입니다.

mode

int

파일을 만들 때 사용할 파일 모드 및 권한 기본값은 0600입니다. 앞자리 0은 8진수를 해석하는데 필요합니다.

Log 이벤트 핸들러 사용하기

Log 이벤트 핸들러는 TICKscript 및 핸들러 파일 모두에서 Log와 메시지를 기록하는데 사용할 수 있습니다.

TICKscript에서 메시지기록

다음 TICKscript는 유휴 CPU 사용량이 10% 미만으로 떨어질 때마다 .log()이벤트 핸들러를 사용하여 메시지를 /tmp/alerts.log로그 파일에 기록합니다.

log-cpu-alert.tick

Code Block
stream
  |from()
    .measurement('cpu')
  |alert()
    .crit(lambda: "usage_idle" < 10)
    .message('{{ .Time }}: CPU usage over 90%')
    .log('/tmp/alerts.log')

핸들러를 정의하여 로그 메시지 전송하기

다음 설정은 cpu항목을 구독하고, {{.Time}} : CPU 사용량이 90% 이상입니다.라는 메시지와 함께 cpu항목에 알람을 보냅니다 . cpu항목을 구독하고 새 메시지가 전송될 때마다 메시지를  /tmp/alerts.log로그 파일에 기록 하는 로그 핸들러가 추가 됩니다.

항목에 알람 메시지를 전송하는 TICKscript를 작성합니다. 아래의 TICKscript는 유휴 CPU 사용량이 10%미만으로 떨어질 때마다 cpu항목에 알람 메시지를 보냅니다 .

cpu_alert.tick

Code Block
stream
  |from()
    .measurement('cpu')
  |alert()
    .crit(lambda: "usage_idle" < 10)
    .message('{{ .Time }}: CPU usage over 90%')
    .topic('cpu')

TICKscript를 추가하고 활성화하세요.

Code Block
kapacitor define cpu_alert -tick cpu_alert.tick
kapacitor enable cpu_alert

cpu를 구독하고 로그 이벤트 핸들러를 사용하여 메시지를 /tmp/alerts.log로그 파일에 기록하는 핸들러 파일을 작성합니다.

log_cpu_handler.yaml

Code Block
id: log-cpu-alert
topic: cpu
kind: log
options:
  path: '/tmp/alerts.log'

이벤트 핸들러를 추가합니다.

Code Block
kapacitor define-topic-handler log_cpu_handler.yaml

log 이벤트 핸들러 사용하기

  1. 왼쪽 내비게이션에서 Alert → Alert Setting 탭을 클릭하여 페이지를 이동합니다.

  2. 오른쪽 위의 + Build Alert Rule 버튼을 클릭합니다.

  3. 알람 규칙의 이름을 “log idle cpu usage alert“으로 지정하고, Alert type은 Threshold(임계치)로 설정합니다.

  4. Time Series는 telegraf.autogen → cpu → usage_idle로 설정합니다. Condition은 현재 알람 규칙의 실행 조건을 결정하는 단계입니다. usage_idle이 100% 미만 일 때 이벤트 핸들러가 실행됩니다. (100%는 테스트를 위한 값입니다. 실제 적용 시 상황에 알맞게 사용해야 합니다.)

  5. log 이벤트 핸들러의 입력창에 some.log 파일을 입력합니다. 테스트를 위해 /tmp/alert-log.log를 입력합니다. 또한, 로그 파일에 기록될 Message도 입력합니다.

  6. 오른쪽 위의 Save Rule 버튼을 클릭하여 알람 규칙을 저장합니다.

  7. CLI 환경에서 아래의 명령어를 입력해주세요.

    Code Block
    $ sudo cat /tmp/alert-log.log 
    //혹은
    $ sudo cat /tmp/alert-log.log | jq

  8. alert-log.log 파일 확인하기

...

Slack

Slack은 팀에게 인기 있는 메시지 앱입니다. Cloudhub Portal은 기존 Slack Channel, DM(Direct Message)으로 알람을 보내도록 구성할 수 있습니다. 아래 섹션에서는 각 구성 옵션을 설명합니다.

Nickname this Configuration

두 개 이상의 Slack 알람 엔드포인트를 구성해야 할 경우 Slack 엔드포인트에 대한 고유한 이름을 추가해야 합니다. 이 필드를 사용하려면 하나 이상의 Slack 엔드포인트가 구성되어야 합니다.

Slack WebHook URL

Slack WebHook URL을 사용하면 CloudHub Portal에서 Slack으로 메시지를 전송할 수 있습니다. 다음 단계는 Slack WebHook URL을 만드는 방법을 설명합니다.

  1.  Incoming WebHooks을 클릭하여 해당 사이트를 방문합니다.

  2. Post to Channel 섹션에서 channel 또는 DM 선택합니다. 이 가이드에서는 Create a new channel버튼을 클릭하여 새로운 Channel을 생성하겠습니다. 테스트 Channel 이름을 cloudhub-test-alert로 지정하고 Create 버튼을 눌러 생성합니다.

  3. Incoming Webhooks 페이지에서 Add Incoming WebHooks integration을 클릭합니다.

  4. Slack Webhooks URL을 복사(Copy URL)합니다.

  5. Webhook URL 정보로 Kapacitor의 설정을 변경해 주어야 합니다.


    기본 설정을 변경하고자 하는 경우 Kapacitor의 설정 파일인 kapacitor.conf를 아래와 같이 수정하고, Kapacitor를 재시작합니다.

    Code Block
    ...
    [slack]
      enabled = true
      url = "Webhook URL"
      channel = "#cloudhub-test-alert"
      username = "kapacitor"
      icon-emoji = ""
      global = false
      state-changes-only = false
    ...

  6. Send Test Alert 버튼을 눌러 #cloudhub-test-alertChannel에 도달하는지 확인합니다.

Slack Channel (optional)

CloudHub Portal은 지정된 Slack Channel 또는 DM(Direct Message)에 알람 메시지를 보냅니다. Slack Channel은 #로 접두사 하거나 DM(직접 메시지)을 @으로 접두사로 하세요. 예를 들면 Channel은 #cloudhub_cat, DM은 @cloudhub_dog입니다.

이 필드가 비어 있거나 지정되지 않은 경우 CloudHub Portal은 Slack WebHook URL에 의해 지정된 Channel 또는 DM에 알람 메시지를 보내거나 알람 규칙에서 지정된 Channel 또는 DM으로 알람 메시지를 전송합니다. 알람 규칙에서 지정된 Channel 또는 DM은 Slack Channel 구성 옵션과 WebHook URL 구성보다 우선합니다.

구성 활성화

Configuration Enabled를 선택하여 구성을 사용하도록 설정합니다.

변경 사항 저장

Save Changes을 클릭하여 Slack 구성의 변경 사항들을 저장합니다.

테스트 알람 보내기

Send Test Alert를 클릭하면 알람 엔드포인트 구성을 테스트할 수 있습니다.

다른 구성을 추가

Add Another Config를 클릭하여 Slack 알람 엔드포인트를 추가할 수 있습니다. 추가된 각각의 Slack 알람 엔드포인트는 초기 Slack 알람 엔드포인트가 구성된 후 활성화할 때 Nickname this Configuration 필드에서 고유 식별자를 지정해야 합니다.

...

SMTP/Email

SMTP를 통해 알람 메일 받을 수 있습니다. 가지고 계신 메일의 외부 메일 설정을 통해 SMTP을 활성화해주시고, 메일 호스트에서 제공하는 정보들을 하단의 기입란에 알맞게 입력하시면 됩니다.

필수 입력창에 대한 설명

  1. SMTP host
    host가 제공하는 SMTP 주소입니다.

  2. SMTP port
    hotst가 제공하는 SMTP port 입니다.

  3. From Email
    알람 메일을 발송하는 메일 주소를 적어주세요.

  4. To Email
    알람 메일을 수신하는 메일 주소를 적어주세요.

  5. User
    From Email에 사용되는 메일 주소의 아이디를 적어주세요.

  6. Password
    From Email에 사용되는 메일 주소의 비밀번호를 적어주세요.

아래는 SMTP 세팅 가이드용 샘플입니다.

...

Telegram

Telegram은 인기 있는 메시징 앱입니다. 이번 단계에서는 CloudHub Portal에서 Telegram bot으로 알람 메시지를 보내도록 구성합니다. 아래 부문에서 각 구성 옵션을 설명합니다.

Telegram bot

CloudHub Portal은 Telegram bot에게 알람을 보냅니다. 아래에서는 새로운 Telegram Bot을 만드는 방법을 설명합니다.

  1. Telegram에서 @BotFather 을 검색하고, 검색된 @BotFather를 클릭합니다.

  2. @BotFather와 대화를 시작하려면 start를 클릭하고, @BotFather/newbot 을 전송합니다.

    @BotFather 응답:

    Code Block
    Alright, a new bot. How are we going to call it? Please choose a name for your bot.

  3. Telegram bot name을 @BotFather에게 전송하세요.

    Telegram bot name은 자유롭게 지정할 수 있습니다. 유의해야 할 것은 Telegram의@username이 아니라는 점입니다. 5 단계에서 사용자 이름을 만들 예정입니다.
    @BotFather 응답:

    Code Block
    Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.

  4. @BotFather에게 Telegram bot의 사용자 이름을 보내세요.
    Telegram bot의 사용자 이름은 bot으로 끝나야 합니다. 예를 들어 MyHappy_bot or MyHappyBot처럼 가이드에서는 CloudHubTest3Bot으로 설정하였습니다.

    @BotFather 응답:

    Code Block
    Done! Congratulations on your new bot. You will find it at t.me/<bot-username>. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this.
    
    Use this token to access the HTTP API:
    `<API-access-token>`
    
    For a description of the Bot API, see this page: https://core.telegram.org/bots/api

  5. Telegram bot과 대화를 시작하세요.
    @BotFather의 응답에 있는 t.me/<bot-username> 링크를 클릭하고 Telegram 응용프로그램 하단에서 Start를 클릭하세요. 새로 만든 bot은 Telegram의 채팅 목록에 나타납니다.

Token

이 부문에서는 Telegram API access token을 생성과 식별에 대해 설명합니다. @BotFather는 유저가 bot을 만들 때 API access token을 보냅니다. token을 찾을 수 있는 곳은 이전 섹션의 5단계에서 @BotFather 응답을 참조합니다.

...

  1. @BotFather에게 /token보낸 후, 인터페이스 하단에서 새로운 token을 발급받을 Telegram bot을 선택합니다.

    @BotFather 응답과 새로운 API access token:

    Code Block
    You can use this token to access HTTP API:
    <API-access-token>
    
    For a description of the Bot API, see this page: https://core.telegram.org/bots/api

Chat ID

이번 섹션은 chat ID를 식별하는 방법을 설명합니다.

  1. 아래 링크에서 <API-access-token>을 이전 섹션에서 만들어둔 API access token으로 변경하고 브라우저의 주소창에 붙여넣기 합니다.

    https://api.telegram.org/bot<API-access-token>/getUpdates?offset=0

    응답 샘플

  2. bot으로 메시지를 전송하기.
    Telegram bot으로 메시지를 전송하기. 메시지에 담을 텍스트는 자유롭게 쓰실 수 있습니다. 채팅 기록을 알고 싶다면 채팅 내역에 하나 이상의 메시지가 포함되어야 합니다.
    1. 브라우저를 새로 고침 합니다.
    2. 아래의 링크에 API access token, chat Id, 메시지로 넣을 text를 대치하여 기입합니다.
    https://api.telegram.org/bot<API-access-token>/sendMessage?chat_id=<id>&text=<text>

    응답 샘플

    브라우저에서 숫자 형식으로 된 chat ID를 식별하세요. 아래의 예에서 chat ID는 123456789입니다.

    Code Block
    {"ok":true,"result":[{"update_id":XXXXXXXXX,
       "message":{"message_id":2,"from":{"id":123456789,"first_name":"Mushroom","last_name":"Kap"},"chat":{"id":123456789,"first_name":"Mushroom","last_name":"Kap","type":"private"},"date":1487183963,"text":"hi"}}]}

응답을 토대로 입력하기

...

  1. Token
    bot의 API access token을 기재합니다.

  2. Chat ID
    알람 메시지를 받을 계정의 Chat ID를 기재합니다.

  3. Select the alert message format. 알람 메시지 형식을 선택합니다.
    알람 메시지의 형식을 지정하려면 마크다운(기본) 또는 HTML을 선택합니다.

  4. Disable link previews in alert messages. 링크 미리 보기 비활성화
    알람 메시지에서 링크 미리 보기를 비활성화하려면 이 옵션을 선택합니다.

  5. Disable notifications on iOS devices and disable sounds on Android devices. Android users continue to receive notifications. 알람 비활성화
    iOS 장치 및 안드로이드 장치의 사운드에 대한 알람을 비활성화하려면 이 옵션을 선택합니다. 안드로이드 사용자는 계속 알람을 수신합니다.

  6. Send Test Alert 버튼을 클릭하면 아래의 이미지처럼 테스트 메시지가 전송됩니다.

...

TCP

TCP 이벤트 핸들러는 JSON 인코딩된 알람 데이터를 TCP 엔드포인트로 전송합니다.

Expand
titletcp 이벤트 핸들러를 Cloud Portal이 아닌 CLI 환경에서 kapacitor 명령어를 통해 세팅해야 할 경우 참고하세요.

옵션

다음 TCP 이벤트 핸들러 옵션은 핸들러 파일 또는 TICKscript에서 .tcp()를 설정할 때 사용할 수 있습니다.

Name

Type

Description

address

string

TCP 엔드포인트 주소

예: Handler File

Code Block
id: handler-id
topic: topic-name
kind: tcp
options:
  address: 127.0.0.1:7777

예: TICKscript

Code Block
|alert()
  // ...
  .tcp('127.0.0.1:7777')

TCP 이벤트 핸들러 사용하기

TCP 이벤트 핸들러는 TICKscripts 또는 핸들러 파일을 활용하여 사용할 수 있으며, TCP 엔드포인트로 알람 데이터를 전송합니다.

TICKscript에서 TCP 엔드포인트로 알람 데이터 전송하기

아래의 TICKscript는 유휴 CPU 사용량이 10% 미만으로 떨어질 때마다 .tcp()이벤트 핸들러를 사용하여 알람 데이터를 전송합니다.

tcp-cpu-alert.tick

Code Block
stream
  |from()
    .measurement('cpu')
  |alert()
    .crit(lambda: "usage_idle" < 10)
    .message('Hey, check your CPU')
    .tcp('127.0.0.1:7777')

핸들러를 정의하여 TCP 엔드포인트로 알람 데이터 전송하기

다음 설정은 "Hey, check your CPU"라는 메시지와 함께 cpu 항목에 알람을 보냅니다. cpu 항목을 구독하고 모든 알람 메시지를 TCP 엔드포인트로 보내는 TCP 핸들러가 추가됩니다.

항목에 알람 메시지를 전송하는 TICKscript를 생성합니다. 아래의 TICKscript는 유휴 CPU 사용량이 10% 미만으로 떨어질 때마다 cpu 항목에 알람 메시지를 전송합니다.

cpu_alert.tick

Code Block
stream
  |from()
    .measurement('cpu')
  |alert()
    .crit(lambda: "usage_idle" < 10)
    .message('Hey, check your CPU')
    .topic('cpu')

TICKscript 추가 및 실행하기:

Code Block
kapacitor define cpu_alert -tick cpu_alert.tick
kapacitor enable cpu_alert

cpu 항목을 구독하고 TCP 이벤트 핸들러를 사용하여 알람 데이터를 TCP 엔드포인트로 보내는 핸들러 파일을 생성합니다.

tcp_cpu_handler.yaml

Code Block
id: tcp-cpu-alert
topic: cpu
kind: tcp
options:
  address: 127.0.0.1:7777

핸들러 추가하기:

Code Block
kapacitor define-topic-handler tcp_cpu_handler.yaml

테스트 서버 만들기 Node.js

  1. tcp-server 디렉터리 생성 및 진입

    Code Block
    $ mkdir tcp-server && cd tcp-server

  2. package.json 생성

    Code Block
    $ yarn init
    yarn init v1.16.0
    question name (tcp-server): 
    question version (1.0.0): 
    question description: 
    question entry point (index.js): 
    question repository url: 
    question author: 
    question license (MIT): 
    question private: 
    success Saved package.json 

  3. net 라이브러리 추가 후 의존성(package.json) 확인

    Code Block
    $ yarn add net
    $ cat package.json 
    {
      "name": "tcp-server",
      "version": "1.0.0",
      "main": "index.js",
      "license": "MIT",
      "dependencies": {
        "net": "^1.0.2"
      }
    }
    1. net 라이브러리 추가하기

    2. 의존성(package.json) 확인

  4. server.js 생성 후 작성

    Code Block
    $ vi server.js
    
    --- vi ---
    const net_server = require('net')
    
    const server = net_server.createServer(client => {
      console.log('Client connection: ')
      console.log('   local = %s:%s', client.localAddress, client.localPort)
      console.log('   remote = %s:%s', client.remoteAddress, client.remotePort)
    
      client.setTimeout(500)
      client.setEncoding('utf8')
    
      client.on('data', data => {
        console.log(
          'Received data from client on port %d: %s',
          client.remotePort,
          data.toString()
        )
    
        writeData(client, 'Sending: ' + data.toString())
        console.log('  Bytes sent: ' + client.bytesWritten)
      })
    
      client.on('end', () => {
        console.log('Client disconnected')
      })
    
      client.on('error', err => {
        console.log('Socket Error: ', JSON.stringify(err))
      })
    
      client.on('timeout', () => {
        console.log('Socket Timed out')
      })
    })
    
    server.listen(7777, () => {
      console.log('Server listening: ' + JSON.stringify(server.address()))
      server.on('close', () => {
        console.log('Server Terminated')
      })
      server.on('error', err => {
        console.log('Server Error: ', JSON.stringify(err))
      })
    })
    
    const writeData = (socket, data) => {
      const success = socket.write(data)
      if (!success) console.log('Client Send Fail')
    }
    
    :wq

Cloudhub Portal에서 tcp 이벤트 핸들러를 설정하기

  1. CloudHub Portal 부분입니다. 왼쪽 내비게이션에서 Alert → Alert Setting 탭을 클릭하여 페이지를 이동합니다.

  2. 오른쪽 위의 + Build Alert Rule 버튼을 클릭합니다.

  3. 알람 규칙의 이름을 “tcp idle cpu usage alert“ 으로 지정하고, Alert Type은 임계치 설정을 위해 Threshold로 지정합니다.

  4. Time Series는 telegraf.autogen → cpu → usage_idle로 설정합니다. Condition은 현재 알람 규칙의 실행 조건을 결정하는 단계입니다. usage_idle이 100% 미만 일 때 이벤트 핸들러가 실행됩니다. (100%는 테스트를 위한 값입니다. 실제 적용 시 상황에 알맞게 사용해야 합니다.)

  5. Condition의 조건에 만족했을 때 실행할 이벤트 핸들러입니다. 이 예제에서는 tcp를 선택합니다.

  6. tcp 이벤트 핸들러의 입력창에 엔드포인트 주소는 127.0.0.1:7777입니다. 해당 엔드포인트에 JSON 인코딩된 알람 데이터가 전송됩니다.

  7. 오른쪽 위의 Save Rule 버튼을 클릭하여 알람 규칙을 저장합니다.

  8. 알람을 활성화되어있는지 확인합니다.

작성한 서버를 실행하고 들어오는 값 확인하기.

  1. CLI 로 돌아와 테스트용 server를 실행하면 해당 포트로 알람 데이터를 수신받는 것을 알 수 있습니다.

    Code Block
    $ node server.js
    Server listening: {"address":"::","family":"IPv6","port":7777}
    Client connection: 
       local = ::ffff:127.0.0.1:7777
       remote = ::ffff:127.0.0.1:64908
    Received data from client on port 64908: {"id":"tcp idle cpu usage alert","message":"'2020-04-01 04:21:37 +0000 UTC: CPU idle usage 100%'","details":"{\u0026#34;Name\u0026#34;:\u0026#34;cpu\u0026#34;,\u0026#34;TaskName\u0026#34;:\u0026#34;cloudhub-v1-b89c9ad8-a7e5-4c15-b215-8671633564d6\u0026#34;,\u0026#34;Group\u0026#34;:\u0026#34;nil\u0026#34;,\u0026#34;Tags\u0026#34;:{\u0026#34;cpu\u0026#34;:\u0026#34;cpu-total\u0026#34;,\u0026#34;host\u0026#34;:\u0026#34;choedaebeom-ui-MacBook-Pro.local\u0026#34;},\u0026#34;ServerInfo\u0026#34;:{\u0026#34;Hostname\u0026#34;:\u0026#34;localhost\u0026#34;,\u0026#34;ClusterID\u0026#34;:\u0026#34;af16b4ea-7523-40fd-acc2-3ae2d33a8fe4\u0026#34;,\u0026#34;ServerID\u0026#34;:\u0026#34;a6f2b0a0-28d6-4825-a1e0-3b1b20b5b189\u0026#34;},\u0026#34;ID\u0026#34;:\u0026#34;tcp idle cpu usage alert\u0026#34;,\u0026#34;Fields\u0026#34;:{\u0026#34;value\u0026#34;:92.14607303651826},\u0026#34;Level\u0026#34;:\u0026#34;CRITICAL\u0026#34;,\u0026#34;Time\u0026#34;:\u0026#34;2020-04-01T04:21:37Z\u0026#34;,\u0026#34;Duration\u0026#34;:20000000000,\u0026#34;Message\u0026#34;:\u0026#34;\u0026#39;2020-04-01 04:21:37 \u0026#43;0000 UTC: CPU idle usage 100%\u0026#39;\u0026#34;}\n","time":"2020-04-01T04:21:37Z","duration":20000000000,"level":"CRITICAL","data":{"series":[{"name":"cpu","tags":{"cpu":"cpu-total","host":"choedaebeom-ui-MacBook-Pro.local"},"columns":["time","value"],"values":[["2020-04-01T04:21:37Z",92.14607303651826]]}]},"previousLevel":"CRITICAL","recoverable":true}