Skip to content

Commit fd6a1b0

Browse files
authored
Add events to host and create rsyslog_plugin deb pkg (sonic-net#12059)
Why I did it Create rsyslog plugin deb for other containers/host to install Add events for bgp and host events
1 parent 8211c85 commit fd6a1b0

File tree

20 files changed

+343
-35
lines changed

20 files changed

+343
-35
lines changed

dockers/docker-eventd/supervisord.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ dependent_startup_wait_for=rsyslogd:running
4141

4242

4343
[program:eventd]
44-
command=/usr/sbin/eventd
44+
command=/usr/bin/eventd
4545
priority=3
4646
autostart=false
4747
autorestart=false

dockers/docker-fpm-frr/Dockerfile.j2

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,14 @@ COPY ["TS", "/usr/bin/TS"]
5656
COPY ["files/supervisor-proc-exit-listener", "/usr/bin"]
5757
COPY ["zsocket.sh", "/usr/bin/"]
5858
COPY ["*.json", "/etc/rsyslog.d/"]
59-
# COPY ["files/rsyslog_plugin.conf.j2", "/etc/rsyslog.d/"]
59+
COPY ["files/rsyslog_plugin.conf.j2", "/etc/rsyslog.d/"]
6060
RUN chmod a+x /usr/bin/TSA && \
6161
chmod a+x /usr/bin/TSB && \
6262
chmod a+x /usr/bin/TSC && \
6363
chmod a+x /usr/bin/zsocket.sh
6464

65-
# RUN j2 -f json /etc/rsyslog.d/rsyslog_plugin.conf.j2 /etc/rsyslog.d/events_info.json > /etc/rsyslog.d/bgp_events.conf
66-
# RUN rm -f /etc/rsyslog.d/rsyslog_plugin.conf.j2*
67-
RUN rm -f /etc/rsyslog.d/events_info.json*
65+
RUN j2 -f json /etc/rsyslog.d/rsyslog_plugin.conf.j2 /etc/rsyslog.d/events_info.json > /etc/rsyslog.d/bgp_events.conf
66+
RUN rm -f /etc/rsyslog.d/rsyslog_plugin.conf.j2
67+
RUN rm -f /etc/rsyslog.d/events_info.json
6868

6969
ENTRYPOINT ["/usr/bin/docker_init.sh"]
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"yang_module": "sonic-events-host",
3+
"proclist": [
4+
{
5+
"name": "monit",
6+
"parse_json": "monit_regex.json"
7+
},
8+
{
9+
"name": "sshd",
10+
"parse_json": "sshd_regex.json"
11+
},
12+
{
13+
"name": "systemd",
14+
"parse_json": "systemd_regex.json"
15+
}
16+
]
17+
}

files/build_templates/init_cfg.json.j2

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
("pmon", "enabled", false, "enabled"),
4040
("radv", "enabled", false, "enabled"),
4141
("snmp", "enabled", true, "enabled"),
42-
("eventd", "enabled", true, "enabled"),
42+
("eventd", "enabled", false, "enabled"),
4343
("swss", "enabled", false, "enabled"),
4444
("syncd", "enabled", false, "enabled"),
4545
("teamd", "enabled", false, "enabled")] %}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
[
2+
{
3+
"tag": "disk-usage",
4+
"regex": ".([a-zA-Z0-9-_]*). space usage (\\d+\\.\\d+)% matches resource limit .space usage.(\\d+\\.\\d+)%.",
5+
"params": [ "fs", "usage", "limit" ]
6+
},
7+
{
8+
"tag": "memory-usage",
9+
"regex": "mem usage of (\\d+\\.\\d+)% matches resource limit .mem usage>(\\d+\\.\\d+)%.",
10+
"params": [ "usage", "limit" ]
11+
},
12+
{
13+
"tag": "cpu-usage",
14+
"regex": "cpu user usage of (\\d+\\.\\d+)% matches resource limit .cpu user usage>(\\d+\\.\\d+)%.",
15+
"params": [ "usage", "limit" ]
16+
}
17+
]

files/build_templates/rsyslog_plugin.conf.j2

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ $ModLoad omprog
1212
{% for proc in proclist %}
1313
if re_match($programname, "{{ proc.name }}") then {
1414
action(type="omprog"
15-
binary="/usr/share/sonic/scripts/rsyslog_plugin -r /etc/rsyslog.d/{{ proc.parse_json }} -m {{ yang_module }}"
15+
binary="/usr/bin/rsyslog_plugin -r /etc/rsyslog.d/{{ proc.parse_json }} -m {{ yang_module }}"
1616
output="/var/log/rsyslog_plugin.log"
1717
template="prog_msg")
1818
}

