Installation von InfluxDB, Telegraf und Grafana auf dem Raspberry Pi 3

Im Internet bin ich über folgendes schöne Grafana Dashboard gestolpert und wollte es natürlich gleich selbst ausprobieren.

Ich werde hier also beschreiben wie ich

  • InfluxDB, als Datenbank
  • Telegraf als Collector
  • Grafana als Visualisierung
installiert habe.

1. InfluxDB installieren

Die Daten werden alle in der InfluxDB gesammelt. Die aktuelle Version findet ihr hier.

 wget https://dl.influxdata.com/influxdb/releases/influxdb_1.5.1_armhf.deb  
 sudo dpkg -i influxdb_1.5.1_armhf.deb  
 sudo systemctl enable influxdb  
 sudo systemctl start influxdb  

Damit installiert ihr InfluxDB in der Version 1.2.2, aktiviert den automatischen start und startet die Datenbank.

 pi@raspberrypi:/etc/telegraf $ influx  
 Connected to http://localhost:8086 version 1.2.2  
 InfluxDB shell version: 1.2.2  
 > CREATE USER admin WITH PASSWORD '<password>' WITH ALL PRIVILEGES  
 > CREAT DATABASE telegraf  
 > exit  

Damit legen wir einen User admin an und erzeigen die später verwendete Datenbank.

 sudo vi /etc/influxdb/influxdb.conf  
 [http]   
  enabled = true   
  bind-address = ":8086"   
  auth-enabled = true  

Durch diese Anpassung in der influxdb.conf, aktivieren wir die Authentifizierung. Diese drei Parameter unter [http] sollten überprüft und entsprechend angepasst werden.

 sudo systemctl restart influxdb
 influx -username admin -password password  

Nach einem Neustart des Services, ist der Zugang nur noch mittels Username und Passwort möglich.

2. Telegraf installieren

Telegraf  ist der Collector und holt sich alle Daten per SNMP von den Accesspoints. Dazu muss natürlich SNMP und der entsprechende Community String im UniFi Controller konfiguriert werden. Die aktuelle Version findet ihr hier.

 wget https://dl.influxdata.com/telegraf/releases/telegraf_1.2.1_armhf.deb  
 sudo dpkg -i telegraf_1.2.1_armhf.deb  

