Skip to content

[stormshield] Type the appliance health counters#20229

Draft
arenard wants to merge 3 commits into
elastic:mainfrom
arenard:stormshield-stats-typing
Draft

[stormshield] Type the appliance health counters#20229
arenard wants to merge 3 commits into
elastic:mainfrom
arenard:stormshield-stats-typing

Conversation

@arenard

@arenard arenard commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

Proposed commit message

Type the counters of the periodic statistics logs as aggregatable numbers instead of flattened strings. The scalar counters of the filter statistics log (accepted and blocked totals, memory and state gauges) move to long fields under stormshield.filterstat, keeping the names the vendor writes. The CPU counters of the monitor log (time allocated to user processes, kernel time and system disruptions, as the official documentation describes them) move to stormshield.monitor.cpu, and the security level of the monitor log becomes the long field stormshield.security. Counters whose value does not parse as a number fall back to the flattened metadata object unchanged, and the composite in/out pairs stay under metadata where the existing byte extraction reads them.

These fields feed appliance health dashboards and alerting on CPU time, memory gauges and blocked packet rates, which the flattened object could not serve. The per-method authentication counters of the authstat log stay under metadata: the official field tables do not document them, and the per-interface structures of the monitor log stay as well, pending a document layout that supports per-interface aggregation.

