Many of our clients want to collect and visualise data from their infrastructure, in a simple, vendor agnostic way.

Evobeat is a python framework for collecting data and posting to Elasticsearch. Any data can be collected from any device, and once posted to Elasticsearch used to provide meaningful dashboards.

In the first release, available at https://github.com/evolvere-tech/evobeat, we have included Aristabeat, which collects data from Arista switches.

All Arista power supplies on one chart. Here on power supply has failed.

All Arista power supplies on one chart. Here on power supply has failed.

BGP peer changes can be shown on a serial diff graph.

BGP peer changes can be shown on a serial diff graph.

Track 'down' and 'error-disabled' interfaces.

Track 'down' and 'error-disabled' interfaces.

Monitor CVP configuration compliance.

Monitor CVP configuration compliance.

How To Install

git clone https://github.com/evolvere-tech/evobeat.git

Install Samples (optional)
source healthcheck/healthcheck_venv/bin/activate
./import_samples data -elastic_host localhost
./import_samples dashboard -elastic_host localhost 

Edit healthcheck/arista/config/arista_test.yaml. Sample config running elastic search on localhost, and collecting data on two switches:
elastic_host: localhost
elastic_index: arista
# aristabest writes to two indices:
# elastic_index + '_health'
# elastic_index + '_unreachable'
interval: 600
debug: False
# Provide list of switches, or list of Arista CVPs.
# inventory will be ignored if CVP is provided.
- 'eos-01'
- 'eos-02'

# - 'IP address or hostname of CVP'
USERNAME: 'admin'
PASSWORD: 'admin'
# env and dc fields will be saved in every elastic document, set values to help group documents.
env: 'dev'
dc: TEST

Testing the Configuration
source healthcheck/healthcheck_venv/bin/activate
cd healthcheck/arista/

This directory contains aristabeat.py, and two sub-directories, config and logs.

./aristabeat.py test -name arista_test
INFO: Configuration OK.

Note that -name must match filename in config without .yaml at the end.

Run aristabeat in debug mode to verify data is being collected:
./aristabeat.py run -name arista_test --debug
WARNING: arista_env_power collection failed, check log for details.
WARNING: arista_env_cooling collection failed, check log for details.
WARNING: arista_reload_cause collection failed, check log for details.
INFO: collect_data: Data collected from device eos-01.
{u'id': u'1',
u'jsonrpc': u'2.0',
u'result': [{u'full': True, u'resetCauses': []}]}
{'bgp': {'peer': u'',
'peer_status': u'Active',
'peers': 2,
'vrf': u'default'},
'cvp_compliance': 'unknown',
'dc': 'TEST',
'device': 'eos-01',
'discards': {'in': 0, 'out': 0},
'interfaces': {'disabled': 0, 'down': 0, 'err-disabled': 0, 'up': 4},
'lldp_neighbors': 1,
'mlag_detail': {},
'port_channel': {'inactive_ports': 0},
'routes': {'bgp_total': 0, 'connected': 3, 'static': 0, 'total': 3},
'snmp': {'servers': 0, 'status': u'disabled'},
'system': {'fifteen_min': 0.14,
'five_min': 0.14,
'mem_utilization': 18.16,
'one_min': 0.17},
'tacacs': {'failures': 0, 'timeouts': 0},
'temperature': {'alert_count': 0, 'status': u'unknownTemperatureAlarmLevel'},

Note that virtual devices do not support all commands, data collected for other fields.

Running collector under Supervisord
cd evobeat/supervisor
supervisord -c supervisord.conf

Verify collector is RUNNING:

supervisorctl status
arista_health_test RUNNING pid 4314, uptime 5:22:10

Create index pattern in Kibana
Wait 10 minutes for first collection to run. Check logs to verify that data has been posted to elastic search:

tail -f healthcheck/arista/logs/arista_test.log
Add index pattern 'arista_health' in Kibana>Management>Index Patterns>Create Index Pattern