Skip to main content

Configuring a Whisperer

Configuring a Whisperer is made through two different tabs grouping:

  • Capture config, for the agent configuration
  • Parsing config, for the server parsing configuration

Settings.png

Whisperer Type

Whisperers exist in different types.
The type is defined at the creation or just after, and cannot be changed afterward.

Available types:

Whisperer typeDescription
UPLOADWhisperers dedicated to manual uploaded data (from the UI). They have higher retention duration.
INTERFACEWhisperers dedicated to real time streaming capture of data.
FILEWhisperers acting like real time but reading data from local pcap files. Used mostly for debugging.

The Whisperer type is set in the Capture Config tab in Source / Mode field:

WhispererTypeConfig.png

Import / Export configuration

You may EXPORT the configuration of a Whisperer to IMPORT it when editing the configuration.

The export is in JSON, and may also be edited manually.

Copy configuration between Whisperers

When editing you may click on COPY button to copy the configuration of another Whisperer unto yours.

It's even faster than export/import!

Capture Config

CaptureConfig.png

Source

Configure the source for packets capture.

Source.png

SettingDescriptionTypeComment
ModeThe type of the WhispererListINTERFACE | FILE | UPLOAD
Network interfaceThe network interface used for captureListany is a virtual interface on Linux that aggregates all others
lo is localhost
ethx are often the interfaces mounted by Kube
Pcap filterThe pcap filter to filter what network traffic you want to captureStringVery important to set right.
You often limit to tcp, or tcp port 80, or tcp portrange 3000-3010
MethodMethod used to capture the Network.
By default AFPACKET_THEN_LIBPCAP is used, which tries AFNET with a fallback to LIBPCAP. AFNET is slightly faster, but may not be always available, depending on your kernel.
ListLIBPCAP | AFPACKET | AFPACKET_THEN_LIBPCAP
Server hostTells what is the host of Spider, not to capture communications going to it.
To avoid infinite loops!
Fixed
Capture bufferCapture buffer of pcap in the Kernel, in kBIntegerShould often be several thousands.

BPF / pcap filter editor

The pcap filter field has a dedicated editor:

PcapFilterEditor.png

Syntax highlighting — BPF keywords (tcp, udp, host, port, and, or, not), operators, and address literals are colored. A dense filter like tcp and (host 10.0.0.1 or port 5432) and not port 80 is readable at a glance.

Live parser — The filter is parsed as you type. Syntax errors are flagged inline before you submit — no more rejected captures because of a typo.

PcapFilterEditorError.png

The parser also detects common mistakes, like selecting many ports with and.

PcapFilterEditorWarning.png

Snippet picker — A snippet picker sits on top of the input. Pick a snippet — "port 443", "portrange 8000-9000", "host" — and it drops into the editor with the port number or hostname preselected, ready to edit or use as-is.

PcapFilterEditorEdit.png

Attachments

Configure attachments made with this Whisperer by a Spider Controller.

Attachments.png

SettingDescriptionTypeComment
Time to liveWhen set, defines the maximum time an attachment of this Whisperer may be active.Duration in Sec or Min

Circuit breakers

Circuit breakers settings allow to limit Cpu usage and Ram usage of Whisperers on the host they are capturing.
Thus limiting footprint in case of network traffic burst.

CircuitBreakers.png

SettingDescriptionTypeComment
CPU circuit breakerTells if the Whisperer should stop the capture when its CPU usage is too high.BooleanCircuit breakers lasts the duration of stats collection.
CPU limitSet the threshold for the circuit breaker. In percentage.Float
RAM circuit breakerTells if the Whisperer should stop the capture when its RAM usage is too high.Boolean
RAM limitSet the threshold for the circuit breaker. In MB.Integer
Throughput limiterTells if the Whisperer should stop the capture when captured traffic is too high.Boolean
Throughput limitSet the threshold for the throughput. In MB/min.Integer
info

For LocalAgents Whisperers, only admins may change the Throughput limit, set to 5MB/min by default.

Packets sending

Settings to control the emission of packets.

PcapSending.png

SettingDescriptionTypeComment
BO time outTime out threshold when calling POST /packets API.Duration in S
Size before sendingSize threshold in kB of the buffer of packets before sending to back end.Integer
Sending frequencyDuration threshold after which the buffer of packets is sent even if not full.Duration in S
Parallel sendingHow many parallel sending of buffers are authorizedInteger
Sending queue sizeIf not slot for parallel sending is available, the Whisperer will queue the message.
When queue is full, new are discarded.
Integer

When server throughput may not be fast enough for capture load, you should increase Parallel sending setting.

caution

Those values have a direct effect on maximum Whisperer memory size:

  • queue sizexsize before sending = maximum queue size
  • Default to 500kB * 100 = 50 MB

DNS

Configures the IP reverse resolving feature.

DNS.png

