From 04524215522009aed4d00427aae50ea62e6f5879 Mon Sep 17 00:00:00 2001 From: robester0403 Date: Wed, 8 Jul 2026 18:28:05 -0400 Subject: [PATCH 1/3] fix: Stop the date processors from throwing a error whenever grok_time_details fails. Declare error.message in the field mappings. --- packages/cisco_ise/changelog.yml | 5 ++++ .../test-pipeline-device-sensor-fragments.log | 1 + ...-device-sensor-fragments.log-expected.json | 30 +++++++++++++++++++ .../elasticsearch/ingest_pipeline/default.yml | 6 +++- .../cisco_ise/data_stream/log/fields/ecs.yml | 2 ++ packages/cisco_ise/docs/README.md | 1 + packages/cisco_ise/manifest.yml | 2 +- 7 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 packages/cisco_ise/data_stream/log/_dev/test/pipeline/test-pipeline-device-sensor-fragments.log create mode 100644 packages/cisco_ise/data_stream/log/_dev/test/pipeline/test-pipeline-device-sensor-fragments.log-expected.json diff --git a/packages/cisco_ise/changelog.yml b/packages/cisco_ise/changelog.yml index f3cd1d97311..2abaca16e37 100644 --- a/packages/cisco_ise/changelog.yml +++ b/packages/cisco_ise/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.32.8" + changes: + - description: Stop the date processors from throwing a "field [_tmp] not present" error whenever grok_time_details fails. Declare error.message in the field mappings. + type: bugfix + link: https://github.com/elastic/integrations/pull/00001 - version: "1.32.7" changes: - description: Correctly parse key-value pairs where the value contains commas. diff --git a/packages/cisco_ise/data_stream/log/_dev/test/pipeline/test-pipeline-device-sensor-fragments.log b/packages/cisco_ise/data_stream/log/_dev/test/pipeline/test-pipeline-device-sensor-fragments.log new file mode 100644 index 00000000000..a3a3d081303 --- /dev/null +++ b/packages/cisco_ise/data_stream/log/_dev/test/pipeline/test-pipeline-device-sensor-fragments.log @@ -0,0 +1 @@ +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, diff --git a/packages/cisco_ise/data_stream/log/_dev/test/pipeline/test-pipeline-device-sensor-fragments.log-expected.json b/packages/cisco_ise/data_stream/log/_dev/test/pipeline/test-pipeline-device-sensor-fragments.log-expected.json new file mode 100644 index 00000000000..164efb8dc50 --- /dev/null +++ b/packages/cisco_ise/data_stream/log/_dev/test/pipeline/test-pipeline-device-sensor-fragments.log-expected.json @@ -0,0 +1,30 @@ +{ + "expected": [ + { + "cisco_ise": { + "log": { + "category": { + "name": "CISE_Profiler" + }, + "message": { + "id": "0000034521" + }, + "segment": { + "number": 1, + "total": 2 + } + } + }, + "ecs": { + "version": "8.17.0" + }, + "event": { + "original": "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," + }, + "message": "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,", + "tags": [ + "preserve_original_event" + ] + } + ] +} diff --git a/packages/cisco_ise/data_stream/log/elasticsearch/ingest_pipeline/default.yml b/packages/cisco_ise/data_stream/log/elasticsearch/ingest_pipeline/default.yml index b9c7692077b..c7b4c92c4db 100644 --- a/packages/cisco_ise/data_stream/log/elasticsearch/ingest_pipeline/default.yml +++ b/packages/cisco_ise/data_stream/log/elasticsearch/ingest_pipeline/default.yml @@ -85,6 +85,10 @@ processors: - date: field: _tmp.timestamp tag: default-tmp-timestamp parsing + description: >- + Avoid processing if _tmp.timestamp is unset, preventing a "field [_tmp] + not present" error on top of the grok_time_details failure. + if: ctx._tmp?.timestamp != null formats: - MMM [ ]d[d] HH:mm:ss[.SSSSSS][.SSS] - ISO8601 @@ -98,7 +102,7 @@ processors: field: error.message value: '{{{ _ingest.on_failure_processor_tag }}}: {{{_ingest.on_failure_message}}}' - date: - if: ctx.event?.timezone != null && ctx.event.timezone != '' + if: ctx._tmp?.timestamp != null && ctx.event?.timezone != null && ctx.event.timezone != '' field: _tmp.timestamp timezone: '{{{event.timezone}}}' tag: default-tmp-timestamp-with timezone parsing diff --git a/packages/cisco_ise/data_stream/log/fields/ecs.yml b/packages/cisco_ise/data_stream/log/fields/ecs.yml index 2f6119eef31..95dbdcb9af0 100644 --- a/packages/cisco_ise/data_stream/log/fields/ecs.yml +++ b/packages/cisco_ise/data_stream/log/fields/ecs.yml @@ -78,6 +78,8 @@ name: destination.user.name - external: ecs name: ecs.version +- external: ecs + name: error.message - external: ecs name: event.category - external: ecs diff --git a/packages/cisco_ise/docs/README.md b/packages/cisco_ise/docs/README.md index 43f0a0cfda5..c592fc31df6 100644 --- a/packages/cisco_ise/docs/README.md +++ b/packages/cisco_ise/docs/README.md @@ -661,6 +661,7 @@ The following table lists the exported fields for this data stream: | destination.user.name | Short name or login of the user. | keyword | | destination.user.name.text | Multi-field of `destination.user.name`. | match_only_text | | ecs.version | ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. | keyword | +| error.message | Error message. | match_only_text | | event.category | This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. `event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. This field is an array. This will allow proper categorization of some events that fall in multiple categories. | keyword | | event.code | Identification code for this event, if one exists. Some event sources use event codes to identify messages unambiguously, regardless of message language or wording adjustments over time. An example of this is the Windows Event ID. | keyword | | event.created | `event.created` contains the date/time when the event was first read by an agent, or by your pipeline. This field is distinct from `@timestamp` in that `@timestamp` typically contain the time extracted from the original event. In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. In case the two timestamps are identical, `@timestamp` should be used. | date | diff --git a/packages/cisco_ise/manifest.yml b/packages/cisco_ise/manifest.yml index 9417392e1b0..98e05e4ca99 100644 --- a/packages/cisco_ise/manifest.yml +++ b/packages/cisco_ise/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.3" name: cisco_ise title: Cisco ISE -version: "1.32.7" +version: "1.32.8" description: Collect logs from Cisco ISE with Elastic Agent. type: integration categories: From e4544a0898f02747cee52c5f0930d063d3af4890 Mon Sep 17 00:00:00 2001 From: robester0403 Date: Thu, 9 Jul 2026 12:13:12 -0400 Subject: [PATCH 2/3] chore: Update PR link --- packages/cisco_ise/changelog.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cisco_ise/changelog.yml b/packages/cisco_ise/changelog.yml index 2abaca16e37..616995c5db4 100644 --- a/packages/cisco_ise/changelog.yml +++ b/packages/cisco_ise/changelog.yml @@ -3,7 +3,7 @@ changes: - description: Stop the date processors from throwing a "field [_tmp] not present" error whenever grok_time_details fails. Declare error.message in the field mappings. type: bugfix - link: https://github.com/elastic/integrations/pull/00001 + link: https://github.com/elastic/integrations/pull/20069 - version: "1.32.7" changes: - description: Correctly parse key-value pairs where the value contains commas. From 3cb081f1e58958f6cd8d2dd2d15133a0da0e5cdc Mon Sep 17 00:00:00 2001 From: robester0403 Date: Sun, 12 Jul 2026 09:35:00 -0400 Subject: [PATCH 3/3] fix: default @timestamp to ingest time for events without a parseable date as a fallback. --- packages/cisco_ise/changelog.yml | 2 +- ...-device-sensor-fragments.log-expected.json | 4 +++- .../elasticsearch/ingest_pipeline/default.yml | 20 +++++++++++++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/packages/cisco_ise/changelog.yml b/packages/cisco_ise/changelog.yml index 1b2988a84d6..e71c6261a7c 100644 --- a/packages/cisco_ise/changelog.yml +++ b/packages/cisco_ise/changelog.yml @@ -1,7 +1,7 @@ # newer versions go on top - version: "1.32.9" changes: - - description: Stop the date processors from throwing a "field [_tmp] not present" error whenever grok_time_details fails. Declare error.message in the field mappings. + - description: Handle events without a parseable date as to stop the date processors from throwing a "field [_tmp] not present" error. Also default @timestamp to the ingest time so the event stays queryable instead of being routed to the failure store. type: bugfix link: https://github.com/elastic/integrations/pull/20069 - version: "1.32.8" diff --git a/packages/cisco_ise/data_stream/log/_dev/test/pipeline/test-pipeline-device-sensor-fragments.log-expected.json b/packages/cisco_ise/data_stream/log/_dev/test/pipeline/test-pipeline-device-sensor-fragments.log-expected.json index 164efb8dc50..01eea910e59 100644 --- a/packages/cisco_ise/data_stream/log/_dev/test/pipeline/test-pipeline-device-sensor-fragments.log-expected.json +++ b/packages/cisco_ise/data_stream/log/_dev/test/pipeline/test-pipeline-device-sensor-fragments.log-expected.json @@ -1,6 +1,7 @@ { "expected": [ { + "@timestamp": "2026-07-12T13:29:35.843611799Z", "cisco_ise": { "log": { "category": { @@ -23,7 +24,8 @@ }, "message": "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,", "tags": [ - "preserve_original_event" + "preserve_original_event", + "cisco_ise.timestamp_defaulted_to_ingest_time" ] } ] diff --git a/packages/cisco_ise/data_stream/log/elasticsearch/ingest_pipeline/default.yml b/packages/cisco_ise/data_stream/log/elasticsearch/ingest_pipeline/default.yml index c7b4c92c4db..ecc910ab241 100644 --- a/packages/cisco_ise/data_stream/log/elasticsearch/ingest_pipeline/default.yml +++ b/packages/cisco_ise/data_stream/log/elasticsearch/ingest_pipeline/default.yml @@ -281,6 +281,26 @@ processors: value: preserve_original_event allow_duplicates: false if: ctx.error?.message != null + - append: + tag: append_tag_timestamp_defaulted_to_ingest_time + description: >- + Tag events whose @timestamp is defaulted to ingest time (no event date + parsed) so the assumed timestamps can be filtered out or audited. + field: tags + value: cisco_ise.timestamp_defaulted_to_ingest_time + allow_duplicates: false + if: ctx['@timestamp'] == null + - set: + tag: set_fallback_timestamp_to_ingest_time + description: >- + Default @timestamp to ingest time when no event date was parsed, so + valid but timestamp-less events (e.g. device-sensor fragments) are not + routed to the failure store. Guarded on null to never overwrite a + parsed event time. + field: '@timestamp' + value: '{{{_ingest.timestamp}}}' + if: ctx['@timestamp'] == null + ignore_failure: true on_failure: - set: field: event.kind