Damit ladet ihr euch Telegraf und installiert es anschließend.

 wget https://github.com/WaterByWind/grafana-dashboards/archive/master.zip  
 unzip master.zip  
 sudo cp grafana-dashboards-master/UniFi-UAP/mibs/* /usr/share/snmp/mibs  
 sudo apt-get install snmpd  

Damit Telegraf die Daten auswerten kann, müssen die MIBs installiert werden und snmpd. Die MIBs sind im GitHUB Repository des Dashboards bereits enthalten und müssen nur kopiert werden.

Anschließend muss Telegraf konfiguriert werden.

Hier ist meine gesamte telegraf.conf. Wichtig sind die Abschnitte Input und Output. Alles rot markierte müsst ihr anpassen. Wenn ihr bereits eine Telegraf Instanz nutzt, könnt ihr eure Config um die entsprechenden Daten ergänzen, also den kompletten Input-Abschnitt mindestens. Den Communuity-String müsst ihr entsprechend euren Einstellungen im UniFi-Controller anpassen und ip-ap-1 durch die IP oder den DNS-Namen eures Accesspoints.

 # Telegraf Configuration  
 #  
 # Telegraf is entirely plugin driven. All metrics are gathered from the  
 # declared inputs, and sent to the declared outputs.  
 #  
 # Plugins must be declared in here to be active.  
 # To deactivate a plugin, comment out the name and any variables.  
 #  
 # Use 'telegraf -config telegraf.conf -test' to see what metrics a config  
 # file would generate.  
 #  
 # Environment variables can be used anywhere in this config file, simply prepend  
 # them with $. For strings the variable must be within quotes (ie, "$STR_VAR"),  
 # for numbers and booleans they should be plain (ie, $INT_VAR, $BOOL_VAR)  
 # Global tags can be specified here in key="value" format.  
 [global_tags]  
  # dc = "us-east-1" # will tag all metrics with dc=us-east-1  
  # rack = "1a"  
  ## Environment variables can be used as tags, and throughout the config file  
  # user = "$USER"  
 # Configuration for telegraf agent  
 [agent]  
  ## Default data collection interval for all inputs  
  interval = "10s"  
  ## Rounds collection interval to 'interval'  
  ## ie, if interval="10s" then always collect on :00, :10, :20, etc.  
  round_interval = true  
  ## Telegraf will send metrics to outputs in batches of at most  
  ## metric_batch_size metrics.  
  ## This controls the size of writes that Telegraf sends to output plugins.  
  metric_batch_size = 1000  
  ## For failed writes, telegraf will cache metric_buffer_limit metrics for each  
  ## output, and will flush this buffer on a successful write. Oldest metrics  
  ## are dropped first when this buffer fills.  
  ## This buffer only fills when writes fail to output plugin(s).  
  metric_buffer_limit = 10000  
  ## Collection jitter is used to jitter the collection by a random amount.  
  ## Each plugin will sleep for a random time within jitter before collecting.  
  ## This can be used to avoid many plugins querying things like sysfs at the  
  ## same time, which can have a measurable effect on the system.  
  collection_jitter = "0s"  
  ## Default flushing interval for all outputs. You shouldn't set this below  
  ## interval. Maximum flush_interval will be flush_interval + flush_jitter  
  flush_interval = "10s"  
  ## Jitter the flush interval by a random amount. This is primarily to avoid  
  ## large write spikes for users running a large number of telegraf instances.  
  ## ie, a jitter of 5s and interval 10s means flushes will happen every 10-15s  
  flush_jitter = "0s"  
  ## By default, precision will be set to the same timestamp order as the  
  ## collection interval, with the maximum being 1s.  
  ## Precision will NOT be used for service inputs, such as logparser and statsd.  
  ## Valid values are "ns", "us" (or "µs"), "ms", "s".  
  precision = ""  
  ## Logging configuration:  
  ## Run telegraf with debug log messages.  
  # debug = true  
  ## Run telegraf in quiet mode (error log messages only).  
  quiet = false  
  ## Specify the log file name. The empty string means to log to stderr.  
  logfile = "/var/log/telegraf/telegraf.log"  
  ## Override default hostname, if empty use os.Hostname()  
  hostname = ""  
  ## If set to true, do no set the "host" tag in the telegraf agent.  
  omit_hostname = false  
 ###############################################################################  
 #              OUTPUT PLUGINS                  #  
 ###############################################################################  
 # Configuration for influxdb server to send metrics to  
 [[outputs.influxdb]]  
  ## The full HTTP or UDP endpoint URL for your InfluxDB instance.  
  ## Multiple urls can be specified as part of the same cluster,  
  ## this means that only ONE of the urls will be written to each interval.  
  urls = ["http://localhost:8086"] # required  
  ## The target database for metrics (telegraf will create it if not exists).  
  database = "telegraf" # required  
  ## Retention policy to write to. Empty string writes to the default rp.  
  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 = "5s"  
  username = "admin"  
  password = "password"  
  ## Set the user agent for HTTP POSTs (can be useful for log differentiation)  
  user_agent = "telegraf"  
 ###############################################################################  
 #              PROCESSOR PLUGINS                #  
 ###############################################################################  
 # # Print all metrics that pass through this filter.  
 # [[processors.printer]]  
 ###############################################################################  
 #              AGGREGATOR PLUGINS                #  
 ###############################################################################  
 # # Keep the aggregate min/max of each metric passing through.  
 # [[aggregators.minmax]]  
 #  ## General Aggregator Arguments:  
 #  ## The period on which to flush & clear the aggregator.  
 #  period = "30s"  
 #  ## If true, the original metric will be dropped by the  
 #  ## aggregator and will not get sent to the output plugins.  
 #  drop_original = false  
 # Telegraf Configuration for UniFi UAP monitoring via SNMP  
 # These input configurations are required for use with the dashboard  
 # Edit the list of monitored hosts ("agents")  
 #  and SNMP community string ("community") as appropriate.  
 ###############################################################################  
 #              INPUT PLUGINS                  #  
 ###############################################################################  
 ##  
 ## Retrieves details via SNMP from remote agents  
 ##  
 ##  
 ## UniFi APs (Gen 2/Gen 3)  
 ##  
  [[inputs.snmp]]  
   # List of agents to poll  
   agents = [ "ip-ap-1", "ip-ap-2" ]  
   # Polling interval  
   interval = "60s"  
   # Timeout for each SNMP query.  
   timeout = "10s"  
   # Number of retries to attempt within timeout.  
   retries = 3  
   # SNMP version, UAP only supports v1  
   version = 1  
   # SNMP community string.  
   community = "public"  
   # The GETBULK max-repetitions parameter  
   max_repetitions = 10  
   # Measurement name  
   name = "snmp.UAP"  
   ##  
   ## System Details  
   ##  
   # System name (hostname)  
   [[inputs.snmp.field]]  
    is_tag = true  
    name = "sysName"  
    oid = "RFC1213-MIB::sysName.0"  
   # System vendor OID  
   [[inputs.snmp.field]]  
    name = "sysObjectID"  
    oid = "RFC1213-MIB::sysObjectID.0"  
   # System description  
   [[inputs.snmp.field]]  
    name = "sysDescr"  
    oid = "RFC1213-MIB::sysDescr.0"  
   # System contact  
   [[inputs.snmp.field]]  
    name = "sysContact"  
    oid = "RFC1213-MIB::sysContact.0"  
   # System location  
   [[inputs.snmp.field]]  
    name = "sysLocation"  
    oid = "RFC1213-MIB::sysLocation.0"  
   # System uptime  
   [[inputs.snmp.field]]  
    name = "sysUpTime"  
    oid = "RFC1213-MIB::sysUpTime.0"  
   # UAP model  
   [[inputs.snmp.field]]  
    name = "unifiApSystemModel"  
    oid = "UBNT-UniFi-MIB::unifiApSystemModel"  
   # UAP firmware version  
   [[inputs.snmp.field]]  
    name = "unifiApSystemVersion"  
    oid = "UBNT-UniFi-MIB::unifiApSystemVersion"  
   ##  
   ## Host Resources  
   ##  
   # Total memory  
   [[inputs.snmp.field]]  
    name = "memTotal"  
    oid = "FROGFOOT-RESOURCES-MIB::memTotal.0"  
   # Free memory  
   [[inputs.snmp.field]]  
    name = "memFree"  
    oid = "FROGFOOT-RESOURCES-MIB::memFree.0"  
   # Buffer memory  
   [[inputs.snmp.field]]  
    name = "memBuffer"  
    oid = "FROGFOOT-RESOURCES-MIB::memBuffer.0"  
   # Cache memory  
   [[inputs.snmp.field]]  
    name = "memCache"  
    oid = "FROGFOOT-RESOURCES-MIB::memCache.0"  
   # Per-interface traffic, errors, drops  
   [[inputs.snmp.table]]  
    oid = "IF-MIB::ifTable"  
    [[inputs.snmp.table.field]]  
     is_tag = true  
     oid = "IF-MIB::ifDescr"  
   ##  
   ## Interface Details & Metrics  
   ##  
   # Wireless interfaces  
   [[inputs.snmp.table]]  
    oid = "UBNT-UniFi-MIB::unifiRadioTable"  
    [[inputs.snmp.table.field]]  
     is_tag = true  
     oid = "UBNT-UniFi-MIB::unifiRadioName"  
    [[inputs.snmp.table.field]]  
     is_tag = true  
     oid = "UBNT-UniFi-MIB::unifiRadioRadio"  
   # BSS instances  
   [[inputs.snmp.table]]  
    oid = "UBNT-UniFi-MIB::unifiVapTable"  
    [[inputs.snmp.table.field]]  
     is_tag = true  
     oid = "UBNT-UniFi-MIB::unifiVapName"  
    [[inputs.snmp.table.field]]  
     is_tag = true  
     oid = "UBNT-UniFi-MIB::unifiVapRadio"  
   # Ethernet interfaces  
   [[inputs.snmp.table]]  
    oid = "UBNT-UniFi-MIB::unifiIfTable"  
    [[inputs.snmp.table.field]]  
     is_tag = true  
     oid = "UBNT-UniFi-MIB::unifiIfName"  
   ##  
   ## System Performance  
   ##  
   # System load averages  
   [[inputs.snmp.table]]  
    oid = "FROGFOOT-RESOURCES-MIB::loadTable"  
    [[inputs.snmp.table.field]]  
     is_tag = true  
     oid = "FROGFOOT-RESOURCES-MIB::loadDescr"  
   ##  
   ## SNMP metrics  
   ##  
   # Number of SNMP messages received  
   [[inputs.snmp.field]]  
    name = "snmpInPkts"  
    oid = "SNMPv2-MIB::snmpInPkts.0"  
   # Number of SNMP Get-Request received  
   [[inputs.snmp.field]]  
    name = "snmpInGetRequests"  
    oid = "SNMPv2-MIB::snmpInGetRequests.0"  
   # Number of SNMP Get-Next received  
   [[inputs.snmp.field]]  
    name = "snmpInGetNexts"  
    oid = "SNMPv2-MIB::snmpInGetNexts.0"  
   # Number of SNMP objects requested  
   [[inputs.snmp.field]]  
    name = "snmpInTotalReqVars"  
    oid = "SNMPv2-MIB::snmpInTotalReqVars.0"  
   # Number of SNMP Get-Response received  
   [[inputs.snmp.field]]  
    name = "snmpInGetResponses"  
    oid = "SNMPv2-MIB::snmpInGetResponses.0"  
   # Number of SNMP messages sent  
   [[inputs.snmp.field]]  
    name = "snmpOutPkts"  
    oid = "SNMPv2-MIB::snmpOutPkts.0"  
   # Number of SNMP Get-Request sent  
   [[inputs.snmp.field]]  
    name = "snmpOutGetRequests"  
    oid = "SNMPv2-MIB::snmpOutGetRequests.0"  
   # Number of SNMP Get-Next sent  
   [[inputs.snmp.field]]  
    name = "snmpOutGetNexts"  
    oid = "SNMPv2-MIB::snmpOutGetNexts.0"  
   # Number of SNMP Get-Response sent  
   [[inputs.snmp.field]]  
    name = "snmpOutGetResponses"  
    oid = "SNMPv2-MIB::snmpOutGetResponses.0"  

Dieser Befehl testet ob die Datenabfrage soweit funktioniert.

 sudo -u telegraf telegraf --config /etc/telegraf/telegraf.conf --config-directory /etc/telegraf/telegraf.d/ --input-filter snmp -test  

Wenn die Daten auch in die InfluxDB geschrieben werden, seht hier folgende Tabellen:

 pi@raspberrypi:~ $ influx -username admin -password yourpassword  
 Connected to http://localhost:8086 version 1.2.2  
 InfluxDB shell version: 1.2.2  
 > use telegraf  
 Using database telegraf  
 > show measurements  
 name: measurements  
 name  
 ----  
 ifTable  
 loadTable  
 snmp.UAP  
 unifiIfTable  
 unifiRadioTable  
 unifiVapTable  

Ihr könnt damit testen ob die Daten auch in die InfluxDB geschrieben werden.

3. Grafana installieren

Bald haben wir es geschafft, es muss nur noch Grafana installiert und angepasst werden. Die aktuelle Version findet ihr hier.

 wget https://github.com/fg2it/grafana-on-raspberry/releases/download/v4.6.3/grafana_4.6.3_armhf.deb  
 sudo dpkg -i grafana_4.6.3_armhf.deb  
 sudo systemctl enable grafana-server  
 sudo systemctl start grafana-server  

Damit habt ihr Grafana installiert und gestartet.

Ihr erreicht euer Grafana nun über http://<yourip>:3000. Als Login verwendet ihr admin / admin. Anschließend solltet ihr unter http://<yourip>:3000/profile/password euer Passwort ändern. Anschließend müsst ihr noch eure Datenquelle angeben.

Nun könnt ihr das Dashboard importieren und eure Daten betrachten.

10 Gedanken zu „Installation von InfluxDB, Telegraf und Grafana auf dem Raspberry Pi 3“

  1. E! Error in plugin [inputs.snmp]: agent ip-ap-2: setting up connection: Error establishing connection to host: dial udp: lookup ip-ap-2 on 192.168.1.1:53: no such host

    E! Error in plugin [inputs.snmp]: agent ip-ap-1: setting up connection: Error establishing connection to host: dial udp: lookup ip-ap-1 on 192.168.1.1:53: no such host

    Ich bekomme leider diesen ERROR was muss ich statt den ip-ap-2 eintragen :))

    Antworten
    • Hi,

      ich gebe zu, ich hab es etwas schlecht erklärt.
      Anstelle ip-ap-1 und ip-ap-2, trägst du dort den DNS-Namen deines AccessPoints ein, oder die IP-Adresse.

      Grüße,
      Björn

      Antworten
  2. Hi, habe die Anleitung soweit befolgt und bekomme aber beim testen der telegraf.conf folgende Fehler:

    „root@RPi3:~# sudo -u telegraf telegraf –config /etc/telegraf/telegraf.conf –config-directory /etc/telegraf/telegraf.d/ –input-filter snmp -test
    2018-08-06T13:22:45Z E! initializing table : translating: exit status 2: MIB search path: /etc/telegraf/.snmp/mibs:/usr/share/snmp/mibs:/usr/share/snmp/mibs/iana:/usr/share/snmp/mibs/ietf:/usr/share/mibs/site:/usr/share/snmp/mibs:/usr/share/mibs/iana:/usr/share/mibs/ietf:/usr/share/mibs/netsnmp
    Cannot find module (IF-MIB): At line 1 in (none)
    IF-MIB::ifTable: Unknown Object Identifier“

    Die MIBs befinden sich in /usr/share/snmp/mibs
    „root@RPi3:~# ls -alh /usr/share/snmp/mibs
    total 352K
    drwxr-xr-x 2 root root 4.0K Aug 6 15:25 .
    drwxr-xr-x 5 root root 4.0K Aug 6 11:43 ..
    -rw-r–r– 1 root root 8.8K Aug 6 15:21 FROGFOOT-RESOURCES-MIB
    -rw-r–r– 1 root root 1.9K Jan 24 2017 GNOME-SMI.txt
    -rw-r–r– 1 root root 6.7K Dec 8 2014 IANA-ADDRESS-FAMILY-NUMBERS-MIB.txt
    -rw-r–r– 1 root root 33K Dec 8 2014 IANAifType-MIB.txt
    -rw-r–r– 1 root root 4.3K Dec 8 2014 IANA-LANGUAGE-MIB.txt
    -rw-r–r– 1 root root 3.8K Dec 8 2014 IANA-RTPROTO-MIB.txt
    -rw-r–r– 1 root root 5.8K Dec 8 2014 LM-SENSORS-MIB.txt
    -rw-r–r– 1 root root 965 Apr 11 2015 miblist.txt
    -rw-r–r– 1 root root 16K Dec 8 2014 NET-SNMP-AGENT-MIB.txt
    -rw-r–r– 1 root root 9.0K Dec 8 2014 NET-SNMP-EXAMPLES-MIB.txt
    -rw-r–r– 1 root root 9.2K Dec 8 2014 NET-SNMP-EXTEND-MIB.txt
    -rw-r–r– 1 root root 2.0K Dec 8 2014 NET-SNMP-MIB.txt
    -rw-r–r– 1 root root 1.2K Dec 8 2014 NET-SNMP-MONITOR-MIB.txt
    -rw-r–r– 1 root root 3.3K Dec 8 2014 NET-SNMP-PASS-MIB.txt
    -rw-r–r– 1 root root 2.5K Dec 8 2014 NET-SNMP-PERIODIC-NOTIFY-MIB.txt
    -rw-r–r– 1 root root 1.2K Dec 8 2014 NET-SNMP-SYSTEM-MIB.txt
    -rw-r–r– 1 root root 4.8K Dec 8 2014 NET-SNMP-TC.txt
    -rw-r–r– 1 root root 5.0K Dec 8 2014 NET-SNMP-VACM-MIB.txt
    -rw-r–r– 1 root root 1.2K Dec 8 2014 RFC-1215.txt
    -rw-r–r– 1 root root 43K Dec 8 2014 SNMP-TLS-TM-MIB.txt
    -rw-r–r– 1 root root 8.8K Dec 8 2014 SNMP-TSM-MIB.txt
    -rw-r–r– 1 root root 4.0K Aug 6 15:21 UBNT-MIB
    -rw-r–r– 1 root root 14K Aug 6 15:21 UBNT-UniFi-MIB
    -rw-r–r– 1 root root 2.2K Dec 8 2014 UCD-DEMO-MIB.txt
    -rw-r–r– 1 root root 4.6K Dec 8 2014 UCD-DISKIO-MIB.txt
    -rw-r–r– 1 root root 3.1K Dec 8 2014 UCD-DLMOD-MIB.txt
    -rw-r–r– 1 root root 6.4K Dec 8 2014 UCD-IPFILTER-MIB.txt
    -rw-r–r– 1 root root 8.0K Dec 8 2014 UCD-IPFWACC-MIB.txt
    -rw-r–r– 1 root root 18K Dec 8 2014 UCD-SNMP-MIB-OLD.txt
    -rw-r–r– 1 root root 49K Dec 8 2014 UCD-SNMP-MIB.txt“

    Antworten

Schreibe einen Kommentar