SettingDescriptionTypeComment
Resolve IPsWhether the Whisperer should reverse resolve IP addresses to host names.Boolean
Custom DNS ServerWhether the Whisperer uses the system resolution or a custom DNS server.Boolean
- DNS hostHost of the custom DNS server.String
- DNS portPort of the custom DNS server.Integer
TTLHow long hostname resolution is kept in cache.Duration in H
Refresh rateHow often a cached hostname resolution is refreshed.Duration in S
Send update delayHow often an update of the list of hostnames and IPs is sent to backend.Duration in S
BO time outTime out threshold when calling POST /hosts API.Duration in S
Purge delayHow often do the Whisperer clean the cache for TTL passed resolutions.Duration in H

Tcp Sessions

Configures the tracking and sending of Tcp sessions.

Tcp Sessions.png

SettingDescriptionTypeComment
Track TCP sessionsWhether the Whisperer should track TCP sessions. If not, it will only send raw packets.BooleanUsually, you want this 😊
BO timeoutTime out threshold when calling POST /sessions API.Duration in S
Sending frequencyDuration threshold after which the buffer of sessions is sent.Duration in S
Tcp sessions TTLTime to Live after which an inactive - but not closed - Tcp session is removed from memory.Duration in M
Send only data packetsWhen set, a specific - complex - pcap filter is added to capture only data packets & packets required for Tcp sessions tracking. Only packets with data are sent. Reduces Spider CPU usage.
Please note that TCP sessions statistics will then be erroneous (IP payload etc.).
Boolean
Sessions sent at onceMax count of Tcp sessions sent by API request.Integer
Parallel sendingHow many parallel sending of buffers are authorized.Integer
Sending queue sizeIf not slot for parallel sending is available, the Whisperer will queue the message.
When queue is full, new are discarded.
Integer
Max packetLot sizeMaximum size of contingent Tcp payload authorized. Usually means a maximum size of request or response.
Packets above are sent to Spider but are not taken into account when parsing.
Avoids blowing up the servers memory. In Bytes.
Integer

Filtering

Configures filtering on hostnames to capture packets (from and to) or to avoid.

Filtering.png

SettingDescriptionTypeComment
Track by defaultWhether the Whisperer tracks (all) IP addresses by default.BooleanSet to false when you want to only track certain hostnames
Wait for resolvingWhether the Whisperer waits for having resolve the IP address to track its packets.Boolean
Track unresolved IPWhether the Whisperer tracks IP addresses it could not resolve.Boolean
Hosts to trackList of regular expressions (or string) for valid hostnames to track.Array of PatternsA whitelist
Host to ignoreList of regular expressions (or string) for hostnames to avoid tracking.Array of PatternsA blacklist

An IP resolved to a hostname to track is not re-resolved until the host is not seen for long time (DNS.ttl).
An IP resolved to a hostname not to track is re-resolved every DNS.refreshRate.

When tracking by default, as soon as a host is to ignore, don't track.
When not tracking by default, as soon as a host is to track, do track.

tip

Hostnames filtering is a very powerful feature to limit the volume of data and the CPU usage.

  • When you don't need to track packets from or to a hostname, use this.
  • When you know the IP of the hosts to ignore, rather use a pcap filter.

Duplicates

Duplicates.png

When capturing with 2 instances of the same whisperer from both side of the same communication, Spider captures twice packets and TCP sessions.
The following options allow to avoid duplicated communications resources by creating common ids and adding unique checks on server side.

To avoid duplicated packets (when you save them), choose the relevant option on the parsing part of configuration.

SettingDescriptionTypeComment
Avoid duplicated communicationsWhether the Whisperer should generate unique Ids to identify duplicates of packetsBoolean

Tls Keys

TrackTLSKeys.png

Whisperers can track TLS keys together with a Gocipher agent.
The Whisperer will look for TLS information in the TCP session it captures, and the Gocipher will capture the session TLS secrets.

Due to technical constraints, TLS keys are captured on ALL PORTS. Pcap filter has no effect on TLS capture.
However, you may limit what port to link or not by:

  • Not capturing their packets
  • Listing the ports to link in the Parsing Config
SettingDescriptionTypeComment
Track TLS KeysWhether the Whisperer & Gociphers should track and send TLS secrets to the back office.Boolean

Status sending

Configures the monitoring.

StatusSending.png

SettingDescriptionTypeComment
Send statusWhether to send Whisperer statistics to the back end.BooleanCrucial for monitoring.
BO timeoutTime out threshold when calling POST /status API.Duration in S
Sending frequencyFrequency to send statuses.Duration in S10 / 20s

Dump packets on client

You may ask the Whisperer to dump .pcap files of packets when capturing.
Used only for internal debugging.

DumpPackets.png

SettingDescriptionTypeComment
Dump packetsWhether the Whisperer should dump packets to filesBoolean
Buffer sizeSize in kB of the files to dump (approx)Integer
Output pathOutput path to store the dumpsString

Configuration polling

ConfigurationPolling.png

SettingDescriptionTypeComment
FrequencyTells how often the Whisperer calls to check a configuration changeDuration in sec.

Common parsing settings

ParsingConfig.png

caution

Parsing options are cached for 5 minutes for INTERFACE Whisperers and 1 minute for UPLOAD Whisperers.

Timezone

Timezone.png

You may associate a timezone to each Whisperer.

