โลกเทคโนโลยีนั้นยอดเยี่ยมหรือไม่? บริการที่ยอดเยี่ยมเหล่านี้และซอฟต์แวร์ฟรีที่ปรากฏขึ้นทุกหนทุกแห่ง ฉันต้องการแบ่งปันประสบการณ์ครั้งแรกของฉันกับ Grafana และ InfluxDB โดยมีจุดประสงค์ในการสร้างกราฟแบบต่อเนื่องสวยงามและยืดหยุ่นของสถิติเราเตอร์ของคุณ
ปัญหา: พบเราเตอร์ของฉันได้จากทั่วทุกมุมใน Web-UI การวัดบางอย่างเสนอกราฟแบบเรียลไทม์ในช่วงสองสามนาทีที่ผ่านมา สถิติทั้งหมดถูกรีเซ็ตเมื่อฉันรีบูท ฉันต้องการย้อนเวลาและดูปริมาณงานอุณหภูมิและอื่น ๆ
การแก้ไขปัญหา: InfluxDB สำหรับที่เก็บข้อมูลถาวรและ Grafana สำหรับการสร้างภาพข้อมูล
InfluxDB เป็นฐานข้อมูลอนุกรมเวลา (TSDB) ซึ่งมีความเชี่ยวชาญในการจัดเก็บประวัติข้อมูลแท็กค่าเวลา
Grafana เป็นเครื่องมือสร้างกราฟบนเว็บที่ให้บริการฟรีสำหรับ InfluxDB (และ TSDB อื่น ๆ )
โปรแกรมทั้งสองนั้นง่ายต่อการเริ่มต้นใช้งาน แต่มีประสิทธิภาพ อย่างไรก็ตามฉันไม่มีส่วนเกี่ยวข้องกับโครงการอีเทอร์ โครงการนี้เป็นเพียงการพาคุณไป เมื่อคุณเริ่มต้นคุณอาจพบว่าตัวเองสร้างกราฟทุกสิ่ง เหมาะอย่างยิ่งสำหรับแอปพลิเคชัน IOT เช่น. ฉันกำลังใช้การตั้งค่าเดียวกันสำหรับการวัดเซ็นเซอร์อัตโนมัติที่บ้าน (อุณหภูมิความชื้น ฯลฯ ) ร่วมกับ Openhab
โปรดลุกไหม้และสรรเสริญในความคิดเห็นโปรด และแจ้งให้เราทราบหากมีบางสิ่งไม่ทำงานฉันจึงสามารถแก้ไขได้!
วัสดุ:
ขั้นตอนที่ 1: ข้อกำหนดเบื้องต้น
เราเตอร์
ในการเริ่มต้นกับโปรเจ็กต์นี้คุณต้องใช้เราเตอร์ที่ใช้ Linux พร้อมกับคุณสมบัติดังต่อไปนี้:
- การเข้าถึงรูทล็อกอินของบรรทัดคำสั่ง (telnet หรือ ssh)
- สนับสนุน Cron
- ที่จัดเก็บไฟล์ในตัวเครื่องภายใน JFFS หรือที่เก็บข้อมูล USB นี่คือการจัดเก็บสคริปต์
คุณสมบัติข้างต้นมักจะไม่มาในเฟิร์มแวร์หุ้นดังนั้นคุณอาจต้องไปกับ DDWRT, มะเขือเทศหรือคล้ายกัน ในกรณีของฉันฉันใช้ ASUSWRT Merlin ASUS มีความรู้สึกที่ดีในการโอเพนซอร์ซแวร์หุ้นของพวกเขาและ Merlin build เพิ่มคุณสมบัติขั้นต่ำ แต่สำคัญ ฉันใช้ ASUS RT-N66U สำหรับโครงการนี้
เซิฟเวอร์
preq-req ตัวที่สองคือเซิร์ฟเวอร์ Linux ที่ใช้ x86 ไม่จำเป็นต้องมีพลังอำนาจมาก สำหรับโครงการนี้ฉันใช้ HP microserver กับ Ubuntu Server 13.04 LTS และ 4GB RAM ในทางทฤษฎีคุณสามารถใช้สิ่งนี้กับสถาปัตยกรรมโปรเซสเซอร์ที่แตกต่างกัน (เช่น ARM) แต่คุณจะไม่สามารถใช้แพ็คเกจสำเร็จรูปได้ เซิร์ฟเวอร์ไม่จำเป็นต้องทุ่มเทให้กับ InfluxDB
พีซี
คุณต้องมีพีซีหรือ Mac ที่มีซอฟต์แวร์เทอร์มินัล (e. g. Putty หรือ MobaXterm ฉันชอบอันหลัง)
ความรู้บ้าง
คำแนะนำนี้สำหรับผู้ที่มีความเข้าใจพื้นฐานเกี่ยวกับบรรทัดคำสั่ง Linux
ขั้นตอนที่ 2: การเตรียมเราเตอร์
สิ่งนี้ใช้ได้สำหรับ ASUS RT-N66U, ผม. อี คุณไม่สามารถทำตามคำแนะนำกับจดหมายหากคุณมีเราเตอร์ที่แตกต่างกัน
ขอสงวนสิทธิ์! อย่าโหลดเฟิร์มแวร์ที่กำหนดเองบนเราเตอร์ของคุณเว้นแต่คุณจะรู้ว่าคุณกำลังทำอะไรหรืออย่างน้อยก็ยอมรับว่ามีความเสี่ยงเล็กน้อยที่คุณจะทำให้เราเตอร์ของคุณยุ่งเหยิงจนถึงจุดที่ไม่มีผลตอบแทน ฉันโหลดเฟิร์มแวร์ที่กำหนดเองจำนวนมากบนเราเตอร์และไม่เคยมีปัญหาใด ๆ แต่ฉันรู้ว่าปัญหาสามารถเกิดขึ้นได้ อย่างไรก็ตามด้วย Merlin สำหรับ Asus ความเสี่ยงอยู่ในระดับต่ำเนื่องจากเป็นไปตามเฟิร์มแวร์หุ้น
- บนพีซีให้ดาวน์โหลด MerlinWRT
- แตกไฟล์ zip ที่ดาวน์โหลด ไฟล์. trx เก็บเฟิร์มแวร์
- เรียกดูอินเทอร์เฟซผู้ดูแลระบบเราเตอร์ (มักพบได้ที่ http://192.168.1.1)
- ไปที่: การดูแลระบบ -> อัปเกรดเฟิร์มแวร์ เลือกไฟล์. trx ที่ดาวน์โหลดและอัพโหลด
- หลังจากที่เราเตอร์เริ่มระบบใหม่คุณจะใช้งานเมอร์ลิน เข้าสู่ระบบอีกครั้ง
- ลุยเลย: Administration-> System เปิดใช้งานสิ่งทั้งหมดของ JFFS กดใช้
- รีบู๊ตเราเตอร์
ตรวจสอบ:
- ใช้ซอฟต์แวร์เทอร์มินัลเข้าสู่เราเตอร์โดยใช้ผู้ใช้และรหัสผ่านเดียวกันกับในเว็บผู้ดูแลระบบ
- ตรวจสอบว่ามี / jffs อยู่และมีไดเรกทอรี "configs" และ "script" (ดูภาพหน้าจอ)
ตอนนี้เราเตอร์พร้อมสำหรับสคริปต์ที่กำหนดเองแล้ว!
ขั้นตอนที่ 3: การเตรียมเซิร์ฟเวอร์
ตามที่ระบุไว้ในคำสั่งล่วงหน้าคุณจำเป็นต้องใช้เซิร์ฟเวอร์ Linux ขนาดเล็กที่ใช้ x86 (Intel, AMD) สำหรับ InfluxDB และ Grafana คำแนะนำด้านล่างใช้ได้กับ Ubuntu ตรวจสอบเอกสารคู่มือ Grafana และ InfluxDB สำหรับคำแนะนำในการติดตั้งสำหรับการแจกจ่ายอื่น ๆ
InfluxDB 0.8 ไม่ใช่รุ่นใหม่ล่าสุด แต่ในขณะที่เขียนมีความเข้ากันได้ดีที่สุดกับแอปพลิเคชันนี่คือวิธีการติดตั้ง:
- ล็อกอินเข้าสู่บรรทัดรับคำสั่งบนเซิร์ฟเวอร์
- ถ้าบนระบบปฏิบัติการ 64 บิต:
$ wget http://s3.amazonaws.com/influxdb/influxdb_0.8.8_amd64.deb
$ sudo dpkg -i influxdb_0.8.8_amd64.deb
- ถ้าบนระบบปฏิบัติการ 32 บิต:
$ wget http://s3.amazonaws.com/influxdb/influxdb_0.8.8_i686.deb
$ sudo dpkg -i influxdb_0.8.8_i686.deb - เริ่มภูต:
$ sudo /etc/init.d/influxdb เริ่มต้น - ทำการเริ่มต้นใหม่เมื่อรีบูต:
$ sudo update-rc.d เริ่มต้น influxdb
Grafana 2.1.1 ติดตั้ง:
- ติดตั้ง Grafana ดังที่อธิบายไว้ที่นี่: http://docs.grafana.org/installation/debian/
ตรวจสอบ:
- ตรวจสอบ influxdb โดยเรียกดูผู้ดูแลระบบ influxdb gui: http: // yourserver: 8083 เข้าสู่ระบบในฐานะผู้ใช้รูท, รหัสผ่านรูท
- ยืนยัน grafana โดยไปที่ http: // yourserver: 3000 / ล็อกอิน เข้าสู่ระบบในฐานะผู้ดูแลระบบของผู้ดูแลระบบรหัสผ่าน
ขั้นตอนที่ 4: การเตรียม InfluxDB
- เข้าสู่ระบบเพื่อผู้ดูแลระบบ influxdb (root / root) บน http: // yourserver: 8083 /
- สร้างฐานข้อมูลเมทริก (mydb) ด้วยการตั้งค่าเริ่มต้น ดูภาพหน้าจอ คุณสามารถใช้ชื่ออื่น แต่คุณจะต้องเปลี่ยนการอ้างอิงถึง mydb ในภายหลังในคำแนะนำ
ขั้นตอนที่ 5: ตัดสินใจเกี่ยวกับการวัด
ตอนนี้จะเป็นเวลาที่ดีในการตัดสินใจว่าคุณต้องการวัดและวิธีการ ฉันตัดสินใจด้านล่าง (ซึ่งฉันจะให้ตัวอย่างสคริปต์) สำหรับสถิติของเราเตอร์ฉันเริ่มสำรวจ WL คำสั่งและฉันจะทำเช่นนั้นต่อไป มันกว้างใหญ่ ดูเหมือนว่าจะเป็นอินเตอร์เฟสบรรทัดคำสั่งหลักในการทำงานของเราเตอร์ ที่จริงแล้วฉันคิดว่าคุณสามารถทำทุกอย่างได้ใน Web UI และอีกมากมาย ฉันคิดว่ามันเป็นคำสั่งที่เป็นกรรมสิทธิ์ของ Broadcom ดังนั้นคุณอาจจะต้องมองหาทางเลือกถ้าคุณใช้ชิปเซ็ตอื่น
- ซีพียู ใช้. vmstat คำสั่ง (ซึ่งฉันอยากจะใช้) ไม่ได้ติดตั้งบนเราเตอร์ของฉัน แต่ ด้านบน คำสั่งคือ การใช้ CPU สามารถแยกได้จากเอาต์พุตคำสั่งต่อไปนี้:
$ top -bn1 | หัว -3
- หน่วยความจำ ใช้. หน่วยความจำที่ว่างและใช้แล้วยังสามารถแยกได้จาก ด้านบน คำสั่ง ดูซีพียู
- อุณหภูมิ. มีการอ่านอุณหภูมิต่อชิปไร้สายที่จะพบซ่อนอยู่ลึกในคำสั่ง wl อย่างไรก็ตามผลลัพธ์จะต้องมีการแปลง (ดูสคริปต์) ตัวอย่าง:
$ wl -i eth1 phy_tempsense - ปิง. ฉันตัดสินใจที่จะเปรียบเทียบการเข้าถึงภายนอกของฉันเพื่อวัดการเข้าถึง ping ไปยังเว็บไซต์ที่มีอยู่สองแห่ง ตัวอย่าง:
$ ping -c1 -W1 http://www.google.com
- ทางเข้า. ฉันไม่คิดว่าปริมาณงานจะพร้อมใช้งานหากไม่มีการคำนวณ อย่างไรก็ตามเคาน์เตอร์สามารถพบได้ในมากกว่าหนึ่งสถานที่ / proc / net / dev เป็นแหล่งตัวนับที่ดี ตัวอย่าง:
$ cat / proc / net / dev | หาง +3
- ไคลเอนต์ไร้สาย. จำนวนอุปกรณ์ไร้สายที่เชื่อมต่อต่ออินเตอร์เฟส / ชิป (2.4GHz และ 5.0GHz) ผ่านคำสั่ง wl-:
$ wl -i eth1 assoclist
ฉันมีแนวคิดสำหรับการวัดอื่น ๆ แต่ฉันคิดว่านี่เป็นชุดที่ดีพอที่จะเริ่มต้นด้วย สิ่งที่ต้องคำนึงถึงก็คือเราเตอร์ที่บ้านขนาดเล็กไม่ใช่อุปกรณ์ประมวลผลที่ทรงพลัง การวัดมากเกินไปบ่อยครั้งหรือซับซ้อนเกินไปจะส่งผลต่อประสิทธิภาพของเราเตอร์ในทางลบ
หากคุณเกิดขึ้นกับนักฆ่าตัวชี้วัดโปรดแบ่งปัน (ความคิดเห็น)!
ขั้นตอนที่ 6: การเขียนสคริปต์เราเตอร์
ไฟล์ zip ที่แนบมาประกอบด้วย:
router_assoclist.sh - สคริปต์ตัวอย่างสำหรับการรายงานจำนวนไคลเอนต์ไร้สายที่เชื่อมต่อ
router_cpu.sh - สคริปต์การใช้งาน CPU
router_mem.sh - สคริปต์การใช้งานหน่วยความจำ
router_net.sh - สคริปต์สถิติเครือข่าย ใช้เคาน์เตอร์จราจร ค่าตอบแทนสำหรับการโรลโอเวอร์เคาน์เตอร์
router_ping_ext.sh - ปิงไปกลับสำหรับจุดหมายปลายทางอย่างน้อยหนึ่งแห่ง
router_temp.sh - อุณหภูมิบนชิป 2.4GHz และ 5GHz ในเซลเซียส ถ้าคุณชอบฟาเรนไฮต์ให้ทำคณิตศาสตร์ที่นี่
routerstats.sh - สคริปต์หลักที่ยิงออกจากคนอื่น ๆ
todb.sh - สคริปต์ที่ใช้เวลาสามข้อโต้แย้ง: ชื่อชุดคอลัมน์และจุดข้อมูล ข้อมูลสตริงจะถูกยกมาโดยอัตโนมัติและข้อมูลจะถูกจัดรูปแบบและส่งไปยังฐานข้อมูลเป้าหมาย
นี่คือวิธีที่คุณติดตั้งสคริปต์ตัวอย่าง:
-
เข้าสู่บรรทัดคำสั่งเราเตอร์
-
สร้างไดเร็กทอรีบนระบบไฟล์ถาวร (jffs):
# mkdir / jffs / สคริปต์ / routerstats -
แตกไฟล์ zip และย้ายไฟล์ไปยังไดเรกทอรีใหม่บนเราเตอร์ มีหลายวิธีในการถ่ายโอนไฟล์ e. ก. คุณสามารถใช้แท่ง USB หรือเปิดใช้งาน SSH ใน GUI ผู้ดูแลระบบ (ยังเปิดใช้งานการถ่ายโอนไฟล์ SCP) หากคุณตัดสินใจใช้ SSH / SCP ให้ใช้ Filezilla modaXterm หรือคล้ายกันเพื่อถ่ายโอนไฟล์ไปยังเราเตอร์
- หากคุณไม่ทราบวิธีการ vi ผลงานการแก้ไขตอนนี้จะเป็นเวลาที่ดีในการค้นหา มันเป็นตัวแก้ไขไฟล์เดียวในเราเตอร์ แก้ไขการตั้งค่าใน todb.sh: vi /jffs/scripts/routerstats/todb.sh แก้ไขบรรทัดต่อไปนี้เพื่อให้ตรงกับการตั้งค่าของคุณ คุณอาจจำเป็นต้องเปลี่ยน dbhost-line เท่านั้น:
dbname = "mydb"
dbhost ="srv4: 8086'
ผู้ใช้ = "ราก"
passwd = "ราก"
หากคุณไม่ต้องการเรียนรู้ vi ให้แก้ไขไฟล์ก่อนที่จะย้ายไปยังเราเตอร์ - ทำให้สคริปต์ทำงานทุก 30 วินาที ต่อไปนี้จะเพิ่มสองบรรทัดเข้ากับ บริการเริ่มต้น สคริปต์ที่แทรกสองรายการ cron scheduler เมื่อ bootup ในรายการ linux distros cron ปกติจะยังคงอยู่และคุณจะเรียกใช้ Cru คำสั่งครั้งเดียวและจะทำกับมัน Cron จะดำเนินการในช่วงเวลานาทีเท่านั้นเพื่อให้ได้ช่วงเวลา 30 วินาทีจำเป็นต้องใช้บรรทัดที่สอง บรรทัดที่สองจะทริกเกอร์พร้อมกันกับบรรทัดแรก แต่จะรอ 30 วินาทีก่อนที่จะทำสิ่งที่มีประโยชน์
# echo 'cru a routerstats "* * * * * /jffs/scripts/routerstats/routerstats.sh"' >> / jffs / สคริปต์ / services-start
# echo 'cru a "เราเตอร์ + 30" "* * * * * (sleep 30; /jffs/scripts/routerstats/routerstats.sh)"' >> / jffs / สคริปต์ / services-start
ตรวจสอบ:
- ลงชื่อเข้าใช้อินเทอร์เฟซผู้ดูแลระบบ InfluxDB GUI (http: // yourserver: 8083)
- คลิกที่ "สำรวจข้อมูล" ถัดจาก mydb
- ป้อน "list series" เป็นข้อความค้นหา (ดูภาพหน้าจอ)
ขั้นตอนที่ 7: การแสดง Grafana
การสร้างภาพข้อมูล Grafana คือความสนุกในการเล่น ฉันจะให้แดชบอร์ดตัวอย่างแก่คุณ แต่ฉันแนะนำให้คุณเล่นกับมันและปรับแต่งมัน ลิงค์เหล่านี้ไปยังบทแนะนำวิดีโอที่ดีในหน้าแรกของ Grafana
การสร้างแหล่งข้อมูล:
- เข้าสู่ระบบ grafana (http: // yourserver: 3000)
- สร้างแหล่งข้อมูล mydb (ดูภาพหน้าจอ
นำเข้าแดชบอร์ดตัวอย่าง:
- ดาวน์โหลดไฟล์แดชบอร์ดที่แนบมา มันมีข้อกำหนด json ของแดชบอร์ดทั้งหมด ตรวจสอบว่าคุณต้องการ มันเป็นมนุษย์อ่านได้และสามารถแก้ไขได้ ตัวอย่างเช่นหากคุณสร้างแหล่งข้อมูลด้วยชื่ออื่นที่ไม่ใช่ mydb คุณสามารถค้นหาแทนที่ในไฟล์นี้หรือเปลี่ยนแหล่งข้อมูลใน GUI ในภายหลัง
- นำเข้าแดชบอร์ด (ดูภาพหน้าจอ)
ตอนนี้คุณควรมีแดชบอร์ดที่จะค่อยๆเติมข้อมูล!
โชคดี!