Integrator
The Integrator is a high-throughput data forwarding engine that receives monitoring data and dispatches it to third-party systems and notification channels.
Overview
| Property | Value |
|---|---|
| Service name | MugnsoftIntegrator |
| Default port | 8052 |
| Configuration file | integrator.json |
| Version | v4.0.0 |
| Architecture | Worker pool with configurable concurrency |
Service Management
CLI Commands
# Install as service and register with the Webserver
integrator install <webserver_ip>:<port>
# Re-register with the Webserver
integrator register <webserver_ip>:<port>
# Migrate to a new Webserver
integrator migrate <webserver_ip>:<port> <jwt_token>
# Start / Stop / Restart
integrator start
integrator stop
integrator restart
# Run in foreground (Docker or debugging)
integrator run
# Remove the service
integrator uninstall
# Display help
integrator help
Configuration
Core Settings
{
"name": "integrator1",
"port": "8052",
"logLevel": "info",
"nbworker": "4",
"queuesize": "10000"
}
| Field | Description | Default |
|---|---|---|
name |
Unique integrator identifier | required |
port |
API listening port | "8052" |
logLevel |
debug, info, warn, error |
"info" |
nbworker |
Number of worker goroutines | "4" |
queuesize |
Task queue capacity | "10000" |
backupInterval |
Hours between KV store backups | 24 |
nbDaysBackup |
Days to keep backup files | 336 |
Directory Structure
<install_dir>/
├── integrator(.exe) # Executable
├── integrator.json # Service configuration
├── config/
│ ├── sec/ # RSA keys for JWT signing
│ └── ssl/ # TLS certificates
│ ├── certificates/
│ └── private/
├── dbs/ # embedded key-value databases
│ ├── integrator.db # Main KV store (settings, users, JWT)
│ ├── event.db # Incoming monitor data cache (for pull integrations)
│ ├── metrics.db # System metrics (CPU, memory, uptime)
│ └── backup/ # Automated backups
├── log/ # Rotated log files
├── data/ # CSV/JSON data exports
├── notif_buffer/ # Disk-backed retry queue for failed notifications
└── scripts/ # Custom alert scripts
Worker Pool Architecture
The Integrator uses a producer-consumer pattern for high-throughput data processing:
HTTP Handler (producer) Workers (consumers)
| |
|-- parse JSON, create Task --> |
|-- enqueue with 5s timeout --> [Queue] |
|-- return HTTP 200 immediately |
| +--> Worker 1 --> process + forward
| +--> Worker 2 --> process + forward
| +--> Worker 3 --> process + forward
| +--> Worker 4 --> process + forward
Key characteristics:
- Non-blocking: HTTP handlers return immediately after queueing
- Configurable workers: Set via
nbworker(default: 4) - Queue capacity: Set via
queuesize(default: 10,000 tasks) - Graceful reconfiguration: Workers drain the queue before restarting with new settings
Cross-Agent Correlation Engine
The Integrator includes an optional correlation engine that performs root-cause analysis. When a monitor breaches, the engine looks back over a configurable window for an earlier breach of an upstream monitor type that can be shown to concern the same host. If it finds one, it attaches a root-cause reference to the event instead of letting every symptom travel as an unrelated alert.
correlationEnabled (see below). It runs in a fire-and-forget goroutine and never adds latency to the alert path.
Example
Without correlation, a single failing host produces three independent alerts:
22:48 disco/agent on probe-prod-01 → CRITICAL (agent unreachable)
22:50 url/shop-frontend on probe-prod-02 → ERROR (connection refused)
22:50 api/checkout-api on probe-prod-02 → ERROR (connection refused)
With correlation enabled, the downstream failures are linked back to the earliest breach — here across two different probes, because the Sentinel Agent that broke first runs on the very host the url and api checks target:
[RCA] url_shop-frontend_probe-prod-02 — [Correlated: disco/agent (declared) breached 2m ago — root cause]
[RCA] api_checkout-api_probe-prod-02 — [Correlated: disco/agent (declared) breached 2m ago — root cause]
The Webserver Events page then shows this as 3 events → 1 incident.
Configuration
| Parameter | Type | Default | Description |
|---|---|---|---|
correlationEnabled |
"true" / "false" |
"false" |
Master switch — opt-in |
correlationWindowMinutes |
string (integer) | "10" |
How far back to look for upstream breaches |
These can be set two ways:
integrator.json— edit the file in the install directory (persists across restarts).- Live from the Webserver UI — go to Settings → Integrator → [your integrator]. The Webserver pushes the values to the Integrator’s
/setsettingendpoint and the engine reconfigures immediately, no restart required.
Causal model
The engine uses a fixed dependency graph defining which monitor type can be the upstream cause of another:
| Downstream type | Possible upstream cause |
|---|---|
url |
db, tcp, nslookup, ping, disco |
api |
db, tcp, nslookup, ping, disco |
db |
tcp, nslookup, ping, disco |
tcp |
nslookup, ping, disco |
nslookup |
ping, disco |
ping |
disco |
disco |
(root — never correlated downstream) |
The layering follows what a check actually depends on, from the network up: a url failing can be explained by anything below it, while a ping failing can only be explained by the host itself being in trouble. The monitor types eum, sys, snmp, wmi and app are not in the model and are never correlated — app is an aggregate rollup downstream of everything, and the others are not hooked into the window.
Host linkage — how a candidate becomes a cause
Being upstream and in-window is not enough. The engine keeps a candidate only when it can establish that the two monitors concern the same host, and it records how it established that in the event’s rca.link field. Ranked by confidence:
rca.link |
Meaning | Crosses probes | Confidence |
|---|---|---|---|
service |
The vanished process owned the very port the failing check connects to. The only link backed by service-level evidence rather than host-level inference — see below. | Yes | Highest |
declared |
The downstream monitor was provisioned from that Sentinel Agent’s own configuration — it watches that agent’s host by construction. Nothing is inferred. | Yes | Very high |
address |
The Sentinel Agent runs on the host the monitor targets, confirmed by address match. | Yes | High |
target |
Both monitors ran on the same probe and reported the same target. | No | High |
probe |
Same probe only — the targets could not be compared (one side predates target reporting). A hint, not a conclusion. | No | Low |
declared and address links come from a Sentinel Agent running on the target host, so a breach it reports can explain a url, api or db check executed from a completely different probe. A link resting on the probe alone (probe) is never allowed to cross probes.
Links with rca.targetMatch = true (declared, address, target) are treated as confirmed. A probe link is flagged as unverified everywhere it is displayed — a question-mark icon in the Events table and on the incident chip — so an operator can tell a real dependency from a coincidence of scheduling.
Service linkage — did the cause serve the port under test?
Host linkage asks “is this the same machine?". For a Sentinel missing cause — a monitored process that disappeared — that question alone is too coarse: on a host running a dozen monitored processes, any one of them vanishing would adopt every tcp and api failure on that box as its symptom, whether or not it had anything to do with the port being tested.
Port evidence adds the narrower question: “is this the same service?"
How the two sides get their ports. The probe reports the port its check connects to as hostport (proto/port, e.g. tcp/5432) — taken from the explicit port for tcp, udp and db checks, and from the URL (or 443/80 by scheme) for url and api. The Sentinel Agent remembers, for every monitored process, the set of ports it was last observed listening on while it was still alive, and sends that set (procports) with the missing event. A missing process has no sockets left to inspect, so a remembered value is the only kind of port evidence that can exist for it.
The verdict then lands in rca.portEvidence:
rca.portEvidence |
Situation | Outcome |
|---|---|---|
matched |
The check’s port is in the cause’s observed set. | Link is upgraded to service and keeps the top tie-break tier. This is the only RCA wording on the Events page allowed to drop the word “possible”. |
indirect |
Both sets are known and disjoint, and the symptom is a url or api check. |
Link is kept but demoted, and flagged. A local reverse proxy (nginx on 443 forwarding to an app on 8080) makes disjoint ports routine at the application layer — that is evidence of indirection, not of irrelevance. |
unknown |
The ports could not be compared — an older probe or Sentinel, a process never observed with a listening socket, an agent that cannot attribute sockets to processes, or an observation older than 24 h. | Link is kept but demoted. |
| (rejected) | Both sets are known and disjoint and the symptom is a tcp or db check. |
Dropped. A tcp check is a connection to that exact port; a process that never listened on it cannot be the cause. |
| (rejected) | The symptom has no port at all — ping, nslookup. |
Dropped. A dead process never explains an ICMP failure. |
Ranking. Unproven, missing is no longer top-tier: “a process vanished somewhere on this host” is weaker evidence than “this host is saturated”, which at least applies to every service on the box. A missing cause therefore only keeps tier 0 while portEvidence is matched; unknown and indirect drop it to the default tier, where a cpu, mem or fs breach in the same window wins the tie.
Note:
cpu, mem, fs, loadAvg* and tcpSockets describe the whole machine, so they can starve any service on it and port evidence is neither available nor meaningful for them. dirmissing is likewise unaffected: a vanished directory has no port to speak of.
Mixed fleets degrade, never break. An older probe sends no hostport, an older Sentinel sends no procports; both land in unknown, which is hedged and demoted but never rejected. An older Integrator ignores the new fields entirely. The one behaviour change on an un-upgraded estate is the demotion of missing from tier 0 — which is the intended correction.
Onset — could the cause have started it?
Host linkage answers “could this candidate explain the failure”. Onset answers “could it have started it”, and it is the one thing the look-back window alone cannot show.
A failing monitor re-reports on every tick, and the engine re-evaluates each of those reports. Without an onset rule, a monitor that has been failing for days adopts whatever fresh breach happens to be in the window at that moment:
11 API monitors on probe-win1, ERROR since 3d 3h ← all provisioned by the Sentinel legion-vi7
discovery-win1-missing-Notepad.exe, CRITICAL 17m ← same Sentinel, unrelated process
→ all 11 wrongly grouped under "disco/missing"
Declared ownership made that Sentinel breach eligible for every monitor it provisioned — correctly, they do watch that host — and nothing asked whether those monitors were already broken before it happened. Something already broken cannot be a symptom of something that started later.
Two independent tests, and either one disqualifies a candidate:
| Test | Evidence used | Reach |
|---|---|---|
| Window precedence — this monitor already has a breach of its own in the window from before the candidate broke | Integrator clock on both sides — nothing to skew | Only as far back as the window, and only for monitors whose interval is shorter than it |
Reported onset — the probe’s since (when the monitor entered its current status) predates the candidate’s breach by more than 2 minutes |
Probe clock vs Integrator clock | Arbitrarily far back |
since comes off the probe’s clock and the window timestamps off the Integrator’s, with nothing synchronising them — so the test only catches gross impossibilities (three days versus seventeen minutes), never fine ones. And on the very tick a status flips, the probe still reports the previous status segment’s start, which makes a monitor that has just broken look ancient. The reported-onset test is therefore applied only once the window proves this is not the monitor’s first failing tick — otherwise it would reject exactly the fresh correlations the engine exists to find.
A probe that sends no since disables the second test for that event rather than dropping the correlation — the same “reject only on positive evidence” principle host linkage follows. Rejections are logged at DEBUG level:
[RCA] api_influxdb3_health — dropped disco/missing: already failing at 2026-08-02T18:03:41+02:00, candidate breached 2026-08-02T18:10:41+02:00
The rca payload
Correlated events carry an rca object alongside the usual result fields. The Webserver reads it to build the Events page:
| Field | Description |
|---|---|
causeName |
Record name of the cause — the join key back to the cause’s own event |
causeType |
Monitor type of the cause (disco, db, …) |
causeMetric |
Metric of the cause, when the type has one |
causeStatus |
Status the cause was in |
causeTarget |
Host the cause concerns |
causeAgent |
Sentinel Agent that reported the cause (declared / address links) |
probe |
Probe that ran the cause’s check |
link |
service | declared | address | target | probe — see above |
crossProbe |
true when cause and symptom were executed by different probes |
targetMatch |
true when the host linkage was confirmed |
portEvidence |
matched | indirect | unknown — written only for a port-scoped Sentinel cause, so it reads as a finding rather than as “not applicable” |
causePort |
The port both sides agree on (tcp/5432), on a matched verdict only |
portAttr |
none when the Sentinel Agent reported it cannot attribute sockets to processes at all — lets the UI say “unknown because this agent is blind here” rather than a bare “unknown” |
at |
Epoch of the cause’s breach |
ageMinutes |
How much earlier the cause broke — the evidence for the link |
Incidents on the Events page
When at least one enabled Integrator has correlation on, the Webserver Events page grows an RCA column and an incident strip:
- Each event is shown as a root (something points at it, with its symptom count), a symptom (naming its cause and how many minutes earlier it broke), or independent.
- The strip headlines the ratio that is the whole point of the feature —
24 events → 9 incidents, with the folded-away symptom count. - Clicking an incident chip, or an RCA cell in the table, isolates that incident and re-sorts it oldest-first so the root cause reads at the top followed by what it took down. Clicking again clears.
- A root cause that is not in the current view (filtered out by tags, or handled by another Integrator) still forms an incident and is flagged with an eye-slash icon.
- A grouping that is not fully confirmed — one unverified host link, or any symptom whose port evidence is
indirectorunknown— carries a question-mark icon on the chip and on the row. It is all-or-nothing: one hedged symptom hedges the whole incident.
For how to read and drive that column day to day — filters, the incident strip, isolating an incident — see Events page.
How it works
non-OK result arrives (url / api / tcp / db / ping / nslookup / disco)
│
▼
recordRecentEvent() ──► in-memory sliding window
│ (capped at 500 entries, RWMutex-protected)
▼
correlateEvent()
│ 1. look up upstream types in the causal model
│ 2. scan the window for in-window, different-monitor,
│ upstream-type breaches
│ 3. qualify each candidate by host linkage
│ (declared → address → target → probe)
│ then, for a port-scoped Sentinel cause, by port evidence
│ (matched → service link | disjoint → reject or hedge)
│ 4. drop candidates this monitor was already failing before
│ (window precedence + reported onset)
│ 5. pick the EARLIEST qualifying match
▼
attach `rca` to the event + log "[RCA] … [Correlated: …]" at INFO level
Only non-OK statuses are recorded. A cron job (purgeOldRecentEvents, every minute) removes entries older than correlationWindowMinutes; the window is also hard-capped at 500 entries.
Recommended window
| Environment | correlationWindowMinutes |
|---|---|
| Fast (monitors every 1 min) | 5 |
| Standard (every 1–5 min) | 10 (default) |
| Slow / batch (every 5–15 min) | 20–30 |
Set the window to roughly 2× the longest monitor interval so an upstream breach is recorded before downstream monitors fire. With cross-probe links in play, take the longest interval across all probes involved, not just one.
Ticketing: one incident instead of one per monitor
With ServiceNow enabled, serviceNowIncidentScope decides how many incidents an outage is worth:
| Value | Behaviour |
|---|---|
all (default) |
One incident per breaching monitor. |
root |
An event the engine tied to an earlier upstream failure opens no incident of its own — it is added as a work note on the root cause’s incident instead. |
root needs the correlation engine enabled: with it off nothing is ever a symptom, so every event still opens its own incident. See ServiceNow integration.
Current limitations
| Limitation | Detail |
|---|---|
| Earliest breach wins | No confidence scoring between qualifying candidates — the earliest one is reported |
| Seven types hooked | Only url, api, tcp, db, ping, nslookup, disco results enter the correlation window |
| Onset is blind for one tick after a restart | The window is rebuilt from scratch when the Integrator restarts, so on the first report of each monitor there is nothing to prove it was already failing. A long-standing failure can be correlated once, and stops being from its next tick on |
| Alerting unchanged | Correlation enriches events and ServiceNow incident scope; it does not suppress emails/Slack/Teams |
| Window is per-process | The sliding window is in-memory and per Integrator — events split across Integrators do not correlate |
Supported Integrations
Push Integrations (Integrator sends data outbound)
InfluxDB (v1.x / v2.x / v3.x)
{
"influxDBEnabled": "true",
"influxDBVersion": "2.x",
"influxDBServer": "influxdb.example.com",
"influxDBPort": "8086",
"influxDBOrg": "myorg",
"influxDBBucket": "mugnsoft",
"influxDBToken": "your-token",
"influxDBSSL": "true"
}
Data is sent in line protocol format:
eumResponseTime,name=MyScenario,type=eum,status=NORMAL,location=Paris responseTime=125.5,statusInt=0 1234567890000000000
Features: connection pooling, retry logic (2 retries, 5s wait), SSL support.
Splunk (HTTP Event Collector)
{
"splunkEnabled": "true",
"splunkCollectorServer": "splunk.example.com",
"splunkCollectorPort": "8088",
"splunkAuthorizationToken": "your-hec-token",
"splunkIndex": "mugnsoft",
"splunkSSL": "true"
}
Data is sent as JSON events to the Splunk HEC endpoint.
Elasticsearch
{
"elasticEnabled": "true",
"elasticServer": "elastic.example.com",
"elasticPort": "9200",
"elasticUser": "elastic",
"elasticPwd": "password",
"elasticSSL": "true"
}
Data is sent via the Bulk API (_bulk endpoint) as JSON documents.
Kafka
{
"kafkaEnabled": "true",
"kafkaBrokers": "broker1:9092,broker2:9092",
"kafkaTopic": "mugnsoft-metrics",
"kafkaTLS": "true",
"kafkaSASLMechanism": "SCRAM-SHA256",
"kafkaSASLUser": "user",
"kafkaSASLPwd": "password"
}
Supports: TLS with custom CA/cert, SASL authentication (PLAIN, SCRAM-SHA256, SCRAM-SHA512), connection pooling.
Canopsis
{
"canopsisEnabled": "true",
"canopsisServer": "canopsis.example.com",
"canopsisPort": "8082",
"canopsisUser": "root",
"canopsisPwd": "password",
"canopsisSSL": "false"
}
ServiceNow
{
"serviceNowEnabled": "true",
"serviceNowServer": "dev12345.service-now.com",
"serviceNowPort": "443",
"serviceNowUser": "mugnsoft.integration",
"serviceNowPwd": "password",
"serviceNowSSL": "true",
"serviceNowResolvedState": "6",
"serviceNowCloseCode": "Resolved by caller"
}
Unlike the other push targets, ServiceNow follows the full incident lifecycle: it opens an incident when a monitor breaches and auto-resolves it when the monitor recovers. Incidents are correlated through the ServiceNow correlation_id field, so resolve works even across Integrator restarts. Actions are taken only on a confirmed status change, so repeated non-OK polls never open duplicate incidents. Auto-resolve respects ITSM ownership: an incident a human has already taken (assigned / past New) is left open with a recovery note rather than being closed automatically.
GLPI
{
"glpiEnabled": "true",
"glpiServer": "glpi.example.com",
"glpiPort": "443",
"glpiUser": "mugnsoft.integration",
"glpiPwd": "password",
"glpiAppToken": "app-token",
"glpiSSL": "true",
"glpiSolvedStatus": "5"
}
Like ServiceNow, GLPI follows the full ticket lifecycle: it opens a ticket when a monitor breaches and auto-resolves it when the monitor recovers. GLPI has no native correlation field, so the open ticket is located through an embedded key stamped into the ticket title — resolve therefore works even across Integrator restarts. Actions are taken only on a confirmed status change, so repeated non-OK polls never open duplicate tickets. Auto-resolve respects ITSM ownership: a ticket a human has already taken (assigned / processing / pending) is left open with a recovery follow-up rather than being closed automatically. Authentication is HTTP Basic against the GLPI REST API, with an optional App-Token when the GLPI API client requires one.
Jira (Cloud)
{
"jiraEnabled": "true",
"jiraServer": "your-domain.atlassian.net",
"jiraPort": "443",
"jiraUser": "you@example.com",
"jiraPwd": "api-token",
"jiraSSL": "true",
"jiraProjectKey": "OPS",
"jiraIssueType": "Bug",
"jiraResolveTransition": "Done"
}
Like ServiceNow, Jira follows the full issue lifecycle: it opens an issue when a monitor breaches and auto-resolves it when the monitor recovers. Jira has no native correlation field, so the open issue is located through a sanitized label (mugnsoft-<type>-<name>-<probe>) matched server-side with an exact JQL query — resolve therefore works even across Integrator restarts. Jira has no direct status-set, so resolve is a workflow transition looked up by name (jiraResolveTransition, default Done). Auto-resolve respects ITSM ownership: an issue a human has already taken (assigned / In Progress) is left open with a recovery comment rather than being transitioned. Authentication is HTTP Basic with the account email and an API token (Jira Cloud, REST API v3, ADF descriptions).
Pull Integrations (Third-party queries the Integrator)
Zabbix
{
"zabbixEnabled": "true",
"zabbixServer": "zabbix.example.com",
"zabbixPort": "443",
"zabbixAuthType": "token",
"zabbixToken": "your-api-token",
"zabbixVersion": "6.x",
"zabbixSSL": "true"
}
Zabbix retrieves data by querying the Integrator’s REST API:
GET /integrator/{bucket}/allV
Data is cached in the Integrator’s embedded key-value store with configurable TTL.
Data Export
| Format | Setting | Description |
|---|---|---|
| CSV | send2CSVEnabled |
Export to local CSV files in data/ |
| JSON | send2JSONEnabled |
Export to local JSON files in data/ |
Data Reception Endpoints
The Integrator exposes type-specific endpoints for receiving monitoring data:
| Endpoint | Monitor Type |
|---|---|
POST /integrator/data2integrator |
EUM (End User Monitoring) |
POST /integrator/data2integratorApp |
Application monitoring |
POST /integrator/data2integratorApi |
API monitoring |
POST /integrator/data2integratorUrl |
URL/HTTP monitoring |
POST /integrator/data2integratorTcp |
TCP monitoring |
POST /integrator/data2integratorUdp |
UDP monitoring |
POST /integrator/data2integratorPing |
Ping monitoring |
POST /integrator/data2integratorNslookup |
DNS monitoring |
POST /integrator/db/data2integrator2 |
Database monitoring |
POST /integrator/sys/data2integrator2 |
System metrics |
POST /integrator/snmp/data2integrator2 |
SNMP monitoring |
POST /integrator/wmi/data2integrator2 |
WMI monitoring (Windows) |
POST /integrator/data2integratorDisco |
Discovery agent data |
Incoming Data Payload
Each payload contains:
{
"name": "My Monitor",
"shortname": "mymon",
"probe": "probe1",
"monType": "eum",
"timestampEpoch": 1234567890,
"hostname": "target-host",
"status": "NORMAL",
"statusInt": "0",
"location": "Paris",
"value": 125.5,
"transactions": { "Login": 45.2, "Search": 80.3 },
"dnsLookup": "5.2",
"tcpConnTime": "12.1",
"tlsHandshake": "35.4",
"serverTime": "52.8",
"responseTime": "125.5",
"emailR": "ops@example.com",
"emailOnF": true,
"emailOnSC": true,
"resSC": "status_has_changed",
"alerting": "true"
}
Alerting
The Integrator handles centralized alerting when monitors are linked to it.
Notification Channels
| Channel | Configuration |
|---|---|
| SMTP with TLS, HTML formatted with inline logo, color-coded status | |
| Slack | Block kit formatting, emoji indicators, configurable channel |
| Microsoft Teams | Adaptive card format, color-coded, webhook-based |
| PagerDuty | Incident triggering via API |
| Custom Scripts | Shell scripts in scripts/ directory, 30s timeout, path traversal protection |
Alert Triggers
| Trigger | Description |
|---|---|
emailOnF / slackOnF / teamsOnF / pdOnF / scriptOnF |
Alert on failure |
emailOnSC / slackOnSC / teamsOnSC / pdOnSC / scriptOnSC |
Alert on status change |
Status Colors
| Status | Color | Hex |
|---|---|---|
| NORMAL/OK | Green | #5cb85c |
| MINOR | Yellow | #D5D94F |
| MAJOR | Orange | #D9984F |
| CRITICAL | Red | #d9534f |
| CONFIG | Blue | #428bca |
| TIMEOUT | Gray | #E1DFDF |
| EXCEPTION | Orange | #faa05a |
| ERROR | Dark Red | #992A26 |
Notification Buffer (Reliable Delivery)
If a notification cannot be delivered — the SMTP server is down, Slack returns an error, a webhook times out — the Integrator does not drop it. The failed notification is written to disk and retried by a background worker.
| Property | Value |
|---|---|
| Buffer directory | ./notif_buffer/ (one JSON file per failed notification) |
| Channels buffered | Email, Slack, Teams, PagerDuty |
| Flush interval | Every 30 seconds |
| Max retries | 3 attempts per notification |
| Buffer capacity | notifBufferSize (default 500); oldest dropped when full |
Each buffered item records the channel, monitor identity, status, message, recipient, creation time, and attempt count. The flush worker is started at boot (initNotifBuffer) and stopped gracefully on shutdown. This guarantees that a transient outage in a notification channel never causes a lost alert, as long as the channel recovers within the retry budget.
REST API
Authentication
| Method | Path | Description |
|---|---|---|
| POST | /api/auth |
Login (JWT 15min) |
| POST | /loginComponent |
Component login (24h) |
| POST | /loginComponent1Year |
Long-lived token (1 year) |
| POST | /loginComponent15Years |
Extended token (15 years) |
| GET | /refresh_token |
Refresh JWT |
Management
| Method | Path | Description |
|---|---|---|
| GET | /api/setting |
Get configuration |
| PATCH | /api/updateSetting |
Update configuration |
| POST | /backupDatabase |
Manual KV store backup |
| POST | /reinitDatabase |
Reset databases |
| POST | /testIntegration |
Test integration connectivity |
Data Access
| Method | Path | Description |
|---|---|---|
| GET | /integrator/{bucket}/allV |
All values in bucket |
| GET | /integrator/{bucket}/allK |
All keys in bucket |
| GET | /integrator/{bucket}/allKV |
All key-value pairs |
| GET | /v1/db/{dbname}/bucket/{bucket}/key/{key} |
Specific key lookup |
| POST | /integrator/events |
Query data by tags/apps |
Users
| Method | Path | Description |
|---|---|---|
| GET | /api/users |
List users |
| POST | /api/users |
Create user |
| PATCH | /api/users |
Update user |
| DELETE | /api/users/{username} |
Delete user |
System
| Method | Path | Description |
|---|---|---|
| GET | /ping |
Health check |
| GET | /uptime |
Service uptime |
| GET | /api/metrics |
System metrics (CPU, memory) |
| GET | /docs/* |
Swagger UI |
Connection Pooling
The Integrator maintains connection pools for outbound integrations:
| Integration | Pool Type | Configuration |
|---|---|---|
| InfluxDB v1/v2 | HTTP client pool | Reusable connections |
| InfluxDB v3 | Dedicated pool | Separate implementation |
| Kafka | Writer pool | SASL/TLS-aware, config caching |
Error Handling
- Retry logic: 2 retries with 5-second wait between attempts
- Non-blocking: Failed deliveries are logged but don’t block task processing
- Status verification: Checks HTTP status codes (200/204 for success)
- Graceful shutdown: Workers finish current tasks before stopping
See also
- Integrator Configuration — complete settings reference
- Integrator HTTP API — full API documentation
- Integration guides — step-by-step setup for Splunk, InfluxDB, Elastic, Zabbix, and Grafana
- Platform Overview — how the Integrator fits into the architecture
- Data Flow — monitoring and integration data flow diagrams