Versions Compared

Key

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

...

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 8+tcp 이벤트 핸들러를 사용하기 위해 를 활용하여 테스트용 서버를 작성합니다만듭니다.

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

    Image Added

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

  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}