When the Whisperer is selected on the UI, the times of the captured communications are displayed according to this time zone - depending on the settings.

Data storage policy

In Spider configuration, you may define Customisable Data Store Policies.
These defines different available retention periods for Whisperers data.

DSP.png

The Data storage policy of the Whisperer defines how long you want to keep its data.

  • The default value is default (definitive lack of imagination here)
  • It may be changed at any time in the lifetime of a Whisperer, but existing data will still be associated and managed by the policy active at the time of indexing
  • When the setting is set to a Policy that do not exist (any more), the default one is used.

Packets saving

Configures if packets should be saved for analysis.

SavePackets.png

Spider is built to parse packets in streaming.
You do not need to save packets unless you want to analyze at low packet level.

  • When saving packets,

    • Packets are saved to Elasticsearch.
    • It requires much CPU and space.
    • You may choose to avoid duplicated packets when capturing the two side of the same communication.
      • This is costly for ES as it then has to check for if the packet exists when saving. Activate it only when needed.
  • When not saving packets,

    • Packets are only kept in memory until they are parsed.
    • This prevents reconstructing payload data for TCP or HTTP once the parsing is finished.
    • You should definitely activate 'Save content' HTTP option, or else, you won't see the data ;)

Do not save packets:

  • when you filter out part of the parsed data, and you don't want the data to be reconstructed,
  • or when you don't need to keep packets, to save space and ES resources.

You may activate saving packets only temporarily when needed.

SettingDescriptionTypeComment
Save PacketsWhether Spider should save packets from this Whisperer.Boolean
- Avoid duplicated packetsWhether Spider should check for duplicated packets to avoid saving twice the same.Boolean

Tcp sessions saving

You may wish not to save TCP sessions in Spider (once the parsing is done). Use this:

  • when your parsing quality is good,
  • when you don't care of TCP sessions.

TcpSave.png

SettingDescriptionTypeComment
Save TCP sessionsWhether Spider should save Tcp sessions from this Whisperer.Boolean
tip

When not saving packets, saving Tcp sessions has little interest.

TLS Keys

TLSKeysParsing.png

You may wish to link or not captured TLS secrets and keys to TCP sessions.
You may define if link should be done by default, or if it should be restricted to certain ports.

SettingDescriptionTypeComment
Link TLS Keys to TCP sessionsWhether this TLS keys captured for this Whisperer should be associated to its TCP sessions.Boolean
Link by defaultWhether Spider should link on all ports by default.Boolean
Ports to linkDefine server ports using TLS encryption.
The TCP sessions on those ports will be linked to TLS secrets captured.
You may define lists of ports or ranges: 80, 8080, 9200, 3000-3100.
Array of Integers or Integers ranges
Ports to ignoreDefine server ports not to link.Array of Integers or Integers ranges

Host names

When Whisperer resolves IP addresses to capture hostnames, it can determine automatically a shortname to display based on the FQDN provided by the DNS.

For this, specify one or several regular expression(s) that are used to extract parts of the FQDN, which are then concatenated by '.'. Patterns are executed in order. First one that matches is selected.

HostNames.png

SettingDescriptionTypeComment
Name patternsList of patterns to transform a FQDN into something shorter, but meaningful.Array of Patterns
tip

This is particularly useful to have shorter names on the UI.

  • You don't need to see: myservice.mynamespace.svc.cluster.local
  • Seeing myservice is enough.

The FQDN is kept along the short name, don't worry:

HostId.png

HTTP protocol parsing settings

HTTP parser provides the useful, and complex parsing options.
They allow filtering, but most importantly extracting business knowledge to show it on Spider.

HTTP Parsing

Configures which TCP sessions should be parsed for Http communications.

HttpParsing.png

SettingDescriptionTypeComment
Parse for HTTPWhether this Whisperer is capturing HTTP communications that should be parsed.Boolean
Parse by defaultWhether Spider should parse all ports by default.Boolean
Ports to parseDefine server ports exposing HTTP API.
The TCP sessions on those ports will be parsed for HTTP communications.
You may define lists of ports or ranges: 80, 8080, 9200, 3000-3100.
Array of Integers or Integers ranges
Ports to ignoreDefine server ports not to parse.Array of Integers or Integers ranges
Save parsing logDefine if the parsing tracking resource should be saved.BooleanFor Spider troubleshooting only
- Keep whole logDefine if we should keep the whole log (may be HUGE)BooleanFor Spider troubleshooting only

HTTP filtering

Configures filtering to remove headers, content or whole communication for certain URIs:

  • When it is sensitive information (and in production)
  • When it is not required to save them (like monitoring requests, healthcheck requests etc.), to save place.

Configures if Spider should save reassembled communication content.

HttpFiltering.png

