วงจร

วิธีสร้างกราฟเร้าเตอร์เราเตอร์ในบ้าน: 7 ขั้นตอน

เวก้าผับ ฉบับพิเศษ

เวก้าผับ ฉบับพิเศษ

สารบัญ:

Anonim

โลกเทคโนโลยีนั้นยอดเยี่ยมหรือไม่? บริการที่ยอดเยี่ยมเหล่านี้และซอฟต์แวร์ฟรีที่ปรากฏขึ้นทุกหนทุกแห่ง ฉันต้องการแบ่งปันประสบการณ์ครั้งแรกของฉันกับ Grafana และ InfluxDB โดยมีจุดประสงค์ในการสร้างกราฟแบบต่อเนื่องสวยงามและยืดหยุ่นของสถิติเราเตอร์ของคุณ

ปัญหา: พบเราเตอร์ของฉันได้จากทั่วทุกมุมใน Web-UI การวัดบางอย่างเสนอกราฟแบบเรียลไทม์ในช่วงสองสามนาทีที่ผ่านมา สถิติทั้งหมดถูกรีเซ็ตเมื่อฉันรีบูท ฉันต้องการย้อนเวลาและดูปริมาณงานอุณหภูมิและอื่น ๆ

การแก้ไขปัญหา: InfluxDB สำหรับที่เก็บข้อมูลถาวรและ Grafana สำหรับการสร้างภาพข้อมูล

InfluxDB เป็นฐานข้อมูลอนุกรมเวลา (TSDB) ซึ่งมีความเชี่ยวชาญในการจัดเก็บประวัติข้อมูลแท็กค่าเวลา

Grafana เป็นเครื่องมือสร้างกราฟบนเว็บที่ให้บริการฟรีสำหรับ InfluxDB (และ TSDB อื่น ๆ )

โปรแกรมทั้งสองนั้นง่ายต่อการเริ่มต้นใช้งาน แต่มีประสิทธิภาพ อย่างไรก็ตามฉันไม่มีส่วนเกี่ยวข้องกับโครงการอีเทอร์ โครงการนี้เป็นเพียงการพาคุณไป เมื่อคุณเริ่มต้นคุณอาจพบว่าตัวเองสร้างกราฟทุกสิ่ง เหมาะอย่างยิ่งสำหรับแอปพลิเคชัน IOT เช่น. ฉันกำลังใช้การตั้งค่าเดียวกันสำหรับการวัดเซ็นเซอร์อัตโนมัติที่บ้าน (อุณหภูมิความชื้น ฯลฯ ) ร่วมกับ Openhab

โปรดลุกไหม้และสรรเสริญในความคิดเห็นโปรด และแจ้งให้เราทราบหากมีบางสิ่งไม่ทำงานฉันจึงสามารถแก้ไขได้!

วัสดุ:

ขั้นตอนที่ 1: ข้อกำหนดเบื้องต้น

เราเตอร์

ในการเริ่มต้นกับโปรเจ็กต์นี้คุณต้องใช้เราเตอร์ที่ใช้ Linux พร้อมกับคุณสมบัติดังต่อไปนี้:

  1. การเข้าถึงรูทล็อกอินของบรรทัดคำสั่ง (telnet หรือ ssh)
  2. สนับสนุน Cron
  3. ที่จัดเก็บไฟล์ในตัวเครื่องภายใน 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 ความเสี่ยงอยู่ในระดับต่ำเนื่องจากเป็นไปตามเฟิร์มแวร์หุ้น

  1. บนพีซีให้ดาวน์โหลด MerlinWRT
  2. แตกไฟล์ zip ที่ดาวน์โหลด ไฟล์. trx เก็บเฟิร์มแวร์
  3. เรียกดูอินเทอร์เฟซผู้ดูแลระบบเราเตอร์ (มักพบได้ที่ http://192.168.1.1)
  4. ไปที่: การดูแลระบบ -> อัปเกรดเฟิร์มแวร์ เลือกไฟล์. trx ที่ดาวน์โหลดและอัพโหลด
  5. หลังจากที่เราเตอร์เริ่มระบบใหม่คุณจะใช้งานเมอร์ลิน เข้าสู่ระบบอีกครั้ง
  6. ลุยเลย: Administration-> System เปิดใช้งานสิ่งทั้งหมดของ JFFS กดใช้
  7. รีบู๊ตเราเตอร์

ตรวจสอบ:

  1. ใช้ซอฟต์แวร์เทอร์มินัลเข้าสู่เราเตอร์โดยใช้ผู้ใช้และรหัสผ่านเดียวกันกับในเว็บผู้ดูแลระบบ
  2. ตรวจสอบว่ามี / jffs อยู่และมีไดเรกทอรี "configs" และ "script" (ดูภาพหน้าจอ)

ตอนนี้เราเตอร์พร้อมสำหรับสคริปต์ที่กำหนดเองแล้ว!

ขั้นตอนที่ 3: การเตรียมเซิร์ฟเวอร์

ตามที่ระบุไว้ในคำสั่งล่วงหน้าคุณจำเป็นต้องใช้เซิร์ฟเวอร์ Linux ขนาดเล็กที่ใช้ x86 (Intel, AMD) สำหรับ InfluxDB และ Grafana คำแนะนำด้านล่างใช้ได้กับ Ubuntu ตรวจสอบเอกสารคู่มือ Grafana และ InfluxDB สำหรับคำแนะนำในการติดตั้งสำหรับการแจกจ่ายอื่น ๆ

InfluxDB 0.8 ไม่ใช่รุ่นใหม่ล่าสุด แต่ในขณะที่เขียนมีความเข้ากันได้ดีที่สุดกับแอปพลิเคชันนี่คือวิธีการติดตั้ง:

  1. ล็อกอินเข้าสู่บรรทัดรับคำสั่งบนเซิร์ฟเวอร์
  2. ถ้าบนระบบปฏิบัติการ 64 บิต:
    $ wget http://s3.amazonaws.com/influxdb/influxdb_0.8.8_amd64.deb
    $ sudo dpkg -i influxdb_0.8.8_amd64.deb
  3. ถ้าบนระบบปฏิบัติการ 32 บิต:
    $ wget http://s3.amazonaws.com/influxdb/influxdb_0.8.8_i686.deb
    $ sudo dpkg -i influxdb_0.8.8_i686.deb
  4. เริ่มภูต:
    $ sudo /etc/init.d/influxdb เริ่มต้น
  5. ทำการเริ่มต้นใหม่เมื่อรีบูต:
    $ sudo update-rc.d เริ่มต้น influxdb

Grafana 2.1.1 ติดตั้ง:

  1. ติดตั้ง Grafana ดังที่อธิบายไว้ที่นี่: http://docs.grafana.org/installation/debian/

ตรวจสอบ:

  1. ตรวจสอบ influxdb โดยเรียกดูผู้ดูแลระบบ influxdb gui: http: // yourserver: 8083 เข้าสู่ระบบในฐานะผู้ใช้รูท, รหัสผ่านรูท
  2. ยืนยัน grafana โดยไปที่ http: // yourserver: 3000 / ล็อกอิน เข้าสู่ระบบในฐานะผู้ดูแลระบบของผู้ดูแลระบบรหัสผ่าน

ขั้นตอนที่ 4: การเตรียม InfluxDB

  1. เข้าสู่ระบบเพื่อผู้ดูแลระบบ influxdb (root / root) บน http: // yourserver: 8083 /
  2. สร้างฐานข้อมูลเมทริก (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 - สคริปต์ที่ใช้เวลาสามข้อโต้แย้ง: ชื่อชุดคอลัมน์และจุดข้อมูล ข้อมูลสตริงจะถูกยกมาโดยอัตโนมัติและข้อมูลจะถูกจัดรูปแบบและส่งไปยังฐานข้อมูลเป้าหมาย

นี่คือวิธีที่คุณติดตั้งสคริปต์ตัวอย่าง:

  1. เข้าสู่บรรทัดคำสั่งเราเตอร์

  2. สร้างไดเร็กทอรีบนระบบไฟล์ถาวร (jffs):
    # mkdir / jffs / สคริปต์ / routerstats

  3. แตกไฟล์ zip และย้ายไฟล์ไปยังไดเรกทอรีใหม่บนเราเตอร์ มีหลายวิธีในการถ่ายโอนไฟล์ e. ก. คุณสามารถใช้แท่ง USB หรือเปิดใช้งาน SSH ใน GUI ผู้ดูแลระบบ (ยังเปิดใช้งานการถ่ายโอนไฟล์ SCP) หากคุณตัดสินใจใช้ SSH / SCP ให้ใช้ Filezilla modaXterm หรือคล้ายกันเพื่อถ่ายโอนไฟล์ไปยังเราเตอร์

  4. หากคุณไม่ทราบวิธีการ vi ผลงานการแก้ไขตอนนี้จะเป็นเวลาที่ดีในการค้นหา มันเป็นตัวแก้ไขไฟล์เดียวในเราเตอร์ แก้ไขการตั้งค่าใน todb.sh: vi /jffs/scripts/routerstats/todb.sh แก้ไขบรรทัดต่อไปนี้เพื่อให้ตรงกับการตั้งค่าของคุณ คุณอาจจำเป็นต้องเปลี่ยน dbhost-line เท่านั้น:
    dbname = "mydb"
    dbhost ="srv4: 8086'
    ผู้ใช้ = "ราก"
    passwd = "ราก"
    หากคุณไม่ต้องการเรียนรู้ vi ให้แก้ไขไฟล์ก่อนที่จะย้ายไปยังเราเตอร์
  5. ทำให้สคริปต์ทำงานทุก 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

ตรวจสอบ:

  1. ลงชื่อเข้าใช้อินเทอร์เฟซผู้ดูแลระบบ InfluxDB GUI (http: // yourserver: 8083)
  2. คลิกที่ "สำรวจข้อมูล" ถัดจาก mydb
  3. ป้อน "list series" เป็นข้อความค้นหา (ดูภาพหน้าจอ)

ขั้นตอนที่ 7: การแสดง Grafana

การสร้างภาพข้อมูล Grafana คือความสนุกในการเล่น ฉันจะให้แดชบอร์ดตัวอย่างแก่คุณ แต่ฉันแนะนำให้คุณเล่นกับมันและปรับแต่งมัน ลิงค์เหล่านี้ไปยังบทแนะนำวิดีโอที่ดีในหน้าแรกของ Grafana

การสร้างแหล่งข้อมูล:

  1. เข้าสู่ระบบ grafana (http: // yourserver: 3000)
  2. สร้างแหล่งข้อมูล mydb (ดูภาพหน้าจอ

นำเข้าแดชบอร์ดตัวอย่าง:

  1. ดาวน์โหลดไฟล์แดชบอร์ดที่แนบมา มันมีข้อกำหนด json ของแดชบอร์ดทั้งหมด ตรวจสอบว่าคุณต้องการ มันเป็นมนุษย์อ่านได้และสามารถแก้ไขได้ ตัวอย่างเช่นหากคุณสร้างแหล่งข้อมูลด้วยชื่ออื่นที่ไม่ใช่ mydb คุณสามารถค้นหาแทนที่ในไฟล์นี้หรือเปลี่ยนแหล่งข้อมูลใน GUI ในภายหลัง
  2. นำเข้าแดชบอร์ด (ดูภาพหน้าจอ)

ตอนนี้คุณควรมีแดชบอร์ดที่จะค่อยๆเติมข้อมูล!

โชคดี!