Versions Compared

Key

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

...

  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 라이브러리 추가하기

      Image Modified

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

      Image Modified

  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

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

  6. 오른쪽 상단의 + Build Alert Rule 버튼을 클릭합니다.

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

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

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

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

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

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

    Code Block
    $ node server.js
    Image Removed
    
    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}
    Image Added