Telegraf で InfluxDB 2.0 にデータを入れる

次のページを参考にしました。
[Grafana+InfluxDBv2+telegrafで室内温度を可視化する](https://izuminmin.com/server/try-grafana-influxdb-telegraf/)

Arch Linux で Telegraf のインストール

```bash
yay -S telegraf
```

Ubuntu 21.04 で Telegraf のインストール

```bash
sudo apt install telegraf
```

起動

```bash
sudo systemctl start telegraf
```

設定ファイルの編集
>UDP　8092 に入ってきたデータを、InfluxDB に送ります。

```text:/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"
（省略）
```

サーバーの再起動

```bash
sudo systemctl restart telegraf
```

データの送信

```bash
echo 'aaa temperature=30.5,humidity=50.4' | ncat -4 -u -w 1 localhost 8092
```

InfluxDB の Data Explorer でデータの確認
![influxdb_aa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/48945029-7608-84b0-1147-7e3ed7e7f99b.png)

値を変えて、データを送信してみます。

```bash
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分のデータが見れます。
![influxdb_bb.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/738b6694-209b-a41c-bdad-97ef2666f4a6.png)

Python で UDP 8092 に送信する例です。

```py: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 に送信する例です。

```js: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](https://gist.github.com/daicham/1bf2e5836d665bd6b03f)