SettingDescriptionTypeComment
Headers to filterDefine headers to remove in parsed object (like Basic auth header 😉).
You may filter by header name or value content.
It expects patterns to apply on the HTTP header line.
Array of Patterns
URIs to filterFilter out communications by URIs.
For sensitive communications like auth calls.
Array of Patterns
Save contentDefine if the content should be saved within the HTTP resource.
Important when not saving packets.
Boolean
- URIs to filter request bodyFilter out request body contents by URIs patterns.Array of Patterns
- URIs to filter response bodyFilter out response body contents by URIs patterns.Array of Patterns
Save raw headersDefine if the raw headers should be saved within the HTTP resource.
- URIs to filter request raw headersFilter out request raw headers by URIs patterns.Array of Patterns
- URIs to filter response raw headersFilter out response raw headers by URIs patterns.Array of Patterns
tip

Regexp are matched case insensitive.

tip

Save content when not saving packets.

tip

Save raw headers when you need to see what was really exchanged (and you don't filter any headers).

tip

Think about filtering ^Authorization: Basic headers to avoid saving passwords in Spider on production.

Request templates

On the parsed HTTP communications, you may define regular expression patterns to name the request.

The name is saved in the communication metadata and is used to aggregate and filter requests.
You define:

  • The name of the request:
    Ex: Creation of order, createAnOrder, POST /orders/{id}, depending on your style.
  • The parts of the request to parse to identify it. They will be concatenated, as in their raw format.
    • Method
    • URI, mandatory, with querystring
    • Headers
    • Request body
  • The regular expression to execute, with /ms flags.

Many regular expressions may be defined. They are matched in order, and the first match is kept.

To create many at once, you may prepare the list in a spreadsheet like Google docs with name, regexp and options in columns.
And then copy paste (without headers)

RequestsTemplates.png

SettingDescriptionTypeComment
NameName of the template.
May include placeholder for captured groups 💪.
String
PatternRegular expression. When using placeholders, use ^ and $ to enclose the pattern and avoid surprises.Pattern
MethodShould method be matched.Boolean
URIShould URI be matched.Boolean
HeadersShould headers be matched.Boolean
BodyShould body be reassembled, transfer decoded, decompressed and matched.Boolean
tip

This is one of the most useful feature of parsing.

Obviously this requires CPU, as for the next two ones.
But it is quite reasonable and optimised.
And the value is so much worth it!!

Request tags

On the parsed HTTP communications, you may define regular expression patterns to tag the request.

The tag name and value(s) are saved in the communication metadata and may be used when searching.
You define:

  • The name of the tag: Ex: 'ClientName', 'ApiVersion', 'Authenticated'...
  • The parts of the request to parse to tag it. They will be concatenated, as in their raw format.
    • Method
    • URI with querystring
    • Headers
    • Request body
  • The regular expression to execute, with /msg flags.

If the regular expression includes capture group(s), the captured data will be stored as tag value(s).
Without capture group, the tag value will be 'true' (text).
Many regular expressions may be defined. They are all executed, and all the tags are kept.

Alongside the tag value, are also saved:

  • The tag count
    • How often it matched
  • The tag cardinality
    • How often it matched with different values

This allows counting (and searching) the number of items in a response, the number of different customers...

To create many at once, you may prepare the list in a spreadsheet like Google docs with name, regexp and options in columns.
And then copy paste (without headers)

RequestsTags.png

SettingDescriptionTypeComment
NameName of the tag.String
PatternRegular expression to capture the tag.Pattern
MethodShould method be matched.Boolean
URIShould URI be matched.Boolean
HeadersShould headers be matched.Boolean
BodyShould body be reassembled, transfer decoded, decompressed and matched.Boolean
tip

Together with response tags, these are the most value-adding features of parsing!

Response tags

On the parsed HTTP communications, you may define regular expression patterns to tag the response.

It is the same process as for the request, but on the response.

ResponseTags.png

SettingDescriptionTypeComment
NameName of the tag.String
PatternRegular expression to capture the tag.Pattern
StatusShould status line be matched.Boolean
HeadersShould headers be matched.Boolean
BodyShould body be reassembled, transfer decoded, decompressed and matched.Boolean
tip

When defining the same tag in request or response, or many times the same tag in either, all extracted values will be associated to the same tag and counted for tag count and cardinality.

Schema bindings

Schema bindings let Spider decode HTTP request and response bodies into structured JSON for display and extraction.

Each binding maps an HTTP method + URI template + Content-Type to a serialization format (Protobuf, MessagePack, or JSON), so Spider can transcode the raw bytes into a readable format.

HttpSchemaBindings.png HttpSchemaBindingsEdit.png

SettingDescriptionTypeComment
NameDisplay name for the binding.String
MethodHTTP method to match (e.g. GET, POST). Leave empty to match all methods.ListGET | POST | PUT | DELETE | PATCH | HEAD | OPTIONS | (any)
URI templateURI pattern in RFC 6570 format (e.g. /api/users/{id}). Path parameters are treated as wildcards.String
Content-TypeContent-Type header value to match (e.g. application/x-protobuf). Trailing * matches vendor families.String
Request formatSerialization format of the request body.Listprotobuf | msgpack | json
Request schemaSchema ID for the request body.String
Request typeProtobuf message type name for the request body.StringRequired when format is protobuf
Response formatSerialization format of the response body.Listprotobuf | msgpack | json
Response schemaSchema ID for the response body.String
Response typeProtobuf message type name for the response body.StringRequired when format is protobuf
tip

Schema bindings are useful when your HTTP API exchanges binary-encoded bodies (protobuf, msgpack) instead of plain JSON. Once bound, Spider decodes the body and displays it as readable JSON, and request/response tags can extract fields from it.

PostgreSQL protocol parsing settings

PostgreSQL parser provides similar parsing options as HTTP, but simpler.
They allow some filtering for safety, but most also, as for HTTP, they allow extracting business knowledge to show it on Spider.

PostgreSQL Parsing

Configures which TCP sessions should be parsed for PostgreSQL communications.

PsqlParsing.png

SettingDescriptionTypeComment
Parse for PostgreSQLWhether this Whisperer is capturing PostgreSQL communications that should be parsed.Boolean
Parse by defaultWhether Spider should parse all ports by default.Boolean
Ports to parseDefine server ports exposing PostgreSQL API.
The TCP sessions on those ports will be parsed for HTTP communications.
You may define lists of ports or ranges: 5432, 5430-5440.
Array of Integers or Integers ranges
Ports to ignoreDefine server ports not to parse.Array of Integers or Integers ranges
Save parsing logDefine if the parsing tracking resource should be saved.BooleanFor Spider troubleshooting only
- Keep whole logDefine if we should keep the whole log (may be HUGE) - only for temporary debugBooleanFor Spider troubleshooting only

PostgreSQL filtering

Configures filtering to some specific messages:

  • When it is sensitive information (like connections and in production)
  • When it is not required to save them (like data rows etc.), to save place.

PsqlFiltering.png

SettingDescriptionTypeComment
Save connectionsDefine if we should save Startup requests/responsesBooleanSaves space when not saved. Connection metadata is included in all coms.
Save password messagesWhen saving Startup, you may want not to save password messages. Saving those could be unsafe if PostgreSQL is not using crypted password handshake.Boolean
Save disconnectionsNot very useful messages ;)Boolean
Save SELECT data rowsTo save space, you may want NOT TO save data received in response of SQL queries.Boolean
Save INSERT rowsTo save space, you may want NOT TO save data sent to be saved in PostgreSQLBoolean

