Received incorrect BGP alerts on VyOS

Dear community,

I am having an issue with setting up BGP alerts and received multiple false positive alerts. I have gathered as much information to find the problem here, but let me know if you need any additional information.

Kind regards,

Tom

The output of ./validate.php

[librenms@nmsgui-pop1 ~]$ ./validate.php
===========================================
Component | Version
--------- | -------
LibreNMS  | 25.10.0 (2025-11-12T13:02:16+00:00)
DB Schema | 2025_09_24_145502_add_port_security_table (357)
PHP       | 8.4.8
Python    | 3.9.21
Database  | MariaDB 11.8.5-MariaDB
RRDTool   | 1.7.2
SNMP      | 5.9.1
===========================================

[OK]    Installed from package; no Composer required
[OK]    Database Connected
[OK]    Database Schema is current
[OK]    SQL Server meets minimum requirements
[OK]    lower_case_table_names is enabled
[OK]    MySQL engine is optimal
[OK]    Database and column collations are correct
[OK]    Database schema correct
[OK]    MySQL and PHP time match
[OK]    Distributed Polling setting is enabled globally
[OK]    Connected to rrdcached
[OK]    Active pollers found
[OK]    Dispatcher Service is enabled
[OK]    Locks are functional
[OK]    No python wrapper pollers found
[OK]    Redis is functional
[OK]    rrdtool version ok
[OK]    Connected to rrdcached
[WARN]  Non-git install, updates are manual or from package

My BGP alert template

<html>
<head>
  <title>{{ $alert->title }}</title>
  <style type="text/css">

  body {
    margin: 15px;
    font-family: 'Source Sans Pro', 'Helvetica Neue', Helvetica, Arial, sans-serif;
    font-size: 14px;
    line-height: 20px;
    color: #333333;
    background-color: #fff;
    font-weight: 400;
  }

  .box {
    position: relative;
    -webkit-border-radius: 0px;
    -moz-border-radius: 0px;
    border-radius: 0px;
    background: #ffffff;
    margin-bottom: 10px;
    width: 100%;
    box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 4px rgba(0, 0, 0, 0.24);
  }

  .no-padding {
    padding: 0 !important;
  }

  .table {
    max-width: 600px;
    background-color: #fff;
    border-collapse: collapse;
    border-spacing: 0;
    color: #333;
  }

  .table th, .table td {
    padding: 5px 10px;
    line-height: 20px;
    text-align: left;
    vertical-align: top;
    border-top: 1px solid #f4f4f4;
  }

  .table tbody > tr:nth-child(even) > td, .table tbody > tr:nth-child(even) > th {
    background-color: #f9f9f9;
  }

  .table .state-marker, .state-marker {
    padding: 0px;
    margin: none;
    width: 7px;
  }

  .table tbody > tr > td.state-marker {
    background-color: #004774;
  }

  .table .ALERT .state-marker {
    background-color: #bd1e1e;
  }

  .table tbody > tr.ALERT > td {
    background-color: #ffebee;
  }

  .ALERT {
    color: red;
  }

  .table .ACKNOWLEDGED .state-marker {
    background-color: rgb(187, 135, 4);
  }

  .table tbody > tr.ACKNOWLEDGED > td {
    background-color: #fff8eb;
  }

  .ACKNOWLEDGED {
    color: goldenrod;
  }

  .table .RECOVERED .state-marker {
    background-color: rgb(0, 92, 0);
  }

  .table tbody > tr.RECOVERED > td {
    background-color: #ebffec;
  }

  .RECOVERED {
    color: green;
  }

  .header { font-size: 20px; font-weight: bold; padding: 10px;}

  </style>
</head>
<body>
<table class="table box box-solid">
  <tbody>
    @if ($alert->state == 1) <tr class="ALERT">
    @elseif ($alert->state == 2) <tr class="ACKNOWLEDGED">
    @elseif ($alert->state == 0) <tr class="RECOVERED">
    @elseif ($alert->state == 3) <tr class="RECOVERED">
    @else <tr class="RECOVERED">
    @endif
        <td class="state-marker"></td>
        <td colspan=2 style="padding: 10px; text-transform: uppercase;" class="header">
          @if ($alert->state == 1) <span class="ALERT">{{ $alert->severity }} ALERT @endif
            @if ($alert->state == 2) <span class="ACKNOWLEDGED">acknowledged @endif</span>
            @if ($alert->state == 3) <span class="RECOVERED">recovering @endif</span>
            @if ($alert->state == 0) <span class="RECOVERED">recovered @endif</span>
        </td>
    </tr>
    <tr>
		<td colspan=2><strong>Alert</strong></td>
		<td @if ($alert->state == 1) style="color:red" @endif><strong>BGP Peer Down</strong></td>
	</tr>
    <tr>
        <td colspan=2><strong>Entity</strong></td>
        <td><strong><a href="https://nmsgui-pop1.domain.net/device/{{ $alert->device_id }}/" class="entity-popup red" data-eid="{{ $alert->device_id }}" data-etype="device">{{ explode('.', $alert->hostname)[0] }}</a></strong></td>
    </tr>
    <tr>
        <td colspan=2><strong>Duration</strong></td>
        <td>{{ $alert->elapsed }} ({{ $alert->timestamp }})</td>
    </tr>
    @foreach ($alert->faults as $key => $value)
    <tr>
     <td colspan=2><strong>Peer #{{ $key }}</strong></td>
     <td> {{ $value['bgpPeerIdentifier'] }} </td>
    </tr>
    @endforeach
    <tr>
        <td colspan=3 style="padding: 10px; text-transform: uppercase; text-align: center; font-size: 16px;" class="header">Device details</td>
    </tr>
    <tr>
        <td colspan=2><strong>Device</strong></td>
        <td><strong><a href="https://nmsgui-pop1.domain.net/device/{{ $alert->device_id }}/" class="entity-popup red" data-eid="{{ $alert->device_id }}" data-etype="device">{{ $alert->hostname }}</a></strong></td>
    </tr>
    <tr>
        <td colspan=2><strong>Hardware</strong></td>
        <td>{{ $alert->hardware }}</td>
    </tr>
    <tr>
        <td colspan=2><strong>Operating System</strong></td>
        <td>{{ $alert->os }} {{ $alert->version }}</td>
    </tr>
	<tr>
        <td colspan=2><strong>Device Location</strong></td>
        <td>{{ $alert->location }}</td>
    </tr>
    <tr>
        <td colspan=2><strong>Uptime</strong></td>
        <td>{{ $alert->uptime_long }}</td>
    </tr>
  </tbody>
</table>
</body>
</html>

Router status

Welcome to VyOS!

   ┌── ┐
   . VyOS 1.5-rolling-202410100851
   └ ──┘  current

 * Documentation:  https://docs.vyos.io/en/latest
 * Project news:   https://blog.vyos.io
 * Bug reports:    https://vyos.dev

You can change this banner using "set system login banner post-login" command.

VyOS is a free software distribution that includes multiple components,
you can check individual component licenses under /usr/share/doc/*/copyright
user@router1-pop1:~$ sh bgp sum

IPv4 Unicast Summary (VRF default):
BGP router identifier 192.168.136.213, local AS number 12345 vrf-id 0
BGP table version 15675
RIB entries 311, using 29 KiB of memory
Peers 2, using 141 KiB of memory
Peer groups 1, using 256 bytes of memory

Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt Desc
192.168.7.3     4      12345      6858      6177    15675    0    0 23:40:48           21        6 N/A
192.168.35.229  4      12345         0         0        0    0    0    never       Active        0 N/A

Total number of neighbors 2

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.