5.02021-11-21T21:48:34ZTemplatesMikrotik - OSPF LLDMikrotik - OSPF LLD## Overview
The Zabbix Mikrotik OSPF template for 4.0, which uses LLD, JSON, SSH for connection to Mikrotik router wihout externel scripts. Discovers OSPF neighbors and monitors STATE and changes. Uses one ssh connection to the Mikrotik for getting data.
This template needs changing macroses:
{$MIKROTIK\_SSH\_PASS}
{$MIKROTIK\_SSH\_PORT}
{$MIKROTIK\_SSH\_USER}
## Author
AlKosmos
TemplatesOSPFOSPF JSONs- OSPF - Neighbor JSONSSHssh.run[OSPF - Neighbor JSON,,{$MIKROTIK_SSH_PORT},]{$UPDATEINT}1d0TEXT:global list [/routing ospf neighbor find]; :global count 0; :global total [:len $list]; :put "{"; :foreach i in=$list do={ :local router [/routing ospf neighbor get value-name=router-id number=$i]; :local address [/routing ospf neighbor get value-name=address number=$i]; :local statechanges [/routing ospf neighbor get value-name=state-changes number=$i]; :local interface [/routing ospf neighbor get value-name=interface number=$i]; :local state [/routing ospf neighbor get value-name=state number=$i]; :if ( $count < $total-1) do={; :put "\"$count\":{\"ID\":\"$i\",\"STATECHANGES\":\"$statechanges\",\"ROUTERID\":\"$router\",\"ADDRESS\":\"$address\",\"INTERFACE\":\"$interface\",\"STATEOSPF\":\"$state\"},";} else={; :put "\"$count\":{\"ID\":\"$i\",\"STATECHANGES\":\"$statechanges\",\"ROUTERID\":\"$router\",\"ADDRESS\":\"$address\",\"INTERFACE\":\"$interface\",\"STATEOSPF\":\"$state\"}";}; :set count ($count + 1); }; :put "}";{$MIKROTIK_SSH_USER}{$MIKROTIK_SSH_PASS}OSPF JSONs
OSPF - NeighborSSHssh.run[OSPF - Neighbor,,{$MIKROTIK_SSH_PORT},]1h:global list [/routing ospf neighbor find]; :global count 0; :global total [:len $list]; :put "{\"data\":["; :foreach i in=$list do={ :local router [/routing ospf neighbor get value-name=router-id number=$i]; :local address [/routing ospf neighbor get value-name=address number=$i]; :local statechanges [/routing ospf neighbor get value-name=state-changes number=$i]; :local interface [/routing ospf neighbor get value-name=interface number=$i]; :local state [/routing ospf neighbor get value-name=state number=$i]; :if ( $count < $total-1) do={; :put "{\"{#NUMBER}\":\"$count\",\"{#ID}\":\"$i\",\"{#STATECHANGES}\":\"$statechanges\",\"{#ROUTERID}\":\"$router\",\"{#ADDRESS}\":\"$address\",\"{#INTERFACE}\":\"$interface\",\"{#STATE}\":\"$state\"},";} else={; :put "{\"{#NUMBER}\":\"$count\",\"{#ID}\":\"$i\",\"{#STATECHANGES}\":\"$statechanges\",\"{#ROUTERID}\":\"$router\",\"{#ADDRESS}\":\"$address\",\"{#INTERFACE}\":\"$interface\",\"{#STATE}\":\"$state\"}";}; :set count ($count + 1); }; :put "]}";{$MIKROTIK_SSH_USER}{$MIKROTIK_SSH_PASS}{#NUMBER}-{#ROUTERID}-{#ADDRESS}-{#INTERFACE}-stateDEPENDENTstate.[{#NUMBER},{#ROUTERID},{#ADDRESS},{#INTERFACE}]0{$HISTORY}0TEXTOSPFJSONPATH$.{#NUMBER}.STATEOSPFssh.run[OSPF - Neighbor JSON,,{$MIKROTIK_SSH_PORT},]{str(Full)}=0OSPF Neighbor ({#NUMBER}-{#ROUTERID}-{#ADDRESS}-{#INTERFACE}) is not FULLDISASTER{#NUMBER}-{#ROUTERID}-{#ADDRESS}-{#INTERFACE}-statechangeDEPENDENTstatechange.[{#NUMBER},{#ROUTERID},{#ADDRESS},{#INTERFACE}]0{$HISTORY}0TEXTOSPFJSONPATH$.{#NUMBER}.STATECHANGESssh.run[OSPF - Neighbor JSON,,{$MIKROTIK_SSH_PORT},]{change()}>10OSPF Neighbor ({#NUMBER}-{#ROUTERID}-{#ADDRESS}-{#INTERFACE}) state change is to highDISASTER{$MIKROTIK_SSH_PASS}11111{$MIKROTIK_SSH_PORT}22{$MIKROTIK_SSH_USER}mikmon