Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions packages/cisco_ise/_dev/build/docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,7 @@
- Logging categories not enabled: Cisco ISE won't send logs unless specific logging categories are explicitly assigned to a remote logging target. Ensure your target is selected in the **Remote Logging Targets** list for each desired category under **Administration > System > Logging > Logging Categories**.
- SSL/TLS configuration issues: When you're using the `ssl` settings for TCP, ensure that certificate and key file paths are correct and that the Elastic Agent has sufficient permissions to access them. Mismatched certificates or incorrect `YAML` configuration will prevent the agent from establishing a secure connection.
- Parsing failures due to malformed logs: Cisco ISE logs that are segmented or contain unexpected formats can cause parsing errors. Review the raw logs in Kibana by checking the `message` or `event.original` field for `_grokparsefailure` tags. Ensure the **Maximum Length** in Cisco ISE is set to `8192`.
- Split device sensor records: When the device sensor feature is enabled, Cisco ISE forwards CDP and LLDP attribute values verbatim. A neighboring switch or access point reports its multi-line version banner in `lldpSystemDescription`, so the record reaches syslog with embedded newlines and the TCP and log file inputs split it into several messages. Only the first message carries the ISE header and is parsed; the remaining lines are tagged `cisco_ise.device_sensor_fragment` and their text is kept in `message`, so any attributes that followed the embedded newline (such as `AcsSessionID` or `NetworkDeviceGroups`) aren't parsed into fields. To collect these records whole, exclude the system description from the device sensor TLV list on the network device, for example `device-sensor filter-list lldp list <name>` with `no tlv name system-description`, and apply it with `device-sensor filter-spec lldp include list <name>`.

Check notice on line 207 in packages/cisco_ise/_dev/build/docs/README.md

View workflow job for this annotation

GitHub Actions / Lint user-facing content

Elastic.Semicolons: Use semicolons judiciously.
- UDP buffer limitations: In high-volume environments using the UDP input, you might need to increase the `read_buffer` size in the advanced settings to prevent packet loss during bursts of activity. The default is `100MiB`.

### Vendor resources
Expand Down
5 changes: 5 additions & 0 deletions packages/cisco_ise/changelog.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
# newer versions go on top
- version: "1.32.11"
changes:
- description: Parse CDP/LLDP device-sensor continuation lines instead of reporting a parse error for each one. Tag them as `cisco_ise.device_sensor_fragment`, keep their text in `message`, and recover the attributes that follow an embedded newline. Remove the unreachable `@timestamp` fallback added in 1.32.9.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Severity: 🟡 Medium confidence: high path: packages/cisco_ise/changelog.yml:4

The reworded 1.32.11 entry now claims it will "recover the attributes that follow an embedded newline", but fragments never reach a category pipeline so no attributes are parsed; drop that clause so the changelog matches the README and the test expectations.

Details

The new wording promises attribute recovery, but the pipeline does not do that. Fragment lines leave grok_time_details with cisco_ise.log.category.name unset (patterns at default.yml:22-26 capture only _tmp.message, never a category), and every category sub-pipeline at default.yml:156-227 is gated on ctx.cisco_ise?.log?.category?.name == '<CISE_...>'. With no category, no sub-pipeline runs and the key-value parsing that would produce AcsSessionID, NetworkDeviceGroups, CPMSessionID, etc. never executes.

The PR's own artifacts confirm this. Every fragment document in test-pipeline-device-sensor-fragments.log-expected.json contains only @​timestamp, ecs.version, event.original, message and tags - no parsed attributes, even for the Compiled ... line whose message is the full AcsSessionID=.../NetworkDeviceGroups=... attribute list. The README bullet added in this same PR states the opposite of the changelog: "any attributes that followed the embedded newline (such as AcsSessionID or NetworkDeviceGroups) aren't parsed into fields." A user reading the changelog will expect fields that never appear.

Recommendation:

Describe only what the change does - tag the fragments and keep their text searchable:

- version: "1.32.11"
  changes:
    - description: Tag CDP/LLDP device-sensor continuation lines as `cisco_ise.device_sensor_fragment` and keep their text in `message` instead of reporting a parse error for each line.
      type: bugfix
      link: https://github.com/elastic/integrations/pull/20528

🤖 AI-Generated Review | Vera Review Bot | 📚 Knowledge base: integration-skills

⚠️ Automated review — verify suggestions before applying.

