A Traefik middleware plugin that sends visits to your Rybbit instance.
This is a fork of traefik-umami-feeder modified to work with Rybbit.
This plugin integrates your Traefik-proxied services with Rybbit, a simple, fast, privacy-focused analytics solution. It captures basic request information (path, user-agent, referrer, IP) and forwards it to your Rybbit instance, enabling server-side analytics.
Key features:
- Stupidly simple to setup, one middleware for all websites possible
- Server-Side Tracking, no JS or Cookies bullshit
- Fast and private
Declare the plugin in your Traefik static configuration.
experimental:
plugins:
rybbit-feeder:
moduleName: github.com/foxxmd/traefik-rybbit-feeder
version: v0.13.0 # Replace with the latest versionOnce the plugin is declared, configure it as a middleware in your Traefik dynamic configuration.
You will need to specify at least three pieces of data:
host- Your Rybbit instance base URL. This is URL without/api/track.apiKey- The Api Key generated for the website you wish to track.websites- A map ofdomain-site-idproperties to tell the feeder what traffic should go to your Rybbit Site
There are additional, optional Middleware Options to configure more behavior below.
http:
middlewares:
my-rybbit-middleware:
plugin:
rybbit-feeder:
host: "http://rybbit.mysite.com" # URL of your Rybbit instance
apiKey: rb_a0938250c2c2efd061c8250c2c3707a
websites:
# domain to capture traffic for and the site-id from Rybbit
"example.com": "1"Apply the configured middleware to the Traefik routers you want to track with Rybbit. This is also done in your dynamic configuration.
Remember to use the
correct provider namespace (e.g., @file if
your middleware is defined in a file, @docker if defined via Docker labels).
Example using Docker labels:
- "traefik.http.routers.whoami.middlewares=my-rybbit-middleware@file"Example using a dynamic configuration file (e.g., dynamic_conf.yml):
http:
routers:
whoami:
rule: "Host(`example.com`)"
middlewares:
- my-rybbit-middleware@fileExample using static configuration (e.g., traefik.yml), by attaching the middleware to an entryPoint to apply it
globally:
entryPoints:
web:
http:
middlewares:
- my-rybbit-middleware@file| key | default | type | description |
|---|---|---|---|
disabled |
false |
bool |
Set to true to disable the plugin. |
debug |
false |
bool |
Set to true for verbose logging. Useful for troubleshooting as plugins don't inherit Traefik's global log level. |
host |
required | string |
URL of your Rybbit instance, reachable from Traefik (e.g., https://rybbit.mydomain.com). |
apiKey |
required | string |
Rybbit API Key for authenticating with your Rybbit instance. |
websites |
required | map |
A map of hostname: site-id |
trackErrors |
false |
bool |
If true, tracks errors (status codes >= 400). |
trackAllResources |
false |
bool |
If true, tracks requests for all resources. By default, only requests likely to be page views (e.g., HTML, or no specific extension) are tracked. |
trackExtensions |
[see sources] |
string[] |
A list of specific file extensions to track (e.g., [".html", ".php"]). |
ignoreUserAgents |
[] |
string[] |
A list of user-agent substrings. Requests with matching user-agents will be ignored (e.g., ["Googlebot", "Uptime-Kuma"]). Matched with strings.Contains. |
ignoreURLs |
[] |
string[] |
A list of regular expressions. Requests with URLs matching any of these patterns will be ignored (e.g., ["/health", "https?://[^/]+/health$"]). Matched with regexp.Compile.MatchString. |
ignoreIPs |
[] |
string[] |
A list of IP addresses or CIDR ranges to ignore (e.g., ["127.0.0.1", "10.0.0.1/16"]). Matched with netip.ParsePrefix.Contains. |
headerIp |
X-Real-Ip |
string |
The HTTP header to inspect for the client's real IP address, typically used when Traefik is behind another proxy. |
Contributions are welcome! Please feel free to submit a pull request or open an issue.
This project is licensed under the MIT License - see the LICENSE file for details.