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.
- Super easy to setup, one middleware for all websites
- Server Side Tracking, no need to add JavaScript to your websites
- Fast and private analytics
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
key | default | type | description |
---|---|---|---|
disabled |
false | bool |
Set to true to disable the plugin |
debug |
false | bool |
Something doesn't work? Set to true to see more logs (plugins doesn't have access to Traefik's log level) |
queueSize |
1000 | int |
The maximum number of events that can be queued before they are sent to the Umami server |
umamiHost |
- | string |
Umami server url, reachable from within traefik (container), e.g. http://umami:3000 |
umamiToken |
- | string |
An API Token, used to automatize work with websites, not needed if you provide websites |
umamiUsername |
- | string |
An alternative to umamiToken , you can provide an username and password |
umamiPassword |
- | string |
Only in combination with umamiUsername |
umamiTeamId |
- | string |
In order to organize websites, you can use Umami Teams |
websites |
- | map |
A map of hostnames and their associated Umami IDs. Can also be used to override or extend fetched websites |
createNewWebsites |
false | bool |
If set to true , will try to create a new website on Umami, if domain not found there |
trackErrors |
false | bool |
If set to true , will track errors (status codes >= 400) |
trackAllResources |
false | bool |
Defines whether all requests for any resource should be tracked. By default, only requests that are believed to contain content are tracked |
trackExtensions |
string[] |
Defines an alternative list of file extensions that should be tracked | |
ignoreUserAgents |
string[] |
A list of user agents that should be ignored from tracking, e.g. ["Googlebot", "Uptime-Kuma"] (matched with strings.Contains ) |
|
ignoreURLs |
string[] |
A list of URLs that should be ignored from tracking, e.g. ["/health", "https?://[^/]+/health$"] (matched with regexp.Compile.MatchString ) |
|
ignoreIPs |
string[] |
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 ) |
|
headerIp |
X-Real-Ip |
string |
The header to use to get the real IP address of the client, in case it's forwarded by a proxy |