Telegraf에서 InfluxDB 2.0에 데이터 넣기

다음 페이지를 참고했습니다.
Grafana+InfluxDBv2+telegraf로 실내 온도 시각화

Arch Linux에서 Telegraf 설치
yay -S telegraf

Ubuntu 21.04에서 Telegraf 설치
sudo apt install telegraf

시작
sudo systemctl start telegraf

설정 파일 편집

UDP 8092에 들어온 데이터를 InfluxDB로 보냅니다.

/etc/telegraf/telegraf.conf
(省略)
[[outputs.influxdb_v2]]
urls = ["http://127.0.0.1:8086"]
token = "1zIYs1taCm3pWQOBUNk0ssYccOF7YgJcdGyJDbiFYTBf7hcPvyl5nGyt71rNVkYtg2rB
ceUwQ1r5Xzm7Mabcde=="
organization = "ekzemplaro"
bucket = "tochigi"
(省略)
[[inputs.socket_listener]]
service_address = "udp://:8092"
(省略)

서버 재부팅
sudo systemctl restart telegraf

데이터 전송
echo 'aaa temperature=30.5,humidity=50.4' | ncat -4 -u -w 1 localhost 8092

InfluxDB Data Explorer에서 데이터 확인


값을 변경하여 데이터를 보냅니다.
echo 'aaa temperature=40.6,humidity=60.5' | ncat -4 -u -w 1 localhost 8092
sleep 10
echo 'aaa temperature=50.7,humidity=70.2' | ncat -4 -u -w 1 localhost 8092
sleep 10
echo 'aaa temperature=30.5,humidity=50.4' | ncat -4 -u -w 1 localhost 8092

InfluxDB에서 데이터를 보면

Past 5m로 하면 최근 5분의 데이터를 볼 수 있습니다.


Python에서 UDP 8092로 보내는 예입니다.

to_influxdb.py
#! /usr/bin/python
#
#   to_influxdb.py
#
#                   Jul/10/2021
#
# --------------------------------------------------------------------
import socket
#
UDP_IP = "localhost"
#
UDP_PORT =  8092
MESSAGE = "aaa temperature=12.3,humidity=45.6"
print ("UDP target IP:" + UDP_IP)
print ("UDP target port:" + str(UDP_PORT))
print ("message: " + MESSAGE)
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # UDP
sock.sendto(MESSAGE.encode('utf-8'), (UDP_IP, UDP_PORT))
# --------------------------------------------------------------------

Node.js에서 UDP 8092로 보내는 예입니다.

udpclient.js
#! /usr/bin/node
// ---------------------------------------------------------------
//
//  udpclient.js
//
//                  Jul/11/2021 
// ---------------------------------------------------------------
// UDP Sample Client

// UDP 接続先
const host = "localhost"
const c_port = 8092
var dgram = require("dgram")
var client = dgram.createSocket("udp4")

// サーバに送信するメッセージ
const message = new Buffer.from("aaa temperature=32.16,humidity=65.43")

// サーバからメッセージ受信したときの処理
client.on("message", function(msg, rinfo) {
  console.log("recieved: " + msg.toString("hex"))
  client.close()
})

// メッセージ送信でエラーが起きた時の処理
client.on("err", function(err) {
  console.log("client error: \n" + err.stack);
  console.close()
})

// Socket をクローズした時の処理
client.on("close", function() {
  console.log("closed.")
})

// メッセージ送信
send(message, host, c_port);
function send(message, host, port) {
  client.send(message, 0, message.length, port, host, function(err, bytes) {
    console.log("*** sent ***")
  })
}

// ---------------------------------------------------------------

참고 페이지
Sample UDP Server and Client on node.js

좋은 웹페이지 즐겨찾기