Add Structured Events w/ YANG Models (#12270)
Add events for dhcp-relay, bgp, syncd, & kernel.
This commit is contained in:
parent
7e0346c613
commit
09fe3f467f
@ -3,6 +3,16 @@
|
|||||||
"tag": "bgp-state",
|
"tag": "bgp-state",
|
||||||
"regex": "Peer .default\\|([0-9a-f:.]*[0-9a-f]*). admin state is set to .(up|down).",
|
"regex": "Peer .default\\|([0-9a-f:.]*[0-9a-f]*). admin state is set to .(up|down).",
|
||||||
"params": [ "ip", "status" ]
|
"params": [ "ip", "status" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tag": "zebra-no-buff",
|
||||||
|
"regex": "No buffer space available",
|
||||||
|
"params": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tag": "notification",
|
||||||
|
"regex": "NOTIFICATION: (received|sent) (?:to|from) neighbor ([0-9a-f:.]*[0-9a-f+]*)\\s*.* (\\d*)\/(\\d*)",
|
||||||
|
"params": [ "is-sent", "ip", "major-code", "minor-code" ]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
7
files/build_templates/dhcp_relay_regex.json
Normal file
7
files/build_templates/dhcp_relay_regex.json
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"tag": "dhcp-relay-discard",
|
||||||
|
"regex": "Discarding packet received on ([a-zA-Z0-9-_]*) interface that has no IPv4 address assigned.",
|
||||||
|
"params": [ "ifname" ]
|
||||||
|
}
|
||||||
|
]
|
7
files/build_templates/dockerd_regex.json
Normal file
7
files/build_templates/dockerd_regex.json
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"tag": "invalid-freelist",
|
||||||
|
"regex": "invalid freelist",
|
||||||
|
"params": []
|
||||||
|
}
|
||||||
|
]
|
@ -12,6 +12,30 @@
|
|||||||
{
|
{
|
||||||
"name": "systemd",
|
"name": "systemd",
|
||||||
"parse_json": "systemd_regex.json"
|
"parse_json": "systemd_regex.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "dhcp_relay",
|
||||||
|
"parse_json": "dhcp_relay_regex.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "syncd",
|
||||||
|
"parse_json": "syncd_regex.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "kernel",
|
||||||
|
"parse_json": "kernel_regex.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "dockerd",
|
||||||
|
"parse_json": "dockerd_regex.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "arista",
|
||||||
|
"parse_json": "seu_regex.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "python3",
|
||||||
|
"parse_json": "seu_regex.json"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
7
files/build_templates/kernel_regex.json
Normal file
7
files/build_templates/kernel_regex.json
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"tag": "event-kernel",
|
||||||
|
"regex": "(write failed|Write protected|Remounting filesystem read-only|zlib decompression failed, data probably corrupt)",
|
||||||
|
"params": [ "fail_type:ret=(arg==\"write failed\")and\"write_failed\"or((arg==\"Write protected\")and\"write_protected\"or((arg==\"Remounting filesystem read-only\")and\"remount_read_only\"or((arg==\"zlib decompression failed, data probably corrupt\")and\"zlib_decompress\"or\"\")))" ]
|
||||||
|
}
|
||||||
|
]
|
7
files/build_templates/seu_regex.json
Normal file
7
files/build_templates/seu_regex.json
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"tag": "event-seu",
|
||||||
|
"regex": "SEU error was detected",
|
||||||
|
"params": []
|
||||||
|
}
|
||||||
|
]
|
@ -331,6 +331,11 @@ j2 -f json $BUILD_TEMPLATES/rsyslog_plugin.conf.j2 $BUILD_TEMPLATES/events_info.
|
|||||||
sudo cp $BUILD_TEMPLATES/monit_regex.json $FILESYSTEM_ROOT_ETC/rsyslog.d/
|
sudo cp $BUILD_TEMPLATES/monit_regex.json $FILESYSTEM_ROOT_ETC/rsyslog.d/
|
||||||
sudo cp $BUILD_TEMPLATES/sshd_regex.json $FILESYSTEM_ROOT_ETC/rsyslog.d/
|
sudo cp $BUILD_TEMPLATES/sshd_regex.json $FILESYSTEM_ROOT_ETC/rsyslog.d/
|
||||||
sudo cp $BUILD_TEMPLATES/systemd_regex.json $FILESYSTEM_ROOT_ETC/rsyslog.d/
|
sudo cp $BUILD_TEMPLATES/systemd_regex.json $FILESYSTEM_ROOT_ETC/rsyslog.d/
|
||||||
|
sudo cp $BUILD_TEMPLATES/dhcp_relay_regex.json $FILESYSTEM_ROOT_ETC/rsyslog.d/
|
||||||
|
sudo cp $BUILD_TEMPLATES/syncd_regex.json $FILESYSTEM_ROOT_ETC/rsyslog.d/
|
||||||
|
sudo cp $BUILD_TEMPLATES/kernel_regex.json $FILESYSTEM_ROOT_ETC/rsyslog.d/
|
||||||
|
sudo cp $BUILD_TEMPLATES/dockerd_regex.json $FILESYSTEM_ROOT_ETC/rsyslog.d/
|
||||||
|
sudo cp $BUILD_TEMPLATES/seu_regex.json $FILESYSTEM_ROOT_ETC/rsyslog.d/
|
||||||
|
|
||||||
# Install custom-built monit package and SONiC configuration files
|
# Install custom-built monit package and SONiC configuration files
|
||||||
sudo dpkg --root=$FILESYSTEM_ROOT -i $debs_path/monit_*.deb || \
|
sudo dpkg --root=$FILESYSTEM_ROOT -i $debs_path/monit_*.deb || \
|
||||||
|
7
files/build_templates/syncd_regex.json
Normal file
7
files/build_templates/syncd_regex.json
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"tag": "syncd-failure",
|
||||||
|
"regex": "(MMU ERR Type|L3 route add failed with error|Assertion failed|Received switch event|SER Parity Check Error)",
|
||||||
|
"params": [ "fail_type:ret=(arg==\"Received switch event\")and\"switch_event\"or((arg==\"Assertion Failed\")and\"assert\"or((arg==\"SER Parity Check Error\")and\"parity_check\"or((arg==\"MMU ERR Type\")and\"mmu_err\"or((arg==\"route add failed\")and\"route_add_failed\"or\"\"))))" ]
|
||||||
|
}
|
||||||
|
]
|
@ -2,6 +2,11 @@
|
|||||||
{
|
{
|
||||||
"tag": "event-stopped-ctr",
|
"tag": "event-stopped-ctr",
|
||||||
"regex": "Stopped ([a-zA-Z-_\\s]*) container",
|
"regex": "Stopped ([a-zA-Z-_\\s]*) container",
|
||||||
"params": [ "ctr-name" ]
|
"params": [ "ctr_name" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tag": "watchdog-timeout",
|
||||||
|
"regex": "(?:watchdog|Watchdog) timeout .limit.([0-9])min.",
|
||||||
|
"params": [ "limit" ]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -158,7 +158,7 @@ def publish_events(lst):
|
|||||||
params = swsscommon.FieldValueMap()
|
params = swsscommon.FieldValueMap()
|
||||||
|
|
||||||
for ctr in lst:
|
for ctr in lst:
|
||||||
params["name"] = ctr;
|
params["ctr_name"] = ctr;
|
||||||
swsscommon.event_publish(events_handle, EVENTS_PUBLISHER_TAG, params)
|
swsscommon.event_publish(events_handle, EVENTS_PUBLISHER_TAG, params)
|
||||||
|
|
||||||
swsscommon.events_deinit_publisher(events_handle)
|
swsscommon.events_deinit_publisher(events_handle)
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
|
|
||||||
#include "dhcp_mon.h"
|
#include "dhcp_mon.h"
|
||||||
#include "dhcp_devman.h"
|
#include "dhcp_devman.h"
|
||||||
|
#include "events.h"
|
||||||
|
|
||||||
/** DHCP device/interface state */
|
/** DHCP device/interface state */
|
||||||
typedef struct
|
typedef struct
|
||||||
@ -40,6 +41,8 @@ static struct event *ev_sigterm;
|
|||||||
/** libevent SIGUSR1 signal event struct */
|
/** libevent SIGUSR1 signal event struct */
|
||||||
static struct event *ev_sigusr1;
|
static struct event *ev_sigusr1;
|
||||||
|
|
||||||
|
event_handle_t g_events_handle;
|
||||||
|
|
||||||
/** DHCP monitor state data for aggregate device for mgmt device */
|
/** DHCP monitor state data for aggregate device for mgmt device */
|
||||||
static dhcp_mon_state_t state_data[] = {
|
static dhcp_mon_state_t state_data[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
@ -95,7 +98,15 @@ static void check_dhcp_relay_health(dhcp_mon_state_t *state_data)
|
|||||||
{
|
{
|
||||||
case DHCP_MON_STATUS_UNHEALTHY:
|
case DHCP_MON_STATUS_UNHEALTHY:
|
||||||
if (++state_data->count > dhcp_unhealthy_max_count) {
|
if (++state_data->count > dhcp_unhealthy_max_count) {
|
||||||
syslog(LOG_ALERT, state_data->msg, state_data->count * window_interval_sec, context->intf);
|
auto duration = state_data->count * window_interval_sec;
|
||||||
|
std::string vlan(context->intf);
|
||||||
|
syslog(LOG_ALERT, state_data->msg, duration, vlan);
|
||||||
|
if (state_data->check_type == DHCP_MON_CHECK_POSITIVE) {
|
||||||
|
event_params_t params = {
|
||||||
|
{ "vlan", vlan },
|
||||||
|
{ "duration", std::to_string(duration) }};
|
||||||
|
event_publish(g_events_handle, "dhcp-relay-disparity", ¶ms);
|
||||||
|
}
|
||||||
dhcp_devman_print_status(context, DHCP_COUNTERS_SNAPSHOT);
|
dhcp_devman_print_status(context, DHCP_COUNTERS_SNAPSHOT);
|
||||||
dhcp_devman_print_status(context, DHCP_COUNTERS_CURRENT);
|
dhcp_devman_print_status(context, DHCP_COUNTERS_CURRENT);
|
||||||
}
|
}
|
||||||
@ -179,6 +190,8 @@ int dhcp_mon_init(int window_sec, int max_count)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_events_handle = events_init_publisher("sonic-events-dhcp-relay");
|
||||||
|
|
||||||
rv = 0;
|
rv = 0;
|
||||||
} while (0);
|
} while (0);
|
||||||
|
|
||||||
@ -203,6 +216,8 @@ void dhcp_mon_shutdown()
|
|||||||
event_free(ev_sigusr1);
|
event_free(ev_sigusr1);
|
||||||
|
|
||||||
event_base_free(base);
|
event_base_free(base);
|
||||||
|
|
||||||
|
events_deinit_publisher(g_events_handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user