Design notes

  • stormshield.filterstat is declared as an object of longs: the vendor counter set varies with the appliance features in use, and every member is a numeric gauge or total. The numeric guard routes any non-numeric value to stormshield.metadata instead of failing the document.
  • The CPU field names follow the wording of the official CPU field entry (CPU=1,0,2: user processes, kernel, system disruptions) and were already used by the monitor sub-pipeline.
  • stormshield.system (a percentage, keyword since the package's first release) is left untouched to avoid a mapping type change on a released field; it is a candidate for the next breaking-change release.
  • No new ECS mappings and no changes to the event categorization: this is a vendor-field typing change only.

Checklist

  • I have reviewed tips for building integrations and this pull request is aligned with them.
  • I have verified that all data streams collect metrics or logs.
  • I have added an entry to my package's changelog.yml file.
  • I have verified that Kibana version constraints are current according to guidelines.

Author's Checklist

  • elastic-package check, test pipeline and test system (udp, tcp, tls) pass against stack 9.4.3
  • The filter statistics fixture exercises 50 typed counters; the monitor fixture exercises the CPU triple and the security level

How to test this PR locally

cd packages/stormshield
elastic-package check
elastic-package test pipeline

Related issues

arenard added 3 commits July 20, 2026 10:03
…metadata allow-list

Derive `event.outcome` on the auth, server and xvpn families from the vendor `error` return code (`0` maps to success, other codes to failure). The official field documentation lists exactly these three families for `error`; on vpn logs the same key is a severity level and is left untouched. The vendor documentation pairs `0`-first numeric examples with `Success`-first display labels without stating the convention outright, so the mapping follows the strong implication of the field tables.

Map `domain` to `user.domain` and `usergroup` to `user.group.name`, splitting the comma-separated multi-valued form that SNS 5.x emits. On web logs, map `op` to `http.request.method` and `result` to `http.response.status_code`; on other families these keys carry protocol-specific codes (FTP, Modbus) and are not promoted. Map the module name in `service` to `process.name` on the system, sandboxing and routing families only — on pvm logs the same key names the vulnerable product detected on a scanned host. Set `observer.product`. All mappings are copies; the vendor keys remain available under `stormshield.metadata`.

Extend the `stormshield.metadata` allow-list with the documented vendor keys that previously leaked as undeclared `stormshield.*` fields: host and IP reputation (`srchostrep`, `dsthostrep`, `srciprep`, `dstiprep`), alarm packet captures (`pktlen`, `pktdump`, `pktdumplen`), Ethernet protocol (`etherproto`), SSO agent (`agentid`), IKE peer name (`peername`), and the industrial-protocol plugin fields (`unitid`/`unit_id`, `cipservicecode`, `cipclassid`, `requestmode`, `responsemode`, `UI`, `error_class`, `error_code`, `format`).

The NAT reading of the pipeline was verified against the official field tables while preparing this change: `origdst`/`origdstport` are documented as the destination before translation and map to `destination.ip`/`destination.port`; `dst` is the translated destination and maps to `destination.nat.ip` when it differs. A connection sample with the documented example values now locks this in the pipeline tests, alongside new samples for the alarm reputation and packet-capture fields, a Modbus plugin line (whose `result` stays under metadata and does not produce `http.*`), a server line, a system line, and multi- and single-valued `usergroup` forms.
Declare typed stormshield.* fields for the documented vendor keys that
carry detection value instead of routing them to the flattened metadata
object: the alarm context (class, classification, repeat, sensible,
target, icmptype, icmpcode) and packet capture (pktlen, pktdumplen,
pktdump), the IP and host reputation keys (srciprep, dstiprep,
srchostrep, dsthostrep), the IKE negotiation keys of IPsec VPN logs
(phase, side, ikev, spi_in, spi_out, cookie_i, cookie_r, localnet,
remotenet, remoteid), the authentication keys (method, totp, confid,
agentid), the administration session identifier (sessionid), the filter
slot (slotlevel, slotname), the Ethernet protocol (etherproto), the
industrial and REST protocol identifiers (unitid, cipservicecode,
cipclassid, requestmode, responsemode, format, error_class, error_code),
the web filtering keys (cat_site, urlruleid, contentpolicy), the
antivirus, antispam and sandboxing verdicts (virus, spamlevel, filename,
filetype, sandboxing, sandboxinglevel) and the application
identification keys (clientappid, serverappid, groupid).

Numeric keys are converted to long so they stay aggregatable, the
comma-separated IP reputation keys are split into arrays and the curly
braces of the vendor cat_site format are removed. spamlevel stays
keyword because the documented values include X and ?, and
contentpolicy keeps its zero-padded form. The field descriptions follow
the wording of the official audit log documentation, cross-checked
against the v4 and v5 field tables; the keys that v5 no longer
documents are marked as such. The error key stays under
stormshield.metadata where the outcome derivation reads it. Most of the
moved keys reached the flattened object in the 1.6.0 and 1.7.0
releases, so relocating them now, before those releases see wide
adoption, keeps the migration cost minimal.

Add pipeline test samples derived from the official documentation
examples for ICMP alarms, for the NTP and S7 protocol inspections, and
for the antivirus, antispam and sandboxing verdicts on an SMTP flow.
Type the counters of the periodic statistics logs as aggregatable
numbers instead of flattened strings. The scalar counters of the filter
statistics log (accepted and blocked totals, memory and state gauges)
move to long fields under stormshield.filterstat, keeping the names the
vendor writes. The CPU counters of the monitor log (time allocated to
user processes, kernel time and system disruptions, as the official
documentation describes them) move to stormshield.monitor.cpu, and the
security level of the monitor log becomes the long field
stormshield.security. Counters whose value does not parse as a number
fall back to the flattened metadata object unchanged, and the composite
in/out pairs stay under metadata where the existing byte extraction
reads them.

These fields feed appliance health dashboards and alerting on CPU
time, memory gauges and blocked packet rates, which the flattened
object could not serve. The per-method authentication counters of the
authstat log stay under metadata: the official field tables do not
document them, and the per-interface structures of the monitor log
stay as well, pending a document layout that supports per-interface
aggregation.
@arenard
arenard force-pushed the stormshield-stats-typing branch from a5cdfe0 to 0669795 Compare July 20, 2026 11:05
@github-actions

Copy link
Copy Markdown
Contributor

✅ Elastic Docs Style Checker (Vale)

No issues found on modified lines!


The Vale linter checks documentation changes against the Elastic Docs style guide. To use Vale locally or report issues, refer to Elastic style guide for Vale.

@elastic-vault-github-plugin-prod

Copy link
Copy Markdown
Contributor

Changelog link mismatch — expected https://github.com/elastic/integrations/pull/20229 in the following file(s):

  • packages/stormshield/changelog.yml

Tip

If expected, add the changelog-link-check:skip label to skip this check. Or, if an issue link was intended, use .../issues/<n> instead.

View Buildkite build
@arenard

@infra-vault-gh-plugin-prod

infra-vault-gh-plugin-prod Bot commented Jul 20, 2026

Copy link
Copy Markdown

💔 Build Failed

Failed CI Steps

History

@elastic-vault-github-plugin-prod

Copy link
Copy Markdown
Contributor

🚀 Benchmarks report

To see the full report comment with /test benchmark fullreport

@andrewkroh andrewkroh added documentation Improvements or additions to documentation. Applied to PRs that modify *.md files. Integration:stormshield StormShield SNS labels Jul 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation. Applied to PRs that modify *.md files. Integration:stormshield StormShield SNS

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants