
Membuat Dasbor IoT/Utilitas Pribadi Anda Menggunakan Grafana, Influxdb & Telegraf di Raspberry Pi by canva

Dashboard by iotforall
Di akhir artikel, Anda mungkin memiliki sesuatu yang lebih baik dari ini!
Cara menyiapkan dasbor IoT & Utilitas pribadi dicakup dalam artikel ini.
Persyaratan Perangkat Keras:
- Raspberry pi 3 B+ atau 4
- Topi Rasa
- Memantau
Kerangka Perangkat Lunak yang Digunakan:
- Grafana
- MasuknyaDb
- Telegraf
Pengaturan Perangkat Keras:
Menggunakan panduan resmi, menyiapkan Raspberry Pi cukup mudah. Hat ke pi harus terhubung ke pi setelah disiapkan. 40 pin GPIO menghubungkan TOPI Sense Raspberry Pi ke bagian atas Raspberry Pi. Silakan mematuhi instruksi ini, seharusnya tidak lebih dari lima menit.
Barang Asli:
Dasbor hanya dapat digunakan sesuai keinginan Anda. Informasi yang ingin saya kumpulkan dan bagaimana saya ingin menampilkannya adalah fokus dari semua kode yang akan saya posting di sini. Untuk menjalankannya di mesin Anda, Anda harus memodifikasi beberapa pengaturan, tetapi Anda bebas melakukannya kapan saja.
Mencatat berbagai Metrik dari sensor dan Open weather API:

