Difference between revisions of "MQTT monitoring Daemon"

From Da Nerd Mage Wiki
Jump to navigation Jump to search
 
(5 intermediate revisions by the same user not shown)
Line 10: Line 10:


<p class="mwt-heading" >An example of what's possible...</p>
<p class="mwt-heading" >An example of what's possible...</p>
== Requirements: ==
= Requirements: =
* <code>apt install mosquitto-clients</code>
* <code>sudo apt install mosquitto-clients</code>
* <code>apt install jq</code>
* <code>sudo apt install jq</code>


== The systemd Service Unit ==
= The systemd Service Unit =


<code>/etc/systemd/system/MQTTmon.service</code>
<code>sudo vi /etc/systemd/system/MQTTmon.service</code>


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash" line="1">
[Unit]
[Unit]


Line 36: Line 36:


* Any time you create or edit a service unit:
* Any time you create or edit a service unit:
** <code>systemctl daemon-reload</code>
** <code>sudo systemctl daemon-reload</code>
** <code>systemctl restart MQTTmon.service</code>
** <code>sudo systemctl restart MQTTmon.service</code>
* Check on how it's going...
* Check on how it's going...
** <code>systemctl status MQTTmon.service</code>
** <code>sudo systemctl status MQTTmon.service</code>


= The Script =
= The Script =


<code>/usr/bin/MQTTmon</code>
<code>sudo vi /usr/bin/MQTTmon</code>


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash" line="1">
#!/bin/bash
#!/bin/bash



Latest revision as of 18:53, 14 April 2023

Proven on:
Logo Debian.png
11 (bullseye)


An example of what's possible...

Requirements:

  • sudo apt install mosquitto-clients
  • sudo apt install jq

The systemd Service Unit

sudo vi /etc/systemd/system/MQTTmon.service

[Unit]

Description=MQTT Monitoring Daemon
After=network.target
Requires=network.target

[Service]
Type=simple
User=root
ExecStart=/usr/bin/MQTTmon
Restart=always

[Install]
WantedBy=multi-user.target
  • Any time you create or edit a service unit:
    • sudo systemctl daemon-reload
    • sudo systemctl restart MQTTmon.service
  • Check on how it's going...
    • sudo systemctl status MQTTmon.service

The Script

sudo vi /usr/bin/MQTTmon

#!/bin/bash

BROKER="LXC-Mosquitto"
TOPIC="turd"

MQTT=`/usr/bin/mosquitto_sub -C 1 -h $BROKER -t $TOPIC`

TARGET=`echo $MQTT {{!}} jq '.Target'`
MESSAGE=`echo $MQTT {{!}} jq '.Message'`
COMMAND=`echo ${MQTT} {{!}} jq '.Command'`

HOST=\"`hostname`\"

if [[ $TARGET == $HOST ]]
  then
    /root/Logit $TARGET , $COMMAND , $MESSAGE
    if [[ $COMMAND == "\"MSG\"" ]] ; then
      /root/Logit "Message is: " $MESSAGE
    fi
    if [[ $COMMAND == "\"WALL\"" ]] ; then
      wall -n $MESSAGE
    fi
    if [[ $COMMAND == "\"DIE\"" ]] ; then
      shutdown
    fi
  else
    /root/Logit $TARGET " got a message too, but this is " $HOST " so we don't GAF."
fi

Sending it messages

In these examples, the machine (an LXC) used for testng is named poop2

  • Telling it to shut down...
    • mosquitto_pub -h LXC-Mosquitto -t turd -m '{"Target":"poop2","Message": "It is time to DIE","Command":"DIE"}'
  • Send a message to all logged-in users terminals
    • mosquitto_pub -h LXC-Mosquitto -t turd -m '{"Target":"poop2","Message": "This is a TURD","Command":"WALL"}'
  • Just log a message (using random logger for testing)
    • mosquitto_pub -h LXC-Mosquitto -t turd -m '{"Target":"poop2","Message": "This is another TURD","Command":"MSG"}'
  • Send a message to a different machine
    • mosquitto_pub -h LXC-Mosquitto -t turd -m '{"Target":"poop1","Message": "This is a TURD too","Command":"DoIt"}'