Raspberry Pi monitor: Difference between revisions

From WickyWiki
mNo edit summary
Line 20: Line 20:


<source lang=bash>
<source lang=bash>
sudo apt install librrds-perl libhttp-daemon-perl libjson-perl libipc-sharelite-perl libfile-which-perl libsnmp-extension-passpersist-perl
sudo apt install librrds-perl libhttp-daemon-perl libjson-perl libipc-sharelite-perl  
sudo apt install libfile-which-perl libsnmp-extension-passpersist-perl
sudo apt install aptitude
sudo apt install aptitude
</source>
</source>
Line 67: Line 68:
== Modify interval ==
== Modify interval ==


Default is 10 seconds, changed it to 150 seconds (2.5min).
Default is 10 seconds, changed it to 60 seconds.


<syntaxhighlight lang=bash>
<syntaxhighlight lang=bash>
Line 75: Line 76:
<blockquote>
<blockquote>
<syntaxhighlight lang=bash>
<syntaxhighlight lang=bash>
daemon.delay=150
daemon.delay=60
</syntaxhighlight>
</syntaxhighlight>
</blockquote>
</blockquote>
Line 175: Line 176:
</blockquote>
</blockquote>


= Problem with the built-in webserver =
= Debugging =
 
Note: when using a webserver (like Apache as described below) this problem is gone.
 
The Web-server seems to stop regularly. In the Perl code (rpimonitord) there is a "Check if the server is up" part in "Monitor->Run". This is called once every "daemon.delay". With a higher daemon.delay the problem is quite annoying. I changed the code to break-up the delay in 10s parts and check the server every 10s. The problem will still be there but now I only need to wait 10 sec.
 
<syntaxhighlight lang=bash>
sudo nano -l +676 /usr/bin/rpimonitord
</syntaxhighlight>
 
My changes:
 
<syntaxhighlight lang=perl highlight="9,12,18,22,24,27,32" start=663 line>
...
 
for(;;)
{
...
 
# tempo before next process
## exit the 'for' loop if the delay-option is not set
$configuration->{'daemon'}->{'delay'} or last;
## disabled the full delay
#sleep $configuration->{'daemon'}->{'delay'};
 
my $keeplooping = 1;
my $waited = 0;
while($waited < $configuration->{'daemon'}->{'delay'}) {
  ## sleep in 10 second parts
  sleep 10;
  $waited = $waited + 10;
 
  ## skip if noserver-option is set
  if ( !$configuration->{'daemon'}->{'noserver'}) {
        ## kill will return 'true' if the process is running, it doesn't kill anything
        $keeplooping = kill(0,$serverpid);
        $this->Debug(2,"Check server active $keeplooping");
        ## exit the 'while' loop if $keeplooping is 'false'
        $keeplooping or last;
  }
}
 
## exit the 'for' loop if $keeplooping is 'false', this will restart the Web-server process
$keeplooping or last;
}
 
...
</syntaxhighlight>


The StartServer-code is around line 1335:
The StartServer-code is around line 1335:
Line 239: Line 191:
</syntaxhighlight>
</syntaxhighlight>


= Make it work with Apache webserver =
= Make it work with a 'real' webserver =
 
The Web-server seems to stop regularly. In the Perl code (rpimonitord) there is a "Check if the server is up" part in "Monitor->Run". This is called once every "daemon.delay". With a higher daemon.delay the problem is quite annoying. I changed the code to break-up the delay in 10s parts and check the server every 10s. The problem will still be there but now I only need to wait 10 sec.


Some tips (assuming you to use nginx webserver):
Some tips (assuming you to use nginx webserver):
Line 257: Line 211:
</VirtualHost>
</VirtualHost>
</syntaxhighlight>
</syntaxhighlight>
Configure Nginx webserver, port 80 virtual directory:
<syntaxhighlight lang=bash>
sudo nano /etc/apache2/sites-available/raspberrypi.conf
  server
  {
    listen      80;
    server_name wjv.duckdns.org;
    autoindex off;
    index index.htm;
    location /rpimonitor {
        alias /usr/share/rpimonitor/web;
        allow all;
      }
    }
</syntaxhighlight>


Disable the built-in webserver:
Disable the built-in webserver:

Revision as of 08:45, 11 April 2021


Info

With RPi-Monitor you can monitor various aspects of your Raspberry Pi. The package has its own simple webserver. It works well for smaller screens (mobile phone) and history can be visualized with some graphs. If it still isn't to your liking it allows for some serious tinkering.

Local webservice, access within the local network with:

Install

Install packages:

sudo apt install librrds-perl libhttp-daemon-perl libjson-perl libipc-sharelite-perl 
sudo apt install libfile-which-perl libsnmp-extension-passpersist-perl
sudo apt install aptitude

Download and install monitor:

wget https://github.com/XavierBerger/RPi-Monitor-deb/blob/develop/packages/rpimonitor_latest.deb
sudo dpkg -i rpimonitor_latest.deb

Remove

Monitor package:

sudo apt-get purge rpimonitor
rm -fr /etc/rpimonitor
rm -fr /usr/share/rpimonitor

Configure

Documentation

man rpimonitord
man rpimonitord.conf
rpimonitord -i

Main configuration files

Main configuration-file with possible references to the other templates:

sudo nano /etc/rpimonitor/template/raspbian.conf

Configuration of the daemon:

sudo nano /etc/rpimonitor/daemon.conf

Modify interval

Default is 10 seconds, changed it to 60 seconds.