files/build_templates/sonic_debian_extension.j2

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,16 @@ sudo dpkg --root=$FILESYSTEM_ROOT -i {{deb}} || sudo LANG=C DEBIAN_FRONTEND=noni
319319
sudo dpkg --root=$FILESYSTEM_ROOT -i $debs_path/sonic-db-cli_*.deb || \
320320
sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install -f
321321

322+
# Install sonic-rsyslog-plugin
323+
sudo dpkg --root=$FILESYSTEM_ROOT -i $debs_path/sonic-rsyslog-plugin_*.deb || \
324+
sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install -f
325+
326+
# Generate host conf for rsyslog_plugin
327+
j2 -f json $BUILD_TEMPLATES/rsyslog_plugin.conf.j2 $BUILD_TEMPLATES/events_info.json | sudo tee $FILESYSTEM_ROOT_ETC/rsyslog.d/host_events.conf
328+
sudo cp $BUILD_TEMPLATES/monit_regex.json $FILESYSTEM_ROOT_ETC/rsyslog.d/
329+
sudo cp $BUILD_TEMPLATES/sshd_regex.json $FILESYSTEM_ROOT_ETC/rsyslog.d/
330+
sudo cp $BUILD_TEMPLATES/systemd_regex.json $FILESYSTEM_ROOT_ETC/rsyslog.d/
331+
322332
# Install custom-built monit package and SONiC configuration files
323333
sudo dpkg --root=$FILESYSTEM_ROOT -i $debs_path/monit_*.deb || \
324334
sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install -f
@@ -799,10 +809,6 @@ sudo bash -c "echo { > $FILESYSTEM_ROOT_USR_SHARE_SONIC_TEMPLATES/ctr_image_name
799809
{% endfor %}
800810
sudo bash -c "echo } >> $FILESYSTEM_ROOT_USR_SHARE_SONIC_TEMPLATES/ctr_image_names.json"
801811

802-
# copy rsyslog plugin binary for use by all dockers that use plugin to publish events.
803-
# sudo mkdir -p ${FILESYSTEM_ROOT_USR_SHARE_SONIC_SCRIPTS}
804-
# sudo cp ${files_path}/rsyslog_plugin ${FILESYSTEM_ROOT_USR_SHARE_SONIC_SCRIPTS}/
805-
806812
{% for script in installer_start_scripts.split(' ') -%}
807813
if [ -f $TARGET_MACHINE"_{{script}}" ]; then
808814
sudo cp $TARGET_MACHINE"_{{script}}" $FILESYSTEM_ROOT/usr/bin/{{script}}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"tag": "event-sshd",
4+
"regex": "auth fail: Password Incorrect. user:.([a-zA-Z0-9-_]*)",
5+
"params": [ "username" ]
6+
}
7+
]
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"tag": "event-stopped-ctr",
4+
"regex": "Stopped ([a-zA-Z-_\\s]*) container",
5+
"params": [ "ctr-name" ]
6+
}
7+
]

files/image_config/monit/container_checker

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ import sys
2222
from sonic_py_common import multi_asic, device_info
2323
from swsscommon import swsscommon
2424

25+
EVENTS_PUBLISHER_SOURCE = "sonic-events-host"
26+
EVENTS_PUBLISHER_TAG = "event-down-ctr"
27+
2528
def get_expected_running_containers():
2629
"""
2730
@summary: This function will get the expected running & always-enabled containers by following the rule:
@@ -150,6 +153,17 @@ def get_current_running_containers(always_running_containers):
150153
return current_running_containers
151154

152155

156+
def publish_events(lst):
157+
events_handle = swsscommon.events_init_publisher(EVENTS_PUBLISHER_SOURCE)
158+
params = swsscommon.FieldValueMap()
159+
160+
for ctr in lst:
161+
params["name"] = ctr;
162+
swsscommon.event_publish(events_handle, EVENTS_PUBLISHER_TAG, params)
163+
164+
swsscommon.events_deinit_publisher(events_handle)
165+
166+
153167
def main():
154168
"""
155169
@summary: This function will compare the difference between the current running containers
@@ -162,6 +176,7 @@ def main():
162176
expected_running_containers |= always_running_containers
163177
not_running_containers = expected_running_containers.difference(current_running_containers)
164178
if not_running_containers:
179+
publish_events(not_running_containers)
165180
print("Expected containers not running: " + ", ".join(not_running_containers))
166181
sys.exit(3)
167182

0 commit comments

Comments
 (0)