Connector to import ImprovMX logs into Loki
1.6K
A connector to retrieve email logs from the ImprovMX API and push them to Loki.
This service runs continually, fetching logs for all active domains in your ImprovMX account and forwarding them to a Loki instance. It maintains state to ensuring logs are not duplicated and provides a catch-up mechanism for historical data.
The application is configured using environment variables:
| Variable | Description | Default |
|---|---|---|
IMPROVMX_API_TOKEN | Required. Your ImprovMX API Token. | - |
LOKI_URL | URL of the Loki Push API. | http://localhost:3100/loki/api/v1/push |
LOKI_TENANT_ID | Optional Org ID for X-Scope-OrgID header. | - |
LOKI_JOB_NAME | Value for the job label in Loki. | improvmx |
DOMAIN_REFRESH_INTERVAL | How often to refresh the list of domains. | 1h |
LOGS_REFRESH_INTERVAL | How often to poll for new logs. | 15m |
CATCH_UP_SLEEP_INTERVAL | Sleep interval when catching up on historical data. | 15s |
LOGS_LOOKBACK_WINDOW | Maximum time window to query in a single request. | 24h |
DEFAULT_START_TIME_AGO | How far back to look on the very first run. | 168h (7 days) |
STATE_FILE_PATH | Path to the JSON file used for state persistence. | /data/state.json |
HTTP_PORT | Port for the HTTP server (probes). | 8080 |
LOG_LEVEL | Logging level (debug, info, warn, error). | info |
LOG_FORMAT | Logging output format (text, json). | text |
The application exposes an HTTP server (default port 8080) with the following endpoints for Kubernetes probes:
/healthz: Liveness probe. Returns 200 OK./readyz: Readiness probe. Returns 200 OK.Email logs from ImprovMX often have events that arrive over time. For example, an email may initially have a QUEUED event, followed later by DELIVERED, SOFT-BOUNCE or HARD-BOUNCE events.
This connector automatically:
The state file includes an incomplete_logs section that persists this tracking across restarts.
The connector enforces strict search window boundaries to maintain chronological ordering:
make build
export IMPROVMX_API_TOKEN=your_token
./improvmx-loki-connector
docker build -t improvmx-loki-connector .
docker run --rm \
-e IMPROVMX_API_TOKEN=your_token \
-v $(pwd)/data:/data \
improvmx-loki-connector
To spin up a local observability stack with Loki and Grafana:
docker compose up -d
http://localhost:3000 (Auto-login as Admin enabled)http://localhost:3100The Loki datasource is automatically provisioned in Grafana.
Content type
Image
Digest
sha256:c928e6544…
Size
6.4 MB
Last updated
9 months ago
docker pull yansonb/improvmx-loki-connector