Query templates

On the parsed PostgreSQL communications, you may define regular expression patterns to give a name to the query.

The name is saved in the communication metadata and is used to aggregate and filter requests.
You define:

  • The name of the request:
    Ex: Creation of order, createAnOrder, POST /orders/{id}, depending on your style.
  • The regular expression to execute, with /ms flags over the SQL query.

Many regular expressions may be defined. They are matched in order, and the first match is kept.

To create many at once, you may prepare the list in a spreadsheet like Google docs with name, regexp and options in columns.
And then copy paste (without headers)

PsqlQueryTemplates.png

SettingDescriptionTypeComment
NameName of the template.
May include placeholder for captured groups 💪.
String
PatternRegular expression. When using placeholders, use ^ and $ to enclose the pattern and avoid surprises.Pattern
tip

This is one of the most useful feature of parsing.

Obviously this requires CPU, as for the next two ones.
But it is quite reasonable and optimized.
And the value is so much worth it!!

Request tags

On the parsed PostgreSQL communications, you may define fields to extract from the query or result set.

The tag name and value(s) are saved in the communication metadata and may be used when searching.
You define:

  • The name of the tag: Ex: 'ClientName', 'OrderId'...
  • The name of the fields to find.
    • Format: [table].[column]->>[jsonpath] or [table].[column].[jsonpath] or [table].[column] (no jsonpath)
    • If the field is already extracted from the JSON object in the field to check, use dot notation.
    • If Spider has to extract the field from the JSON object, use ->>.
  • The fields of the request to fetch values from.
    • Checked fields, used in WHERE or JOIN conditions
    • Insert fields, used to insert data in
    • Update fields, updated by the UPDATE command
    • Conflict update fields, updated when a conflict happens

The values associated to theses fields will be extracted from the queries, or find the bound values of prepared statements.
Once extracted, they will be saved as tag value(s) for searches, stats etc.

Note that fields computed based on original ones like sum, format, conversions are not supported.
Only original table fields are supported.

Alongside the tag value, are also saved:

  • The tag count
    • How often it matched
  • The tag cardinality
    • How often it matched with different values

This allows counting (and searching) the number of items in a response, the number of different customers...

To create many at once, you may prepare the list in a spreadsheet like Google docs with name, regexp and options in columns.
And then copy paste (without headers)

PsqlRequestsTags.png

In this example, we want to extract the customer id from any query to Orders, the customer id being stored in a JSONB field data as:

{
"customer": {
"id": 123
}
}

Customer id is used:

  • In where conditions, as data->'customer'->>'id' = $1
  • In INSERT or UPDATE statements, as part of the json inserted to data jsonb column.

The above setting extracts customer id from all queries to Orders table, as a tag to be able to search PostgreSQL communications addressing this specific customer.

