Skip to content

A Traefik plugin that feeds Umami Analytics with pageview events

License

Notifications You must be signed in to change notification settings

astappiev/traefik-umami-feeder

Repository files navigation

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

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

About

A Traefik plugin that feeds Umami Analytics with pageview events

Topics

Resources

License

Stars

Watchers

Forks