type: bugfix
link: https://github.com/elastic/integrations/pull/20528
- version: "1.32.10"
changes:
- description: Set event.outcome for Administrative and Operational Audit login, logoff and configuration message codes (51000, 51001, 51002, 51020, 51021, 60077, 60078, 60080, 60081, 60084, 60115, 60116, 60188, 61077). Extract user.name and source.ip from OperationMessageText for SSH CLI login events (60080, 60081). Populate user.name from AdminName for all admin audit events.
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1,7 @@
CISE_Profiler 0000034521 2 1 cisco-av-pair=cdp-tlv=cdpCacheAddress=192.0.2.10, cisco-av-pair=lldp-tlv=lldpSystemDescription=Cisco IOS Software C3700 Software, cisco-av-pair=cdp-tlv=cdpCacheDeviceId=SAMPLE-AP-0001,
Technical Support: http://www.cisco.com/techsupport\
Copyright (c) 1986-2024 by Cisco Systems, Inc.\
Compiled Mon 01-Jan-24 00:00 by sample, cisco-av-pair=cdp-tlv=cdpCacheDeviceId=SAMPLE-AP-0001.8, cisco-av-pair=audit-session-id=C000020A00001111AAAA2222, cisco-av-pair=method=mab, AcsSessionID=SAMPLE-ISE-01/000000000/1111111, Step=11004, NetworkDeviceGroups=Location#All Locations#SAMPLE, CPMSessionID=C000020A00001111AAAA2222, StepLatency=1=0;2=0;3=0;4=1;5=0, TotalAuthenLatency=2, Operation=Operation#Operation#CLOSED,
#1 Mon Jan 1 00:00:00 UTC 2024\
mips, cisco-av-pair=lldp-tlv=lldpSystemName=SAMPLE-AP-0002, cisco-av-pair=lldp-tlv=lldpPortDescription=Ethernet Interface, Operation=Operation#Operation#CLOSED,
, cisco-av-pair=cdp-tlv=cdpCacheDeviceId=SAMPLE-AP-0002, cisco-av-pair=lldp-tlv=End-of-LLDPDU=\
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"expected": [
{
"@timestamp": "2026-07-29T11:52:24.610988003Z",
"@timestamp": "2026-08-05T00:20:34.681860333Z",
"cisco_ise": {
"log": {
"category": {
Expand All @@ -27,6 +27,96 @@
"preserve_original_event",
"cisco_ise.timestamp_defaulted_to_ingest_time"
]
},
{
"@timestamp": "2026-08-05T00:20:34.681865583Z",
"ecs": {
"version": "8.17.0"
},
"event": {
"original": "Technical Support: http://www.cisco.com/techsupport\\"
},
"message": "Technical Support: http://www.cisco.com/techsupport\\",
"tags": [
"preserve_original_event",
"cisco_ise.device_sensor_fragment",
"cisco_ise.timestamp_defaulted_to_ingest_time"
]
},
{
"@timestamp": "2026-08-05T00:20:34.681866083Z",
"ecs": {
"version": "8.17.0"
},
"event": {
"original": "Copyright (c) 1986-2024 by Cisco Systems, Inc.\\"
},
"message": "Copyright (c) 1986-2024 by Cisco Systems, Inc.\\",
"tags": [
"preserve_original_event",
"cisco_ise.device_sensor_fragment",
"cisco_ise.timestamp_defaulted_to_ingest_time"
]
},
{
"@timestamp": "2026-08-05T00:20:34.681866333Z",
"ecs": {
"version": "8.17.0"
},
"event": {
"original": "Compiled Mon 01-Jan-24 00:00 by sample, cisco-av-pair=cdp-tlv=cdpCacheDeviceId=SAMPLE-AP-0001.8, cisco-av-pair=audit-session-id=C000020A00001111AAAA2222, cisco-av-pair=method=mab, AcsSessionID=SAMPLE-ISE-01/000000000/1111111, Step=11004, NetworkDeviceGroups=Location#All Locations#SAMPLE, CPMSessionID=C000020A00001111AAAA2222, StepLatency=1=0;2=0;3=0;4=1;5=0, TotalAuthenLatency=2, Operation=Operation#Operation#CLOSED,"
},
"message": "cisco-av-pair=cdp-tlv=cdpCacheDeviceId=SAMPLE-AP-0001.8, cisco-av-pair=audit-session-id=C000020A00001111AAAA2222, cisco-av-pair=method=mab, AcsSessionID=SAMPLE-ISE-01/000000000/1111111, Step=11004, NetworkDeviceGroups=Location#All Locations#SAMPLE, CPMSessionID=C000020A00001111AAAA2222, StepLatency=1=0;2=0;3=0;4=1;5=0, TotalAuthenLatency=2, Operation=Operation#Operation#CLOSED,",
"tags": [
"preserve_original_event",
"cisco_ise.device_sensor_fragment",
"cisco_ise.timestamp_defaulted_to_ingest_time"
]
},
{
"@timestamp": "2026-08-05T00:20:34.681866750Z",
"ecs": {
"version": "8.17.0"
},
"event": {
"original": "#1 Mon Jan 1 00:00:00 UTC 2024\\"
},
"message": "#1 Mon Jan 1 00:00:00 UTC 2024\\",
"tags": [
"preserve_original_event",
"cisco_ise.device_sensor_fragment",
"cisco_ise.timestamp_defaulted_to_ingest_time"
]
},
{
"@timestamp": "2026-08-05T00:20:34.681867042Z",
"ecs": {
"version": "8.17.0"
},
"event": {
"original": "mips, cisco-av-pair=lldp-tlv=lldpSystemName=SAMPLE-AP-0002, cisco-av-pair=lldp-tlv=lldpPortDescription=Ethernet Interface, Operation=Operation#Operation#CLOSED,"
},
"message": "cisco-av-pair=lldp-tlv=lldpSystemName=SAMPLE-AP-0002, cisco-av-pair=lldp-tlv=lldpPortDescription=Ethernet Interface, Operation=Operation#Operation#CLOSED,",
"tags": [
"preserve_original_event",
"cisco_ise.device_sensor_fragment",
"cisco_ise.timestamp_defaulted_to_ingest_time"
]
},
{
"@timestamp": "2026-08-05T00:20:34.681867292Z",
"ecs": {
"version": "8.17.0"
},
"event": {
"original": ", cisco-av-pair=cdp-tlv=cdpCacheDeviceId=SAMPLE-AP-0002, cisco-av-pair=lldp-tlv=End-of-LLDPDU=\\"
},
"message": "cisco-av-pair=cdp-tlv=cdpCacheDeviceId=SAMPLE-AP-0002, cisco-av-pair=lldp-tlv=End-of-LLDPDU=\\",
"tags": [
"preserve_original_event",
"cisco_ise.device_sensor_fragment",
"cisco_ise.timestamp_defaulted_to_ingest_time"
]
}
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,40 @@ processors:
- '^(?:<%{NUMBER:log.syslog.priority:long}>)?%{SYSLOGTIMESTAMP:_tmp.timestamp} %{DATA:host.hostname} %{DATA:cisco_ise.log.category.name} %{GREEDYDATA:_tmp.message}$'
- '^%{TIMEONLYSTAMP_ISO8601:_tmp.timestamp}%{ISO8601_TIMEZONE:_tmp.timezone} %{DATA:host.hostname} %{DATA:cisco_ise.log.category.name} %{GREEDYDATA:_tmp.message}$'
- '^%{DATA:cisco_ise.log.category.name} %{DATA:cisco_ise.log.message.id} %{NONNEGINT:cisco_ise.log.segment.total:long} %{NONNEGINT:cisco_ise.log.segment.number:long} %{GREEDYDATA:_tmp.message}$'
- '^Technical Support: %{GREEDYDATA}$'
- '^Copyright %{GREEDYDATA}$'
- '^Compiled %{DATA} by %{DATA}, %{GREEDYDATA:_tmp.message}$'
Comment thread
vinit-chauhan marked this conversation as resolved.
- '^#%{NONNEGINT} %{GREEDYDATA}$'

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @taylor-swanson - Do you remember how we've these cases where events are truncated?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If messages are truncated, that's usually a sign of a problem upstream (namely, TCP framing issues).

In this case, I guess the message contains newlines and it's getting split by the tcp input?

Ugh. The proper way to solve this is to have the Cisco device use octet framing (which completely bypasses the need for a character-based delimiter). This feels like the wrong solution.

- '^%{DATA}, (?<_tmp.message>cisco-av-pair=.*)$'
pattern_definitions:
Comment thread
vinit-chauhan marked this conversation as resolved.
TIMEONLYSTAMP_ISO8601: '%{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?'
on_failure:
- append:
tag: append_error_message_62c1fc01
field: error.message
value: '{{{ _ingest.on_failure_processor_tag }}}: {{{_ingest.on_failure_message}}}'
- set:
tag: set_device_sensor_fragment_flag
description: >-
ISE forwards device-sensor values verbatim, so a neighbor's multi-line
banner (lldpSystemDescription) arrives with its newlines intact, each
escaped as a trailing backslash. The inputs split on them, leaving
continuation lines that carry no ISE header, so no category name is
parsed. Flag them so the attributes they carry can be processed as the

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Severity: 🔵 Low confidence: high path: packages/cisco_ise/data_stream/log/elasticsearch/ingest_pipeline/default.yml:38

The set_device_sensor_fragment_flag description claims the flag exists "so the attributes they carry can be processed as the tail of the preceding record", but nothing joins fragments to the preceding record; reword it to describe what the flag actually does.

Details

_tmp.device_sensor_fragment is consumed only by append_tag_device_sensor_fragment (line 47) and is then dropped with the rest of _tmp by remove_25df5c8b. No processor correlates a fragment with the record that preceded it. The README added in this same PR states the opposite of the processor description: "any attributes that followed the embedded newline (such as AcsSessionID or NetworkDeviceGroups) aren't parsed into fields". A future maintainer reading the processor will look for reassembly logic that does not exist.

Recommendation:

Make the description match the behaviour:

  - set:
      tag: set_device_sensor_fragment_flag
      description: >-
        ISE forwards device-sensor values verbatim, so a neighbor's multi-line
        banner (lldpSystemDescription) arrives with its newlines intact, each
        escaped as a trailing backslash. The inputs split on them, leaving
        continuation lines that carry no ISE header, so no category name is
        parsed. Flag them so they can be tagged and filtered out rather than
        reported as a parse error; their attributes are not reassembled into
        the preceding record.
      field: _tmp.device_sensor_fragment
      value: true

🤖 AI-Generated Review | Vera Review Bot | 📚 Knowledge base: integration-skills

⚠️ Automated review — verify suggestions before applying.

tail of the preceding record.
field: _tmp.device_sensor_fragment
value: true
if: >-
ctx.cisco_ise?.log?.category?.name == null &&
ctx.event?.original instanceof String &&
(ctx.event.original.endsWith('\\') ||
ctx.event.original.trim().endsWith(','))
- append:
tag: append_tag_device_sensor_fragment
field: tags
value: cisco_ise.device_sensor_fragment
allow_duplicates: false
if: ctx._tmp?.device_sensor_fragment == true
- grok:
field: _tmp.message
tag: grok_message_details
Expand All @@ -41,6 +68,14 @@ processors:
tag: append_error_message_0a0a0ab3
field: error.message
value: '{{{ _ingest.on_failure_processor_tag }}}: {{{_ingest.on_failure_message}}}'
- set:
tag: set_message_from_event_original
description: >-
The device-sensor banner patterns match without capturing, so those
lines arrive here with no message. Keep their text searchable.
field: message
copy_from: event.original
if: ctx.message == null && ctx.event?.original != null
- trim:
tag: trim_message_c88e4c4f
field: message
Expand Down
1 change: 1 addition & 0 deletions packages/cisco_ise/docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,7 @@ You might encounter these issues when configuring the Cisco ISE integration:
- Logging categories not enabled: Cisco ISE won't send logs unless specific logging categories are explicitly assigned to a remote logging target. Ensure your target is selected in the **Remote Logging Targets** list for each desired category under **Administration > System > Logging > Logging Categories**.
- SSL/TLS configuration issues: When you're using the `ssl` settings for TCP, ensure that certificate and key file paths are correct and that the Elastic Agent has sufficient permissions to access them. Mismatched certificates or incorrect `YAML` configuration will prevent the agent from establishing a secure connection.
- Parsing failures due to malformed logs: Cisco ISE logs that are segmented or contain unexpected formats can cause parsing errors. Review the raw logs in Kibana by checking the `message` or `event.original` field for `_grokparsefailure` tags. Ensure the **Maximum Length** in Cisco ISE is set to `8192`.
- Split device sensor records: When the device sensor feature is enabled, Cisco ISE forwards CDP and LLDP attribute values verbatim. A neighboring switch or access point reports its multi-line version banner in `lldpSystemDescription`, so the record reaches syslog with embedded newlines and the TCP and log file inputs split it into several messages. Only the first message carries the ISE header and is parsed; the remaining lines are tagged `cisco_ise.device_sensor_fragment` and their text is kept in `message`, so any attributes that followed the embedded newline (such as `AcsSessionID` or `NetworkDeviceGroups`) aren't parsed into fields. To collect these records whole, exclude the system description from the device sensor TLV list on the network device, for example `device-sensor filter-list lldp list <name>` with `no tlv name system-description`, and apply it with `device-sensor filter-spec lldp include list <name>`.
- UDP buffer limitations: In high-volume environments using the UDP input, you might need to increase the `read_buffer` size in the advanced settings to prevent packet loss during bursts of activity. The default is `100MiB`.

### Vendor resources
Expand Down
2 changes: 1 addition & 1 deletion packages/cisco_ise/manifest.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
format_version: "3.0.3"
name: cisco_ise
title: Cisco ISE
version: "1.32.10"
version: "1.32.11"
description: Collect logs from Cisco ISE with Elastic Agent.
type: integration
categories:
Expand Down
Loading