ติดตั้ง influxdb สำหรับเก็บข้อมูล time series จาก IoT Sensor Node ไว้บน cloud (digital ocean)
Tags: Mqtt, Influxdb, IoT, Telegraf, Sensor Node

Telegraf

Telegraf เป็นหน่วยนึง (agent) เอาไว้ดูดค่าต่างๆเข้า influxdb ครับ เป็น plugin-driven server agent ครับ มีเป็น 100 plugins ให้เลือกเลยครับ สถาปัตยกรรมของ TICK Stack ก็เป็นแบบในภาพครับ แต่ไม่ต้องตกใจ วันนี้เราจะพูดถึงแค่ Telegraf (mqtt) → InfluxDB เท่านั้นครับ

ติดตั้ง Telegraf

$ sudo apt-get install telegraf

เมื่อเราติดตั้ง influxdb เสร็จแล้ว เราก็จะใช้ Telegraf-MQTT ดูดข้อมูลจาก MQTT มาเข้า database ของเราครับแบบในรูปครับ ซึ่งแน่นอนมันต้อง Config กันหน่อย

sensor node (mqtt) → telegraf → influxdb

Config Telegraf

$ sudo nano /etc/telegraf/telegraf.conf

ไฟล์ Config ของผมหน้าตาเป็นแบบนี้​ซึ่งหลักๆ ให้แก้ตรงตัวหนาครับ



interval = "5s"

round_interval = true

metric_batch_size = 1000

metric_buffer_limit = 10000

collection_jitter = "0s"

flush_interval = "5s"

flush_jitter = "0s"

precision = ""

debug = true

quiet = false

logfile = ""

hostname = "$HOSTNAME"

omit_hostname = false

[[outputs.influxdb]]

urls = ["

database = "telegraf-mqtt" # required

retention_policy = ""

write_consistency = "any"

timeout = "5s"

username = "admin"

password = "admin_admin"

[[inputs.cpu]]

[[inputs.system]]

[[inputs.docker]]

endpoint = "unix:///var/run/docker.sock"

container_names = []

timeout = "5s"

perdevice = true

total = false

[[inputs.mqtt_consumer]]

servers = ["mqtt.cmmc.io:1883"]

qos = 0

topics = [ "NAT/espnow/SLOW/#", ]

client_id = ""

data_format = "json" [agent]interval = "5s"round_interval = truemetric_batch_size = 1000metric_buffer_limit = 10000collection_jitter = "0s"flush_interval = "5s"flush_jitter = "0s"precision = ""debug = truequiet = falselogfile = ""hostname = "$HOSTNAME"omit_hostname = false[[outputs.influxdb]]urls = [" http://localhost:8086 "] # requiredretention_policy = ""write_consistency = "any"timeout = "5s"[[inputs.cpu]][[inputs.system]][[inputs.docker]]endpoint = "unix:///var/run/docker.sock"container_names = []timeout = "5s"perdevice = truetotal = false[[inputs.mqtt_consumer]]servers =qos = 0topics =client_id = ""data_format =

Telegraf แบบพิเศษ

หากต้องการ config service ให้แก้ที่ไฟล์นี้ครับ

$ nano /lib/systemd/system/telegraf.service

ไฟล์ Service Config ผมเป็นแบบนี้… แก้ path ของ telegraf.conf และ User นิดหน่อยครับ



Description=The plugin-driven server agent for reporting metrics into InfluxDB

Documentation=

After=network.target [Unit]Description=The plugin-driven server agent for reporting metrics into InfluxDBDocumentation= https://github.com/influxdata/telegraf After=network.target [Service]

EnvironmentFile=-/etc/default/telegraf

User=root

ExecStart=/usr/bin/telegraf -config /root/telegraf/telegraf.conf -config-directory /etc/telegraf/telegraf.d $TELEGRAF_OPTS

ExecReload=/bin/kill -HUP $MAINPID

Restart=on-failure

RestartForceExitStatus=SIGPIPE

KillMode=control-group [Install]

WantedBy=multi-user.target

แก้เสร็จเรียบร้อยก็สั่ง

$ systemctl daemon-reload

$ sudo systemctl restart telegraf

$ sudo systemctl status telegraf

หลังจากนี้ก็ลง Grafana หรือตัวอื่นก็ได้ครับ (ลงที่เครื่องไหนก็ได้) หลังจากนั้นก็ Config Datasource ด้วย account ที่เราสร้างไว้ในขั้นตอนแรก.. จะได้ประมาณนี้ครับ

grafana → data sources

ถือว่าเป็นอันเสร็จพิธี InfluxDB และ Telegraf (MQTT) ครับ

อย่าลืม!

ปรับ firewall ให้เปิดรับ port 8086 ด้วยนะครับ ด้วยคำสั่ง ufw

sudo ufw allow 8086/tcp

เพิ่มเติม 23/11/2017:

CREATE USER gateway WITH PASSWORD 'hellopasswd CREATE USER "todd" WITH PASSWORD '123456' WITH ALL PRIVILEGES

CREATE USER "todd" WITH PASSWORD '123456'

GRANT WRITE ON "cmmc-gateway-4g" TO "gateway"

อ่านเพิ่มเติม: