Home

Awesome

<img src="https://gh.notifiarr.com/img/repo-logo.png">

This is the unified client for Notifiarr.com. The client enables content requests from Media Bot in your Discord Server and also provides reports for Plex usage and system health among many other features.

Installation

Linux

Linux repository hosting provided by packagecloud

This works on any system with apt or yum. If your system does not use APT or YUM, then download a binary from the Releases page.

On Linux, Notifiarr runs as user:group of notifiarr:notifiarr.

Install the Go Lift package repo and Notifiarr with this command:

curl -s https://golift.io/repo.sh | sudo bash -s - notifiarr

After install, edit the config and start the service:

sudo nano /etc/notifiarr/notifiarr.conf
sudo systemctl restart notifiarr

Arch Linux

Example of the above in shell form:

curl https://raw.githubusercontent.com/Notifiarr/notifiarr/main/userscripts/install.sh | sudo bash

nano /etc/notifiarr/notifiarr.conf
systemctl start notifiarr

FreeBSD

Example of the above in shell form:

wget -qO- https://raw.githubusercontent.com/Notifiarr/notifiarr/main/userscripts/install.sh | sudo bash

vi /usr/local/etc/notifiarr/notifiarr.conf
service notifiarr start

On FreeBSD, Notifiarr runs as user:group of notifiarr:notifiarr.

macOS Install

Homebrew

Homebrew is no longer a supported installation method. Download the DMG and put Notifiarr.app in /Applications instead.

macOS App

Windows

Docker

This project builds automatically in Docker Cloud and creates ready-to-use multi-architecture images. The latest tag is always a tagged release in GitHub. The main tag corresponds to the main branch in GitHub and may be broken.

A sample docker compose file is found in Examples in this repo.

Unraid Users - You must configure a Notifiarr API Key in the Unraid Template. If you wish to use Plex then you'll also need to set the Plex Token and Plex URL in the template as well.

Docker Users - Note that Docker Environmental Variables - and thus the Unraid Template - override the Config file.

Docker Config File

docker pull golift/notifiarr
docker run --hostname=$(hostname) -d \
-v /your/appdata/notifiarr/:/config \
-v /var/run/utmp:/var/run/utmp \
golift/notifiarr
docker logs <container id from docker run>

Docker Environment Variables

See below for a list of which environment variables are available. You must set --privileged when monitor drives is enabled on the website.

docker pull golift/notifiarr
docker run --hostname $(hostname) -d --privileged \
  -v /var/run/utmp:/var/run/utmp \
  -e "DN_API_KEY=abcdef-12345-bcfead-43312-bbbaaa-123" \
  -e "DN_SONARR_0_URL=http://localhost:8989" \
  -e "DN_SONARR_0_API_KEY=kjsdkasjdaksdj" \
  golift/notifiarr
docker logs <container id from docker run>

Configuration Information

WebUI

To enable the webui, add this parameter to your config file, toward the top next to quiet, and restart the client:

ui_password = "username:9CharacterPassword"

Use a password that is at least 9 characters long. Once you log into the web interface, you can change the password and it will be saved encrypted (so no one can snoop it).

You may also set ui_password to the value of "webauth" to enable proxy authentication support. You must also add your auth proxy IP or CIDR to the upstreams setting for this to work. The proxy must pass x-webauth-user: username as a header, and you will be automatically logged in.

Config Settings

Config NameVariable NameDefault / Note
api_keyDN_API_KEYRequired / API Key from Notifiarr.com
auto_updateDN_AUTO_UPDATEoff / Set to daily to turn on automatic updates (windows only)
bind_addrDN_BIND_ADDR0.0.0.0:5454 / The IP and port to listen on
quietDN_QUIETfalse / Turns off output. Set a log_file if this is true
ui_passwordDN_UI_PASSWORDNone by default. Set a username:password & change the password to encrypt it
urlbaseDN_URLBASEdefault: / Change the web root with this setting
upstreamsDN_UPSTREAMS_0List of upstream networks that can set X-Forwarded-For
ssl_key_fileDN_SSL_KEY_FILEProviding SSL files turns on the SSL listener
ssl_cert_fileDN_SSL_CERT_FILEProviding SSL files turns on the SSL listener
log_fileDN_LOG_FILENone by default. Optionally provide a file path to save app logs
http_logDN_HTTP_LOGNone by default. Provide a file path to save HTTP request logs
log_file_mbDN_LOG_FILE_MB100 / Max size of log files in megabytes
log_filesDN_LOG_FILES10 / Log files to keep after rotating. 0 disables rotation
file_modeDN_FILE_MODE"0600" / Unix octal filemode for new log files
timeoutDN_TIMEOUT60s / Global API Timeouts (all apps default)

All applications below (starr, downloaders, tautulli, plex) have a timeout setting. If the configuration for an application is missing the timeout, the global timeout (above) is used.

Secret Settings

Recommend not messing with these unless instructed to do so.

Config NameVariable NameDefault / Note
extra_keysDN_EXTRA_KEYS_0[] (empty list) / Add keys to allow API requests from places besides notifiarr.com
modeDN_MODEproduction / Change application mode: development or production
debugDN_DEBUGfalse / Adds payloads and other stuff to the log output; very verbose/noisy
debug_logDN_DEBUG_LOG"" / Set a file system path to write debug logs to a dedicated file
max_bodyDN_MAX_BODYUnlimited, 0 / Maximum debug-log body size (integer) for all debug payloads
TMPDIR%TMP% on Windows. Varies depending on system; must be writable if using Backup Corruption Check

Note: You may disable the GUI (menu item) on Windows by setting the env variable USEGUI to false.

System Snapshot

This application can take a snapshot of your system at an interval and send you a notification. Snapshot means system health like cpu, memory, disk, raid, users, etc. Other data available in the snapshot: mysql health, iotop, iostat and top data. Some of this may only be available on Linux, but other platforms have similar abilities.

If you monitor drive health you must have smartmontools (smartctl) installed. If you use smartctl on Linux, you must enable sudo. Add the sudoers entry below to /etc/sudoers and fix the path to smartctl if yours differs. If you monitor raid and use MegaCli (LSI card), add the appropriate sudoers entry for that too.

Usage of smartctl on Windows requires running this application as an administrator. Not entirely sure why, but the elevated privileges allow smartctl to gather drive data.

To monitor application disk I/O you may install iotop and add the sudoers entry for it, shown below. This feature is enabled on the website.

Snapshot Sudoers

The following sudoers entries are used by various snapshot features. Add them if you use the respective feature. You can usually just put the following content into /etc/sudoers or /etc/sudoers.d/00-notifiarr.

# Allows drive health monitoring on macOS, Linux/Docker and FreeBSD.
notifiarr ALL=(root) NOPASSWD:/usr/sbin/smartctl *

# Allows disk utilization monitoring on Linux (non-Docker).
notifiarr ALL=(root) NOPASSWD:/usr/sbin/iotop *

# Allows monitoring megaraid volumes on macOS, Linux/Docker and FreeBSD.
# Rarely needed, and you'll know if you need this.
notifiarr ALL=(root) NOPASSWD:/usr/sbin/MegaCli64 -LDInfo -Lall -aALL

These paths may not be the same on all systems. Adjust the username for macOS.

Snapshot Packages

Snapshot Configuration

There is no client configuration for snapshots (except Nvidia and MySQL, below). Snapshot configuration is found on the website.

MySQL Snapshots

You may add mysql credentials to your notifiarr configuration to snapshot mysql service health. This feature snapshots SHOW PROCESSLIST and SHOW STATUS data.

Access to a database is not required. Example Grant:

GRANT PROCESS ON *.* to 'notifiarr'@'localhost'
Config NameVariable NameNote
snapshot.mysql.nameDN_SNAPSHOT_MYSQL_NAMESetting a name enables service checks of MySQL
snapshot.mysql.hostDN_SNAPSHOT_MYSQL_HOSTSomething like: localhost:3306
snapshot.mysql.userDN_SNAPSHOT_MYSQL_USERUsername in the GRANT statement
snapshot.mysql.passDN_SNAPSHOT_MYSQL_PASSPassword for the user in the GRANT statement

Nvidia Snapshots

You may report your GPU and memory Utilization for Nvidia cards. Automatic if nvidia-smi is found in PATH.

Config NameVariable NameNote
snapshot.nvidia.disabledDN_SNAPSHOT_NVIDIA_DISABLEDSet to true to disable Nvidia data collection
snapshot.nvidia.smi_pathDN_SNAPSHOT_NVIDIA_SMI_PATHOptional path to nvidia-smi, or nvidia-smi.exe
snapshot.nvidia.bus_idsDN_SNAPSHOT_NVIDIA_BUS_ID_0List of Bus IDs to restrict data collection to

Lidarr