sudo nano -l +17 /etc/rpimonitor/daemon.conf
daemon.delay=60
sudo systemctl restart rpimonitor

Network monitoring

Uncomment all lines that are commented and comment the lines that contain the configuration message.

sudo nano /etc/rpimonitor/template/network.conf

Tweaking

Edit services.conf to check for running apache webservice

sudo nano /etc/rpimonitor/template/services.conf
dynamic.3.name=http
dynamic.3.source=systemctl show -p SubState --value apache2
dynamic.3.regexp=(.*)

web.status.1.content.1.line.1= Label(data.http,"=='running'","Apache","success") + Label(data.http,"!='running'","apache","danger")

Edit cpu.conf to include CPU throttling

(Rapberry Pi 3)

sudo nano /etc/rpimonitor/template/cpu.conf
dynamic.1.name=cpu_frequency
dynamic.1.source=vcgencmd measure_clock arm | sed -e "s/frequency(45)=//g"
dynamic.1.regexp=(.*)
dynamic.1.postprocess=$1/1000000
dynamic.1.rrd=

Link from the main page directly to the corresponding graph

  • Included in new version v2.13+

Modify the function Start() in "rpimonitor.statistics.js" to read a parameter 'graph':

sudo nano -l +26 /usr/share/rpimonitor/web/js/rpimonitor.statistics.js

// ...

function Start() {
  static = getData('static')
  graphconf = getData('statistics')

  //modified: read activestat from url graph parameter
  activestat = GetURLParameter('graph');
  if (activestat == null){
    activestat = localStorage.getItem('activestat') || 0;
  }

  // ... unchanged ...

  activePage = GetURLParameter('activePage');

  // ...
}

// ...

Then modify "uptime.conf" (graph=0) to include a link to the graph. Same for for "cpu.conf" (graph=1), "temperature.conf" (graph=2), etc:

sudo nano /etc/rpimonitor/template/uptime.conf
web.status.1.content.1.name=<a target=_blank href=statistics.html?graph=0>Uptime</a>

Debugging

The StartServer-code is around line 1335:

sudo nano -l +1335 /usr/bin/rpimonitord

Start RPi-Monitor in a terminal with logging:

sudo systemctl stop rpimonitor
sudo rpimonitord -vvvvvv

Make it work with a 'real' webserver

The Web-server seems to stop regularly. In the Perl code (rpimonitord) there is a "Check if the server is up" part in "Monitor->Run". This is called once every "daemon.delay". With a higher daemon.delay the problem is quite annoying. I changed the code to break-up the delay in 10s parts and check the server every 10s. The problem will still be there but now I only need to wait 10 sec.

Some tips (assuming you to use nginx webserver):

Configure Apache2 webserver, port 80 virtual directory:

sudo nano /etc/apache2/sites-available/raspberrypi.conf

	<VirtualHost _default_:80>
	 Alias /rpimonitor/ /usr/share/rpimonitor/web/
	 <Directory /usr/share/rpimonitor/web/>
	  AllowOverride None
	  Require all granted
	 </Directory>
	</VirtualHost>

Configure Nginx webserver, port 80 virtual directory:

sudo nano /etc/apache2/sites-available/raspberrypi.conf

  server
  {
    listen      80;
    server_name wjv.duckdns.org;
    autoindex off;
    index index.htm;

    location /rpimonitor {
        alias /usr/share/rpimonitor/web;
        allow all;
      }
    }


Disable the built-in webserver:

sudo nano /etc/rpimonitor/daemon.conf

	daemon.noserver=1

Problem: the rdd files can't be found by apache. We add a symbolic link to point to the right place:

cd /usr/share/rpimonitor/web
sudo ln -s /var/lib/rpimonitor/stat stat

Restart:

sudo systemctl restart apache2
sudo service rpimonitor restart

Go to:

  • http://<yourserver>/rpimonitor/status.html

Snippets

Clear backup failure notification

I added a function to report backup-errors, it does not clear automatically. Clearing this textfile can only be done as admin. We can use the 'tee' command in combination with 'echo' to make this easy.


cat /var/log/wjv/fail.log
echo "" | sudo tee /var/log/wjv/fail.log
cat /var/log/wjv/fail.log

Apply pending upgrades

The monitor notifies you of pending upgrades. To apply the upgrades:

sudo apt upgrade

Upgradable packages are refreshed once a day. To force a refresh manually:

sudo /etc/init.d/rpimonitor update
sudo systemctl restart rpimonitor

Backup modified files

#rpi-monitor modified files
zip ~/rpi-files.zip /etc/rpimonitor/daemon.conf 
zip ~/rpi-files.zip /etc/rpimonitor/template/raspbian.conf
zip ~/rpi-files.zip /etc/rpimonitor/template/services.conf
zip ~/rpi-files.zip /etc/rpimonitor/template/version.conf 
zip ~/rpi-files.zip /etc/rpimonitor/template/uptime.conf 
zip ~/rpi-files.zip /etc/rpimonitor/template/cpu.conf 
zip ~/rpi-files.zip /etc/rpimonitor/template/temperature.conf 
zip ~/rpi-files.zip /etc/rpimonitor/template/memory.conf 
zip ~/rpi-files.zip /etc/rpimonitor/template/swap.conf 
zip ~/rpi-files.zip /etc/rpimonitor/template/sdcard.conf 
zip ~/rpi-files.zip /etc/rpimonitor/template/network.conf 
zip ~/rpi-files.zip /usr/share/rpimonitor/web/js/rpimonitor.statistics.js

#pi-hole modified file
zip ~/rpi-files.zip /etc/hosts