Versions Compared

Key

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

...

  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}}

post 이벤트 핸들러 사용하기

테스트 서버 만들기 Node.js

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

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

  2. 초기 packack.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
    Image Added

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

    Code Block
    $ yarn add express body-parser
    ...
    Done
    Image AddedImage AddedImage Added


    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"
      }
    }
    Image Added

  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 로 파일 생성하기

    Image Added

    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을 선택합니다.

    Image Removed

     

  6. Image Removed

     

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

    Image Removed

     

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

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

    Image Added

     

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

    Image Added

     

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

    Image Added

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

  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 }
    Image Added

...

Kafka

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

...

  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}