SettingDescriptionTypeComment
Tag nameName of the tag.String
Table fieldField to extract the value from.String
CheckedShould we extract from checked fields values.Boolean
InsertShould we extract from inserted fields values.Boolean
UpdateShould we extract from updated fields values.Boolean
ConflictShould we extract from updated fields values when conflict.Boolean
tip

Together with response tags, these are the most value-adding features of parsing!

Response tags

On the parsed PostgreSQL communications, you may define what fields you want to extract from the response.

It is the same process as for the request, but on the response.

PsqlResponseTags.png

SettingDescriptionTypeComment
Tag nameName of the tag.String
Table fieldField to extract the value from.String
tip

When defining the same tag in request or response, or many times the same tag in either, all extracted values will be associated to the same tag and counted for tag count and cardinality.

Redis protocol parsing settings

Redis parser provides parsing options to decode Redis commands and responses.
They allow filtering, and as for HTTP, they allow extracting business knowledge to show it on Spider.

Redis Parsing

Configures which TCP sessions should be parsed for Redis communications.

RedisParsing.png

SettingDescriptionTypeComment
Parse for RedisWhether this Whisperer is capturing Redis communications that should be parsed.Boolean
Parse by defaultWhether Spider should parse all ports by default.Boolean
Ports to parseDefine server ports exposing Redis API.
The TCP sessions on those ports will be parsed for Redis communications.
You may define lists of ports or ranges: 6379, 6380-6389.
Array of Integers or Integers rangesDefault: 6379
Ports to ignoreDefine server ports not to parse.Array of Integers or Integers ranges
Save parsing logDefine if the parsing tracking resource should be saved.BooleanFor Spider troubleshooting only
- Keep whole logDefine if we should keep the whole log (may be HUGE) — only for temporary debugBooleanFor Spider troubleshooting only

Redis content settings

Configures whether Redis command values should be saved.

RedisContent.png

SettingDescriptionTypeComment
Save content for writesSave values in write commands (SET, HSET, LPUSH, etc.)Boolean
Save content for readsSave values in read commands (GET, HGET, LRANGE, etc.)Boolean
Save content for pub/subSave content in Pub/Sub messages (PUBLISH, SUBSCRIBE, etc.)Boolean

Request templates

On the parsed Redis communications, you may define regular expression patterns to name the request.

The name is saved in the communication metadata and is used to aggregate and filter requests.
You define:

  • The name of the request:
    Ex: Get user, Set session, depending on your style.
  • The parts of the request to parse to identify it. They will be concatenated.
    • Command (e.g. GET, SET, HSET)
    • Key
    • Args

Many regular expressions may be defined. They are matched in order, and the first match is kept.

RedisRequestTemplates.png

SettingDescriptionTypeComment
NameName of the template.
May include placeholder for captured groups 💪.
String
PatternRegular expression. When using placeholders, use ^ and $ to enclose the pattern and avoid surprises.Pattern
CommandShould command be matched.Boolean
KeyShould key be matched.Boolean
ArgsShould additional arguments be matched.Boolean

Request tags

On the parsed Redis communications, you may define regular expression patterns to tag the request.

The tag name and value(s) are saved in the communication metadata and may be used when searching.

RedisRequestTags.png

SettingDescriptionTypeComment
NameName of the tag.String
PatternRegular expression to capture the tag.Pattern
CommandShould command be matched.Boolean
KeyShould key be matched.Boolean
ArgsShould additional arguments be matched.Boolean
ValueShould the value being written be matched.Boolean

Response tags

On the parsed Redis communications, you may define regular expression patterns to tag the response.

RedisResponseTags.png

SettingDescriptionTypeComment
NameName of the tag.String
PatternRegular expression to capture the tag.Pattern
Reply typeShould the reply type be matched.Boolean
ErrorShould error messages be matched.Boolean
ValueShould the returned value be matched.Boolean

Schema bindings

Schema bindings let Spider decode raw Redis values into structured JSON for display and extraction.

Each binding maps a Redis key pattern to a serialization format (Protobuf, MessagePack, or JSON), so Spider can transcoding the raw bytes into a readable format.

RedisSchemaBindings.png

SettingDescriptionTypeComment
NameDisplay name for the binding.String
DBRedis database number to match (e.g. 0, 1). Leave empty to match all databases.String
Key globGlob pattern to match Redis keys (e.g. user:*, session:*:data).String
FormatSerialization format of the value.Listprotobuf | msgpack | json
Schema IDSchema identifier used for protobuf (matches a schema registered in Spider).String
Message typeProtobuf message type name within the schema.StringRequired when format is protobuf
tip

Schema bindings are required for Request and Response tags that use field paths — Spider needs to decode the value before it can extract fields from it.

gRPC protocol parsing settings

gRPC parser provides parsing options to decode gRPC messages using protobuf schemas.
They allow filtering, and they enable extracting business knowledge from structured messages.

gRPC Parsing

Configures which TCP sessions should be parsed for gRPC communications.

GrpcParsing.png