Config NameVariable NameNote
lidarr.nameDN_LIDARR_0_NAMENo Default. Setting a name enables service checks
lidarr.urlDN_LIDARR_0_URLNo Default. Something like: http://lidarr:8686
lidarr.api_keyDN_LIDARR_0_API_KEYNo Default. Provide URL and API key if you use Readarr
lidarr.usernameDN_LIDARR_0_USERNAMEProvide username if using backup corruption check and auth is enabled
lidarr.passwordDN_LIDARR_0_PASSWORDProvide password if using backup corruption check and auth is enabled
lidarr.http_userDN_LIDARR_0_HTTP_USERProvide username if Lidarr uses basic auth (uncommon) and BCC enabled
lidarr.http_passDN_LIDARR_0_HTTP_PASSProvide password if Lidarr uses basic auth (uncommon) and BCC enabled

Prowlarr

Config NameVariable NameNote
prowlarr.nameDN_PROWLARR_0_NAMENo Default. Setting a name enables service checks
prowlarr.urlDN_PROWLARR_0_URLNo Default. Something like: http://prowlarr:9696
prowlarr.api_keyDN_PROWLARR_0_API_KEYNo Default. Provide URL and API key if you use Prowlarr
prowlarr.usernameDN_PROWLARR_0_USERNAMEProvide username if using backup corruption check and auth is enabled
prowlarr.passwordDN_PROWLARR_0_PASSWORDProvide password if using backup corruption check and auth is enabled
prowlarr.http_userDN_PROWLARR_0_HTTP_USERProvide username if Prowlarr uses basic auth (uncommon) and BCC enabled
prowlarr.http_passDN_PROWLARR_0_HTTP_PASSProvide password if Prowlarr uses basic auth (uncommon) and BCC enabled

Radarr

Config NameVariable NameNote
radarr.nameDN_RADARR_0_NAMENo Default. Setting a name enables service checks.
radarr.urlDN_RADARR_0_URLNo Default. Something like: http://localhost:7878
radarr.api_keyDN_RADARR_0_API_KEYNo Default. Provide URL and API key if you use Radarr
radarr.usernameDN_RADARR_0_USERNAMEProvide username if using backup corruption check and auth is enabled
radarr.passwordDN_RADARR_0_PASSWORDProvide password if using backup corruption check and auth is enabled
radarr.http_userDN_RADARR_0_HTTP_USERProvide username if Radarr uses basic auth (uncommon) and BCC enabled
radarr.http_passDN_RADARR_0_HTTP_PASSProvide password if Radarr uses basic auth (uncommon) and BCC enabled

Readarr

Config NameVariable NameNote
readarr.nameDN_READARR_0_NAMENo Default. Setting a name enables service checks
readarr.urlDN_READARR_0_URLNo Default. Something like: http://localhost:8787
readarr.api_keyDN_READARR_0_API_KEYNo Default. Provide URL and API key if you use Readarr
readarr.usernameDN_READARR_0_USERNAMEProvide username if using backup corruption check and auth is enabled
readarr.passwordDN_READARR_0_PASSWORDProvide password if using backup corruption check and auth is enabled
readarr.http_userDN_READARR_0_HTTP_USERProvide username if Readarr uses basic auth (uncommon) and BCC enabled
readarr.http_passDN_READARR_0_HTTP_PASSProvide password if Readarr uses basic auth (uncommon) and BCC enabled

Sonarr

Config NameVariable NameNote
sonarr.nameDN_SONARR_0_NAMENo Default. Setting a name enables service checks
sonarr.urlDN_SONARR_0_URLNo Default. Something like: http://localhost:8989
sonarr.api_keyDN_SONARR_0_API_KEYNo Default. Provide URL and API key if you use Sonarr
sonarr.usernameDN_SONARR_0_USERNAMEProvide username if using backup corruption check and auth is enabled
sonarr.passwordDN_SONARR_0_PASSWORDProvide password if using backup corruption check and auth is enabled
sonarr.http_userDN_SONARR_0_HTTP_USERProvide username if Sonarr uses basic auth (uncommon) and BCC enabled
sonarr.http_passDN_SONARR_0_HTTP_PASSProvide password if Sonarr uses basic auth (uncommon) and BCC enabled

Downloaders

You can add supported downloaders so they show up on the dashboard integration. You may easily add service checks to these downloaders by adding a name. Any number of downloaders of any type may be configured.

