/Traefik Umami Feeder

Traefik Umami Feeder

9
v1.2.0

Traefik Umami Feeder

This plugin for enables Traefik Reverse Proxy to feed Umami Analytics with tracking events.

It was created as an alternative to traefik-umami-plugin and inspired by idea of Plausible Feeder Traefik Plugin.

Features

  • Super easy to setup, one middleware for all websites
  • Server Side Tracking, no need to add JavaScript to your websites
  • Fast and private analytics

Installation

To add this plugin to traefik reference this repository as a plugin in the static config. The version references a git tag.

experimental:
plugins:
umami-feeder:
moduleName: github.com/astappiev/traefik-umami-feeder
version: v1.0.0 # replace with latest version available
[experimental.plugins.umami-feeder]
moduleName = "github.com/astappiev/traefik-umami-feeder"
version = "v1.0.0" # replace with latest version available

With the plugin installed, you can configure a middleware in a dynamic configuration such as a config.yml or docker labels.

http:
middlewares:
my-umami-middleware:
plugin:
umami-feeder:
umamiHost: "http://umami:3000"
websites:
"example.com": "d4617504-241c-4797-8eab-5939b367b3ad"
[http.middlewares]
[http.middlewares.my-umami-middleware.plugin.umami-feeder]
umamiHost = "umami:3000"
[http.middlewares.my-umami-middleware.plugin.umami-feeder.websites]
"example.com" = "d4617504-241c-4797-8eab-5939b367b3ad"

You have an option to give a list of domains to track (and their website IDs on Umami).
Or, you can give a token and the list will be fetched from Umami. For this, you need either retrieve the token yourself, or use username/password instead.

After that, you need to add the middleware to a router. Remember to reference the correct provider namespace.

E.g. as Docker labels:

- "traefik.http.routers.whoami.middlewares=my-umami-middleware@file"

Or, for all routers in a static configuration:

entryPoints:
web:
http:
middlewares:
- my-umami-middleware@file

Configuration

keydefaulttypedescription
disabledfalseboolSet to true to disable the plugin
debugfalseboolSomething doesn't work? Set to true to see more logs (plugins doesn't have access to Traefik's log level)
queueSize1000intThe maximum number of events that can be queued before they are sent to the Umami server
umamiHost-stringUmami server url, reachable from within traefik (container), e.g. http://umami:3000
umamiToken-stringAn API Token, used to automatize work with websites, not needed if you provide websites
umamiUsername-stringAn alternative to umamiToken, you can provide an username and password
umamiPassword-stringOnly in combination with umamiUsername
umamiTeamId-stringIn order to organize websites, you can use Umami Teams
websites-mapA map of hostnames and their associated Umami IDs. Can also be used to override or extend fetched websites
createNewWebsitesfalseboolIf set to true, will try to create a new website on Umami, if domain not found there
trackErrorsfalseboolIf set to true, will track errors (status codes >= 400)
trackAllResourcesfalseboolDefines whether all requests for any resource should be tracked. By default, only requests that are believed to contain content are tracked
trackExtensionsstring[]Defines an alternative list of file extensions that should be tracked
ignoreUserAgentsstring[]A list of user agents that should be ignored from tracking, e.g. ["Googlebot", "Uptime-Kuma"] (matched with strings.Contains)
ignoreURLsstring[]A list of URLs that should be ignored from tracking, e.g. ["/health", "https?://[^/]+/health$"] (matched with regexp.Compile.MatchString)
ignoreIPsstring[]A list of IPs that should be ignored from tracking, e.g. ["127.0.0.1", "10.0.0.1/16"] (matched with netip.ParsePrefix.Contains)
headerIpX-Real-IpstringThe header to use to get the real IP address of the client, in case it's forwarded by a proxy