Mencatat berbagai Metrik dari sensor dan Open weather API by canva
Saya mencatat data sensor untuk suhu dan kelembaban ruangan dengan Python 3. Saya juga mendapatkan cuaca di luar menggunakan Open Weather API.
import time import logging import vcgencmd from sense_hat import SenseHat import requests import pytemperature sense = SenseHat() logging.basicConfig(filename='temperature.log', filemode='a', format='%(created)f %(message)s', level=logging.INFO)
while True: t = sense.get_temperature() h = sense.get_humidity() CPUc=vcgencmd.measure_temp() r = requests.get('http://api.openweathermap.org/data/2.5/weather?id="Your Location id"&APPID="Your API Key"') result=r.json() outsideTemp=pytemperature.k2c(result["main"]["temp"]) outsideHumid=result["main"]["humidity"] logging.info('Temp={0:0.1f} C and Humidity={1:0.1f}% and CPU_Temp={2:0.1f} and ot={3:0.1f} and oh={4:0.1f}%'.format(t, h, CPUc, outsideTemp, outsideHumid)) time.sleep(4)
Anda dapat menggunakan python3 untuk langsung mengelola data ke InfluxDB, namun, logging adalah cara yang jauh lebih rapi untuk menyelesaikannya. Kode menunjukkan bahwa saya menggunakan perpustakaan SenseHat dan sensor untuk memperoleh metrik ruangan. Saya menggunakan API cuaca terbuka untuk memeriksa cuaca di luar. Ikuti petunjuk di bawah ini untuk mendapatkan ID Lokasi dan kunci API Anda sendiri.
- Buat akun gratis di openweather [Tautkan ke pembuatan akun] (https://home.openweathermap.org/users/sign_up).
- Dapatkan kunci API Anda di tab kunci API [Tautan] (https://home.openweathermap.org/api_keys)
- Cari id kota Anda di sini [Link to city id json file] (http://bulk.openweathermap.org/sample/)
- Ganti {id kota Anda} dan {kunci api Anda} dalam kode dengan ID kota dan kunci API Anda.
Anda dapat melihat bahwa saya memperoleh suhu CPU menggunakan vcgencmd. Data harus direkam dalam file temperature.log dengan ini. Periksa untuk melihat apakah file log sedang dibuat dengan menjalankannya menggunakan Python 3 sebagai gantinya. menjadi seperti ini:
1570130669.852521 Temp=24.8 C and Humidity=64.1% and CPU_Temp=50.5 and ot=11.6 and oh=93.0% 1570130674.022393 Temp=24.9 C and Humidity=63.5% and CPU_Temp=50.5 and ot=11.6 and oh=93.0% 1570130678.148942 Temp=24.8 C and Humidity=64.2% and CPU_Temp=49.9 and ot=11.5 and oh=93.0% 1570130682.303456 Temp=25.0 C and Humidity=64.1% and CPU_Temp=50.5 and ot=11.6 and oh=93.0%Setting up InfluxDB and Telegraf:
Pengaturan InfluxDB:
Pada langkah ini saya akan menunjukkan cara mengatur InfluxDB dan Telegraf.
wget -qO- https://repos.influxdata.com/influxdb.key | sudo tee /etc/apt/sources.list.d/influxdb.list test $VERSION_ID = "8" && echo "deb https://repos.influxdata.com/debian jessie stable" | sudo tee /etc/apt/sources.list.d/influxdb.list test $VERSION_ID = "9" && echo "deb https://repos.influxdata.com/debian stretch stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
sudo apt-get update && sudo apt-get install influxdb
Setelah instalasi selesai, Anda perlu memulai layanan menggunakan:
sudo service influxdb start
Silakan periksa status Influx db menggunakan:
sudo service influxdb status
Anda harus mendapatkan sesuatu seperti ini jika semuanya berfungsi:
● influxdb.service - InfluxDB is an open-source, distributed, time series database Loaded: loaded (/lib/systemd/system/influxdb.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2019-10-03 23:05:15 EDT; 22h ago Docs: https://docs.influxdata.com/influxdb/ Main PID: 15832 (influxd) Tasks: 17 (limit: 2077) Memory: 110.8M CGroup: /system.slice/influxdb.service └─15832 /usr/bin/influxd -config /etc/influxdb/influxdb.conf
Pengaturan Telegraf:
Unduh versi armhf terbaru untuk Anda pi dari sini dan ambil versi terbaru menggunakan wget.
wget https://dl.influxdata.com/telegraf/releases/telegraf_1.12.2-1_armhf.deb
Install
sudo dpkg -i telegraf_1.12.2-1_armhf.deb
Anda harus memulai file koleksi metrik di latar belakang saat ini. Ini akan mulai menulis semua nilai ke file temeprature.log.Nohup telah menjadi pilihan saya.
nohup python3 iotutil.py &
Tujuan penggunaan Telegraf dan influxdb adalah untuk memfasilitasi pengumpulan dan kueri data yang lancar.
Penyimpanan data berkinerja tinggi yang dirancang khusus untuk data deret waktu disebut InfluxDB. Kompresi, kueri waktu nyata, dan penyerapan throughput tinggi semuanya dimungkinkan olehnya. Anda akan melihat bahwa kami melakukan kueri saat data dimasukkan ke dalam DB sebagai kami terus mengumpulkan data saat bepergian.
Membersihkan dan memasukkan data berkelanjutan ke Influxdb dengan Telegraf sangatlah mudah. Telegraf dan grok log parser adalah alat yang saya gunakan untuk mengekstrak informasi berguna dari log yang baru dibuat. Menulis pola grok untuk pertama kali mungkin sulit; jika Anda ingin membuat pola selain yang disertakan dalam kode, gunakan pencocokan pola ini.
Telegraf akan memasukkan data ke influxDB dari berbagai input. Anda harus menentukan beberapa input dan satu output. Selain itu, tabel akan dibuat secara otomatis. Kita harus membuat file conf dengan nama iotlog.conf dan menempelkan konten di bawah untuk semua ini.
[agent] # Batch size of values that Telegraf sends to output plugins. metric_batch_size = 1000 # Default data collection interval for inputs. interval = "30s" # Added degree of randomness in the collection interval. collection_jitter = "5s" # Send output every 5 seconds flush_interval = "5s" # Buffer size for failed writes. metric_buffer_limit = 10000 # Run in quiet mode, i.e don't display anything on the console. quiet = true # # Ping given url(s) and return statistics [[inputs.ping]] ## NOTE: this plugin forks the ping command. You may need to set capabilities ## via setcap cap_net_raw+p /bin/ping # ## urls to ping urls = ["www.github.com","www.amazon.com","1.1.1.1"] ## number of pings to send per collection (ping -c ) count = 3 ## interval, in s, at which to ping. 0 == default (ping -i ) ping_interval = 15.0 ## per-ping timeout, in s. 0 == no timeout (ping -W ) timeout = 10.0 ## interface to send ping from (ping -I ) interface = "wlan0"
# Gather metrics about network interfaces [[inputs.net]] ## By default, telegraf gathers stats from any up interface (excluding loopback) ## Setting interfaces will tell it to gather these explicit interfaces, ## regardless of status. When specifying an interface, glob-style ## patterns are also supported. ## interfaces = ["wlan0"] ## ## On linux systems telegraf also collects protocol stats. ## Setting ignore_protocol_stats to true will skip reporting of protocol metrics. ## # ignore_protocol_stats = false ## # Read metrics about cpu usage [[inputs.cpu]] ## Whether to report per-cpu stats or not percpu = true ## Whether to report total system cpu stats or not totalcpu = true ## If true, collect raw CPU time metrics. collect_cpu_time = true ## If true, compute and report the sum of all non-idle CPU states. report_active = false
[[inputs.logparser]] ## file(s) to read: files = ["/home/pi/grafanaflux/temperature.log"] # Only send these fields to the output plugins fieldpass = ["temperature", "humidity", "timestamp", "ot", "oh", "CPU_Temp"] tagexclude = ["path"]
# Read the file from beginning on telegraf startup. from_beginning = true name_override = "room_temperature_humidity"
## For parsing logstash-style "grok" patterns:
[inputs.logparser.grok]
pola = [“%{TEMPERATURE_HUMIDITY_PATTERN}”] custom_patterns = ”’TEMPERATURE_HUMIDITY_PATTERN %{NUMBER:timestamp:ts-epoch} Temp=%{NUMBER:temperature:float} C dan Humidity=%{NUMBER:humidity:float}% =%{NUMBER:CPU_Temp:float} dan ot=%{NUMBER:ot:float} dan oh=%{NUMBER:oh:float}”’ ##custom_patterns = ”’TEMPERATURE_HUMIDITY_PATTERN %{NUMBER:timestamp:ts-epoch} Temp=%{NUMBER:temperature:float} %{GREEDYDATA}=%{NUMBER:humidity:float}%{GREEDYDATA} ” zona waktu = “Lokal”
[[outputs.influxdb]] ## The full HTTP or UDP URL for your InfluxDB instance. urls = ["http://127.0.0.1:8086"] # required ## The target database for metrics (telegraf will create it if not exists). database = "temperature" # required ## Name of existing retention policy to write to. Empty string writes to ## the default retention policy. retention_policy = "" ## Write consistency (clusters only), can be: "any", "one", "quorum", "all" write_consistency = "any" ## Write timeout (for the InfluxDB client), formatted as a string. ## If not provided, will default to 5s. 0s means no timeout (not recommended). timeout = "10s" # username = "telegraf" # password = "metricsmetricsmetricsmetrics" ## Set the user agent for HTTP POSTs (can be useful for log differentiation) # user_agent = "telegraf" ## Set UDP payload size, defaults to InfluxDB UDP Client default (512 bytes) # udp_payload = 512
Seperti yang Anda lihat, saya telah menyesuaikan input CPU, net, ping, dan logparser untuk memenuhi kebutuhan saya. Bergantung pada kebutuhan Anda, Anda dapat memilih untuk menyimpannya atau mengeluarkannya. Input logparser yang memperoleh data dari log berfungsi sebagai titik referensi.
Anda harus menyadari bahwa masuknya db akan menghasilkan pembuatan beberapa tabel, satu untuk setiap input. room_temperature_humidity, mirip dengan CPU untuk input CPU, akan menjadi tabel yang berisi data yang kami catat.
Untuk memberi Anda gambaran, saya mengumpulkan dan menampilkan data khusus sistem menggunakan input CPU dan jaringan untuk detail jaringan seperti paket yang diterima, dijatuhkan, dll.
Gunakan perintah untuk melakukan ini di latar belakang:
telegraf –config iotlog.conf &
Instal Grafana:
wget https://dl.grafana.com/oss/release/grafana_6.2.2_armhf.deb sudo dpkg -i grafana_6.2.2_armhf.deb sudo apt-get update sudo apt-get install grafana sudo service grafana-server start
Ini akan memulai server grafana dan sekarang Anda dapat mengakses grafana pada port default 3000. Buka browser dan buka http://raspberry_pi:3000/ dan login menggunakan nama pengguna dan kata sandi default — admin, admin. Jika Anda membukanya di raspberry pi sendiri, Anda dapat memasukkan: http://localhost:3000/.
Setelah Anda masuk ke Grafana, tambahkan InfluxDb sebagai sumber data default dan mulailah membuat dasbor.
Tambahkan Url influxDb, yang akan menjadi http://localhost:8086 jika Anda menjalankan influxDb secara lokal. Tambahkan nama database seperti temperatur. Biarkan yang lainnya sesuai standarnya.
Menyiapkan dasbor di grafana cukup mudah. Data akan diambil melalui kueri di mana Anda dapat menulis sendiri atau menggunakan opsi GUI.