piframe/docs/munin.md

146 lines
4.5 KiB
Markdown
Raw Permalink Normal View History

# Resource Monitoring
The below commands will setup ```munin``` for monitoring resource utilization on your PiFrame. This is wholly optional but can provide insights if your PiFrame is exhibiting odd behavior.
## Important Notes
* This setup will deploy a *dedicated instance* of ```lighttpd``` to handle access to the ```munin``` data. Given how lean ```lighttpd``` is on resources, this saves many hassles with virtual hosts and the like.
* This setup uses cgi to generate ```munin``` graphs. The Raspberry Pi cpu can take awhile to generate graphs. Please be patient. This approach was chosen to keep ```munin``` from consuming resource generating graphs every time it collects statistics. This also helps prevent excessive disk writes to the micro sd card extending its life.
## Setup
``` sh
apt install munin
nano -w /etc/munin/munin.conf
graph_strategy cgi
html_strategy cron
[piframe]
address 127.0.0.1
use_node_name yes
touch /var/log/munin/munin-cgi-graph.log
chown munin: /var/log/munin/munin-cgi-graph.log
munin-node-configure --shell # activate useful plugins
sudo -sHu munin munin-cron # prime munin data
systemctl enable --now munin-node
systemctl restart munin-node
cat > /etc/lighttpd/lighttpd-munin.conf <<EOF
# Apply the following tweaks to the /etc/munin/munin.conf file ahead of running lighttpd for munin
## Use cgi rendering for graph and html
#graph_strategy cgi
#html_strategy cron
server.username = "munin"
server.groupname = "munin"
server.document-root = "/var/www/html"
server.port = 2813
server.errorlog = "/dev/stdout"
accesslog.filename = "/dev/stdout"
dir-listing.activate = "disable"
server.modules = (
"mod_access",
"mod_accesslog",
"mod_alias",
"mod_rewrite",
"mod_redirect",
"mod_cgi",
"mod_fastcgi",
2020-08-03 17:57:24 +00:00
"mod_auth",
"mod_authn_file",
)
2020-08-03 17:57:24 +00:00
auth.backend = "htdigest"
auth.backend.htdigest.userfile = "/etc/lighttpd/munin.auth"
auth.require = ( "/" =>
(
"method" => "basic",
"realm" => "Munin",
"require" => "valid-user"
)
)
server.pid-file = "/run/lighttpd-munin.pid"
server.follow-symlink = "enable"
index-file.names = ( "index.html", "index.htm" )
url.redirect += ( "^/*$" => "/munin/" )
\$HTTP["url"] =~ "/munin-cgi/munin-cgi-graph" {
alias.url += ( "/munin-cgi/munin-cgi-graph" => "/usr/lib/munin/cgi/munin-cgi-graph" )
cgi.assign = ( "" => "" )
}
alias.url += ( "/munin/static" => "/etc/munin/static" )
alias.url += ( "/munin" => "/var/cache/munin/www" )
mimetype.assign = (
".html" => "text/html",
".txt" => "text/plain",
".css" => "text/css",
".js" => "application/x-javascript",
".jpg" => "image/jpeg",
".jpeg" => "image/jpeg",
".gif" => "image/gif",
".png" => "image/png",
"" => "application/octet-stream"
)
EOF
cat > /etc/systemd/system/lighttpd-munin.service <<EOF
[Unit]
Description=Lighttpd Web Server (munin)
After=syslog.target network.target
[Service]
PrivateTmp=true
ExecStart=/usr/sbin/lighttpd -D -f /etc/lighttpd/lighttpd-munin.conf
ExecReload=/bin/kill -HUP $MAINPID
KillSignal=SIGINT
[Install]
WantedBy=multi-user.target
EOF
2020-08-03 17:57:24 +00:00
cat > /root/lighttpd-auth.pl <<EOF
#!/usr/bin/perl
print "User: ";
\$user = <>;
chomp \$user;
print "Realm: ";
\$realm = <>;
chomp \$realm;
use Term::ReadKey;
{
ReadMode('noecho');
print "Password: ";
\$password = ReadLine(0);
chomp \$password;
print "\\nPassword again: ";
\$password2 = ReadLine(0);
chomp \$password2;
ReadMode('normal');
print "\\n";
if(\$password ne \$password2)
{
print "Passwords don't match\\n";
redo;
}
}
print "\$user:\$realm:";
open(MD5, "|md5sum | cut -b -32") or die;
print MD5 "\$user:\$realm:\$password";
close(MD5);
EOF
chmod a+x /root/lighttpd-auth.pl
apt install libterm-readkey-perl
/root/lighttpd-auth.pl
echo "above_output" >> /etc/lighttpd/munin.auth
systemctl daemon-reload
systemctl enable --now lighttpd-munin
firewall-cmd --zone=public --permanent --add-port=2813/tcp
firewall-cmd --reload
```