SettingDescriptionTypeComment
Parse for gRPCWhether this Whisperer is capturing gRPC communications that should be parsed.Boolean
Parse by defaultWhether Spider should parse all ports by default.Boolean
Ports to parseDefine server ports exposing gRPC API.
The TCP sessions on those ports will be parsed for gRPC communications.
You may define lists of ports or ranges: 50051, 50051-50060.
Array of Integers or Integers rangesDefault: 50051
Ports to ignoreDefine server ports not to parse.Array of Integers or Integers ranges
Save parsing logDefine if the parsing tracking resource should be saved.BooleanFor Spider troubleshooting only
- Keep whole logDefine if we should keep the whole log (may be HUGE) — only for temporary debugBooleanFor Spider troubleshooting only

gRPC content settings

Configures whether gRPC message bodies should be saved.

GrpcContent.png

SettingDescriptionTypeComment
Save content for requestsSave request message bodies.Boolean
Save content for responsesSave response message bodies.Boolean

Request templates

On the parsed gRPC communications, you may define regular expression patterns to name the request.

GrpcRequestTemplates.png

SettingDescriptionTypeComment
NameName of the template.
May include placeholder for captured groups 💪.
String
PatternRegular expression. When using placeholders, use ^ and $ to enclose the pattern and avoid surprises.Pattern
Full methodShould the full method path be matched (e.g. /package.Service/Method).BooleanDefault: true
MetadataShould gRPC metadata (headers) be matched.Boolean
MessageShould the request message body (decoded) be matched.BooleanRequires a schema binding for the method

Request tags

On the parsed gRPC communications, you may extract fields from the request using gjson paths.

Tags use gjson paths to navigate a view object assembled for each communication.

GrpcRequestTags.png

The path navigates a view object with these top-level fields:

