Versions Compared

Key

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

...

  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 버튼을 클릭하여 알람 규칙을 저장합니다.

...

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

  1.  incoming webhook integrationIncoming 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에 도달하는지 확인합니다.

...

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

tcp 이벤트 핸들러 테스트를 위한 서버 작성

...

테스트 서버 만들기 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

...

  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. 알람을 활성화되어있는 지 되어있는지 확인합니다.

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

...