All application instances also have interval and timeout inputs represented as a Go Duration. Setting interval to -1s disables service checks for that application. Setting timeout to -1s disables that instance entirely. Useful if an instacne is down temporarily. Example Go Durations: 1m, 1m30s, 3m15s, 1h5m. Valid units are s, m, and h`. Combining units is additive.

QbitTorrent

Config NameVariable NameNote
qbit.nameDN_QBIT_0_NAMENo Default. Setting a name enables service checks
qbit.urlDN_QBIT_0_URLNo Default. Something like: http://localhost:8080
qbit.userDN_QBIT_0_USERNo Default. Provide URL, user and pass if you use Qbit
qbit.passDN_QBIT_0_PASSNo Default. Provide URL, user and pass if you use Qbit
qbit.http_userDN_QBIT_0_HTTP_USERProvide this username if Qbit is behind basic auth (uncommon)
qbit.http_passDN_QBIT_0_HTTP_PASSProvide this password if Qbit is behind basic auth (uncommon)

rTorrent

Config NameVariable NameNote
rtorrent.nameDN_RTORRENT_0_NAMENo Default. Setting a name enables service checks
rtorrent.urlDN_RTORRENT_0_URLNo Default. Something like: http://localhost:5000
rtorrent.userDN_RTORRENT_0_USERNo Default. Provide URL, user and pass if you use rTorrent
rtorrent.passDN_RTORRENT_0_PASSNo Default. Provide URL, user and pass if you use rTorrent

SABnzbd

Config NameVariable NameNote
sabnzbd.nameDN_SABNZBD_0_NAMENo Default. Setting a name enables service checks
sabnzbd.urlDN_SABNZBD_0_URLNo Default. Something like: http://localhost:8080/sabnzbd
sabnzbd.api_keyDN_SABNZBD_0_API_KEYNo Default. Provide URL and API key if you use SABnzbd

Deluge

Config NameVariable NameNote
deluge.nameDN_DELUGE_0_NAMENo Default. Setting a name enables service checks
deluge.urlDN_DELUGE_0_URLNo Default. Something like: http://localhost:8080
deluge.passwordDN_DELUGE_0_PASSWORDNo Default. Provide URL and password key if you use Deluge
deluge.http_userDN_DELUGE_0_HTTP_USERProvide this username if Deluge is behind basic auth (uncommon)
deluge.http_passDN_DELUGE_0_HTTP_PASSProvide this password if Deluge is behind basic auth (uncommon)

NZBGet

Config NameVariable NameNote
nzbget.nameDN_NZBGET_0_NAMENo Default. Setting a name enables service checks
nzbget.urlDN_NZBGET_0_URLNo Default. Something like: http://localhost:6789
nzbget.userDN_NZBGET_0_USERNo Default. Provide URL username and password if you use NZBGet
nzbget.passDN_NZBGET_0_PASSNo Default. Provide URL username and password if you use NZBGet

Plex

This application can also send Plex sessions to Notifiarr so you can receive notifications when users interact with your server. This has three different features:

You must provide Plex Token for this to work. You may also need to add a webhook to Plex so it sends notices to this application.

Config NameVariable NameNote
plex.urlDN_PLEX_URLhttp://localhost:32400 / local URL to your plex server
plex.tokenDN_PLEX_TOKENRequired. Must provide Plex Token for this to work.

Tautulli

Only 1 Tautulli instance may be configured per client. Providing Tautulli allows Notifiarr to use the "Friendly Name" for your Plex users and it allows you to easily enable a service check.

Config NameVariable NameNote
tautulli.nameDN_TAUTULLI_NAMENo Default. Setting a name enables service checks of Tautulli
tautulli.urlDN_TAUTULLI_URLNo Default. Something like: http://localhost:8181
tautulli.api_keyDN_TAUTULLI_API_KEYNo Default. Provide URL and API key if you want name maps from Tautulli

Service Checks

The Notifiarr client can also check URLs for health. If you set names on your Starr apps they will be automatically checked and reports sent to Notifiarr. If you provide a log file for service checks, those logs will no longer write to the app log nor to console stdout.

Config NameVariable NameNote
services.log_fileDN_SERVICES_LOG_FILEIf a file path is provided, service check logs write there
services.intervalDN_SERVICES_INTERVAL10m, How often to send service states to Notifiarr; minimum: 5m
services.parallelDN_SERVICES_PARALLEL1, How many services can be checked at once; 1 is plenty

You can also create ad-hoc service checks for things like Bazarr.

Config NameVariable NameNote
service.nameDN_SERVICE_0_NAMEServices must have a unique name
service.typeDN_SERVICE_0_TYPEType must be one of http, tcp, process, ping, icmp
service.checkDN_SERVICE_0_CHECKThe URL, ip, host, or host/ip:port to check
service.expectDN_SERVICE_0_EXPECT200, For HTTP, the return code to expect
service.timeoutDN_SERVICE_0_TIMEOUT15s, How long to wait for service response
service.intervalDN_SERVICE_0_INTERVAL5m, How often to check the service

Ping and ICMP Service Checks

When type is set to ping a UDP ping check is performed, and when type is icmp an ICMP ping check is performed. With both settings, the expect parameter must be three integers separated by colons. ie. 3:2:500. This example means send 3 packets every 500 milliseconds, and expect at least 2 in return.

To enable unprivileged UDP pings on Linux you must run this command:

sudo sysctl -w net.ipv4.ping_group_range="0 2147483647"

To give the notifiarr binary access to send ICMP pings on Linux, run this command:

sudo setcap cap_net_raw=+ep /usr/bin/notifiarr

Process Service Checks

When type is set to process, the expect parameter becomes a special variable. You may set it to restart to send a notification when the process restarts. You may set it to running to alert if the process is found running (negative check). You may set it to count:min:max. ie count:1:2 means alert if process count is below 1 or above 2. You may combine these with commas. ie restart,count:1:3.

By default check is the value to find in the process list. It uses a simple string match. Unless you wrap the value in slashes, then it becomes a regex. ie. use this expect = "/^/usr/bin/smtpd$/" to match an exact string.

Run notifiarr --ps to view the process list from Notifiarr's point of view.

Reverse Proxy

You'll need to expose this application to the Internet, so Notifiarr.com can make connections to it. While you can certainly poke a hole your firewall and send the traffic directly to this app, it is recommended that you put it behind a reverse proxy. It's pretty easy.

You'll want to tune the upstreams and urlbase settings for your environment. If your reverse proxy IP is 192.168.3.45 then set upstreams = ["192.168.3.45/32"]. The urlbase can be left at /, but change it if you serve this app from a subfolder. We'll assume you want to serve the app from /notifiarr/ and it's running on 192.168.3.33 - here's a sample nginx config to do that:

location /notifiarr {
  proxy_set_header X-Forwarded-For $remote_addr;
  set $notifiarr http://192.168.3.33:5454;
  proxy_pass $notifiarr$request_uri;
}

Make sure the Nginx location path matches the urlbase Notifiarr setting. That's all there is to it.

Using an auth proxy? Be sure to set ui_password to the string "webauth". Also see the WebUI section above. The Nginx config looks more like this:

location /notifiarr/api {
  proxy_set_header X-Forwarded-For $remote_addr;
  set $notifiarr http://192.168.3.33:5454;
  proxy_pass $notifiarr$request_uri;
}

location /notifiarr {
  proxy_set_header X-Forwarded-For $remote_addr;
  proxy_set_header X-WebAuth-User $_username;
  set $notifiarr http://192.168.3.33:5454;
  proxy_pass $notifiarr$request_uri;
}

Here are two more example Nginx configs:

Troubleshooting

Log files

You can set a log file in the config. You should do that. Otherwise, find your logs here:

Still having problems? Let us know!

Integrations

The following fine folks are providing their services, completely free! These service integrations are used for things like storage, building, compiling, distribution and documentation support. This project succeeds because of them. Thank you!

<p style="text-align: center;"> <a title="PackageCloud" alt="PackageCloud" href="https://packagecloud.io"><img src="https://docs.golift.io/integrations/packagecloud.png"/></a> <a title="GitHub" alt="GitHub" href="https://GitHub.com"><img src="https://docs.golift.io/integrations/octocat.png"/></a> <a title="Docker Cloud" alt="Docker" href="https://cloud.docker.com"><img src="https://docs.golift.io/integrations/docker.png"/></a> <a title="Homebrew" alt="Homebrew" href="https://brew.sh"><img src="https://docs.golift.io/integrations/homebrew.png"/></a> <a title="Go Lift" alt="Go Lift" href="https://golift.io"><img src="https://docs.golift.io/integrations/golift.png"/></a> <a title="Better Uptime" alt="Go Lift" href="https://betteruptime.com"><img src="https://docs.golift.io/integrations/betteruptime.png"/></a> </p>

Contributing

Join us on Discord and we can discuss.

License

MIT - Copyright (c) 2020-2024 Go Lift