FieldContent
serviceService name (e.g. UserService)
methodMethod name (e.g. GetUser)
fullMethodFull gRPC path (e.g. /pkg.UserService/GetUser)
metadata.<key>gRPC request metadata (headers), e.g. metadata.x-tenant
message.<field>Decoded request body (requires a schema binding)
SettingDescriptionTypeComment
NameName of the tag.String
Pathgjson path into the request view (e.g. service, metadata.x-tenant, message.user.id, message.items.#.id).Stringmessage.* requires a schema binding for the method

Response tags

On the parsed gRPC communications, you may extract fields from the response using gjson paths.

The path navigates a view object with these top-level fields:

FieldContent
grpcStatusgRPC status code integer (0 = OK)
grpcStatusNamegRPC status name (e.g. OK, NOT_FOUND, INTERNAL)
grpcMessagegRPC error message string (when status ≠ OK)
metadata.<key>Trailing gRPC metadata (headers)
message.<field>Decoded response body (requires a schema binding)
SettingDescriptionTypeComment
NameName of the tag.String
Pathgjson path into the response view (e.g. grpcStatusName, grpcMessage, message.items.#, message.status.code).Stringmessage.* requires a schema binding for the method

Schema bindings

Schema bindings let Spider decode gRPC message bytes into structured JSON for display and extraction.

Each binding maps a service/method pattern to request and response schemas (typically protobuf).

GrpcSchemaBindings.png

SettingDescriptionTypeComment
NameDisplay name for the binding.String
Service patternRegex pattern to match the gRPC service name (e.g. .*\.UserService). Leave empty to match all.String
Method patternRegex pattern to match the gRPC method name (e.g. Get.*). Leave empty to match all.String
Request formatSerialization format of the request message.Listprotobuf | msgpack | json
Request schemaSchema ID for the request.String
Request typeProtobuf message type for the request.String
Response formatSerialization format of the response message.Listprotobuf | msgpack | json
Response schemaSchema ID for the response.String
Response typeProtobuf message type for the response.String
tip

Schema bindings are required for Request and Response tags — Spider needs to decode the protobuf message before it can extract fields from it.

Kafka protocol parsing settings

Kafka parser provides parsing options to decode Kafka Produce and Fetch operations.
They allow filtering, and they enable extracting business knowledge from record payloads.

Kafka Parsing

Configures which TCP sessions should be parsed for Kafka communications.

KafkaParsing.png

SettingDescriptionTypeComment
Parse for KafkaWhether this Whisperer is capturing Kafka communications that should be parsed.Boolean
Parse by defaultWhether Spider should parse all ports by default.Boolean
Ports to parseDefine server ports exposing Kafka brokers.
The TCP sessions on those ports will be parsed for Kafka communications.
You may define lists of ports or ranges: 9092, 9093.
Array of Integers or Integers rangesDefault: 9092
Ports to ignoreDefine server ports not to parse.Array of Integers or Integers ranges
Save parsing logDefine if the parsing tracking resource should be saved.BooleanFor Spider troubleshooting only
- Keep whole logDefine if we should keep the whole log (may be HUGE) — only for temporary debugBooleanFor Spider troubleshooting only

Kafka content settings

Configures whether Kafka record key/value bytes should be saved.

KafkaContent.png

SettingDescriptionTypeComment
Save content for producesSave record content (key/value) from Produce requests.Boolean
Save content for fetchesSave record content (key/value) from Fetch responses.Boolean

Request templates

On the parsed Kafka communications, you may define regular expression patterns to name the request.

KafkaRequestTemplates.png

SettingDescriptionTypeComment
NameName of the template.
May include placeholder for captured groups 💪.
String
PatternRegular expression. When using placeholders, use ^ and $ to enclose the pattern and avoid surprises.Pattern
CommandShould the Kafka command (e.g. Produce, Fetch) be matched.BooleanDefault: true
TopicShould the topic name be matched.BooleanDefault: true
Client IDShould the client ID be matched.Boolean
MessageShould the decoded record value be matched.BooleanRequires a schema binding for the topic

Request tags

On the parsed Kafka communications, you may extract fields from the Produce request using gjson paths.

Tags use gjson paths to navigate a view object assembled for each communication.

KafkaRequestTags.png

The path navigates a view object with these top-level fields:

FieldContent
commandKafka command (e.g. Produce)
clientIdKafka client ID
topic.0First topic name (e.g. orders)
records.N.keyDecoded key of record N (requires a schema binding)
records.N.value.<field>Field from decoded value of record N (requires a schema binding)

Use gjson array queries to span all records: records.#.value.customerId extracts customerId from every record.

SettingDescriptionTypeComment
NameName of the tag.String
Pathgjson path into the request view (e.g. command, topic.0, records.0.value.order.id, records.#.value.customerId).Stringrecords.*.value.* requires a schema binding for the topic

Response tags

On the parsed Kafka communications, you may extract fields from the Fetch response using gjson paths.

The path navigates a view object with these top-level fields:

FieldContent
statusCodeHTTP-equivalent status code (200 = OK, 400 = error)
statusTextStatus description
errorCodeKafka error code (0 = success)
topic.0First topic name
records.N.value.<field>Field from decoded value of record N (requires a schema binding)
SettingDescriptionTypeComment
NameName of the tag.String
Pathgjson path into the response view (e.g. statusCode, errorCode, records.#, records.0.value.status).Stringrecords.*.value.* requires a schema binding for the topic

Schema bindings

Schema bindings let Spider decode Kafka record bytes into structured JSON for display and extraction.

Each binding maps a topic pattern to a serialization format. Spider supports Protobuf, MessagePack, JSON, and Avro — including Confluent Schema Registry wire-format detection.

KafkaSchemaBindings.png

SettingDescriptionTypeComment
NameDisplay name for the binding.String
Topic globGlob pattern to match Kafka topic names (e.g. orders-*, user.events). Leave empty for all.String
SideWhich part of the record to decode.Listkey | value | (both)
Registry IDConfluent Schema Registry ID embedded in the record wire format. Overrides format/schema ID.IntegerOptional — only needed for Confluent wire format
FormatSerialization format of the record.Listprotobuf | msgpack | json | avro
Schema IDSchema identifier registered in Spider.String
Message typeProtobuf or Avro message type name within the schema.StringRequired when format is protobuf
tip

Schema bindings unlock templates and tags on record content — Spider must decode the bytes before it can match patterns or extract field values.

note

When records carry the Confluent wire-format prefix (magic byte 0x00 + 4-byte schema ID), Spider auto-detects the schema ID embedded in the record. You may define a binding with a matching Registry ID to explicitly map that ID to a schema registered in Spider.

Templates & Tags playground

The Whisperer configuration panel has a Playground section that lets you immediately test your Templates and Tags configuration on historical data, without waiting for the Whisperer to reload.

It takes a configurable number of the first items (1–50, default 10) from the current filtered list and runs Templates and Tags extraction on them. It shows immediately which Templates and Tags match, what values they extract, and for each tag the match count and cardinality (number of distinct values) — allowing you to validate or adjust your configuration on the spot.

WhispererPlayground.png

Before this feature, testing a new template required:

  • pushing the config,
  • waiting for the Whisperer to reload,
  • capturing some traffic,
  • waiting for the configuration to apply on the backend,
  • then checking if the template or tags matched.

Now you click Run over history data and see the result immediately.

The playground works for HTTP, PostgreSQL, Redis, gRPC, and Kafka parsing configurations.

When schema bindings are configured, the playground also runs the transcoding step — record bytes are decoded before templates and tags are evaluated. This lets you validate that your bindings decode correctly and that your tags extract the right fields, all from one place.

Show binding details

The playground result table has a Show binding details toggle.

WhispererPlaygroundBindingDetails.png

When enabled, each result row expands to reveal:

  • Schema resolution — which binding matched the item (by name), or a clear error if no binding matched or the schema was invalid. This is shown per direction (request and response independently).
  • Transcoded body — the decoded request and/or response payload rendered as a JSON tree, exactly as Spider stores and displays it.

Binding errors are always visible, even with the toggle off — you will never silently miss a misconfigured binding.

tip

Use this toggle to debug schema bindings: if the transcoded body is missing or wrong, the resolution line tells you whether the binding matched at all and which one was selected.

note

This feature requires that the Whisperer is configured to save its complete data:

  • HTTP: Raw headers and body
  • PostgreSQL: INSERT and SELECT data rows
  • Redis / gRPC / Kafka: Content saving enabled (so raw bytes are available to decode)