<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: PingOne Extension - Suggessions in Extensions</title>
    <link>https://community.dynatrace.com/t5/Extensions/PingOne-Extension-Suggessions/m-p/301298#M7325</link>
    <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;In this case I would keep the 1-minute buffer, but avoid doing duplicate detection after the logs are already ingested.&lt;/P&gt;&lt;P&gt;A safer pattern is:&lt;/P&gt;&lt;P&gt;1. Query PingOne with the buffered timestamp, for example last_processed_timestamp - 1 minute.&lt;BR /&gt;2. Before sending events to Dynatrace, deduplicate locally in the workflow/integration layer using the PingOne audit event ID.&lt;BR /&gt;3. Keep a small state store/cache of recently processed event IDs, for example for the last few minutes or hours.&lt;BR /&gt;4. Advance the checkpoint based on the maximum recordedAt / createdAt successfully processed, not simply the workflow execution time.&lt;/P&gt;&lt;P&gt;So the buffer protects you from late-arriving events, but the ID cache prevents re-ingesting the same records.&lt;/P&gt;&lt;P&gt;The PingOne extension will likely not solve this because this is ingestion-state logic, not metric collection logic. PingOne’s Activity/Audit API supports time-based filtering such as recordedAt gt ... / createdAt gt ..., and PingOne APIs also use cursor-style pagination, but the “exactly once” behavior still needs to be handled by the collector/workflow.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;If you have the option, I would also recommend keeping this state outside Dynatrace, for example in Redis, PostgreSQL, Azure Table Storage, or another small external storage.&lt;/P&gt;&lt;P&gt;Then you can store two things there:&lt;/P&gt;&lt;P&gt;the last successfully processed timestamp / cursor&lt;BR /&gt;a short-lived cache of recently processed PingOne event IDs&lt;/P&gt;&lt;P&gt;With Redis, for example, you could keep the event IDs with a TTL of a few minutes or hours. The workflow would check whether the event ID already exists before sending the log to Dynatrace. If it exists, skip it. If it does not exist, send the event and store the ID in Redis.&lt;/P&gt;&lt;P&gt;This keeps the 1-minute safety buffer, but avoids scanning already ingested logs in Dynatrace.&lt;/P&gt;</description>
    <pubDate>Mon, 29 Jun 2026 08:16:43 GMT</pubDate>
    <dc:creator>t_pawlak</dc:creator>
    <dc:date>2026-06-29T08:16:43Z</dc:date>
    <item>
      <title>PingOne Extension - Suggessions</title>
      <link>https://community.dynatrace.com/t5/Extensions/PingOne-Extension-Suggessions/m-p/301003#M7308</link>
      <description>&lt;P&gt;We have a use case of ingesting PingOne logs and created workflow and ingesting via direct API call to PingOne. Ingesion is going good but to avoid duplicates, scanning the logs for dups which is causing additional cost for scanning. We thought of PingOne Extension may solve the issue but seems extension will not handle. Looking for suggessions on this.&lt;/P&gt;</description>
      <pubDate>Fri, 19 Jun 2026 15:03:17 GMT</pubDate>
      <guid>https://community.dynatrace.com/t5/Extensions/PingOne-Extension-Suggessions/m-p/301003#M7308</guid>
      <dc:creator>observefdfx</dc:creator>
      <dc:date>2026-06-19T15:03:17Z</dc:date>
    </item>
    <item>
      <title>Re: PingOne Extension - Suggessions</title>
      <link>https://community.dynatrace.com/t5/Extensions/PingOne-Extension-Suggessions/m-p/301073#M7315</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.dynatrace.com/t5/user/viewprofilepage/user-id/105117"&gt;@observefdfx&lt;/a&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The PingOne Extension won't help here — it's designed for metrics, not log dedup logic.&lt;/P&gt;&lt;P&gt;The real fix is preventing duplicates at source (cursor tracking), not detecting them post-ingest.&lt;BR /&gt;Honesty. I never faced this issue but i would suggest to look at this from the ingestion side rather than scanning after the fact.&lt;BR /&gt;PingOne Activity API supports an after cursor for pagination. Store the last processed event ID or timestamp between workflow runs and only pull events after that point. This eliminates overlapping time windows and removes the need for dedup scanning entirely.&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;Sujit&lt;/P&gt;</description>
      <pubDate>Tue, 23 Jun 2026 00:49:38 GMT</pubDate>
      <guid>https://community.dynatrace.com/t5/Extensions/PingOne-Extension-Suggessions/m-p/301073#M7315</guid>
      <dc:creator>sujit_k_singh</dc:creator>
      <dc:date>2026-06-23T00:49:38Z</dc:date>
    </item>
    <item>
      <title>Re: PingOne Extension - Suggessions</title>
      <link>https://community.dynatrace.com/t5/Extensions/PingOne-Extension-Suggessions/m-p/301273#M7324</link>
      <description>&lt;P&gt;Thanks for the reply. We are already doing s&lt;SPAN&gt;toring the last processed event ID or timestamp between workflow runs. We add buffer of one minute from this timestamp because we had cases of missing few seconds messages and adding that buffer leading to dups.&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 26 Jun 2026 15:25:26 GMT</pubDate>
      <guid>https://community.dynatrace.com/t5/Extensions/PingOne-Extension-Suggessions/m-p/301273#M7324</guid>
      <dc:creator>observefdfx</dc:creator>
      <dc:date>2026-06-26T15:25:26Z</dc:date>
    </item>
    <item>
      <title>Re: PingOne Extension - Suggessions</title>
      <link>https://community.dynatrace.com/t5/Extensions/PingOne-Extension-Suggessions/m-p/301298#M7325</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;In this case I would keep the 1-minute buffer, but avoid doing duplicate detection after the logs are already ingested.&lt;/P&gt;&lt;P&gt;A safer pattern is:&lt;/P&gt;&lt;P&gt;1. Query PingOne with the buffered timestamp, for example last_processed_timestamp - 1 minute.&lt;BR /&gt;2. Before sending events to Dynatrace, deduplicate locally in the workflow/integration layer using the PingOne audit event ID.&lt;BR /&gt;3. Keep a small state store/cache of recently processed event IDs, for example for the last few minutes or hours.&lt;BR /&gt;4. Advance the checkpoint based on the maximum recordedAt / createdAt successfully processed, not simply the workflow execution time.&lt;/P&gt;&lt;P&gt;So the buffer protects you from late-arriving events, but the ID cache prevents re-ingesting the same records.&lt;/P&gt;&lt;P&gt;The PingOne extension will likely not solve this because this is ingestion-state logic, not metric collection logic. PingOne’s Activity/Audit API supports time-based filtering such as recordedAt gt ... / createdAt gt ..., and PingOne APIs also use cursor-style pagination, but the “exactly once” behavior still needs to be handled by the collector/workflow.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;If you have the option, I would also recommend keeping this state outside Dynatrace, for example in Redis, PostgreSQL, Azure Table Storage, or another small external storage.&lt;/P&gt;&lt;P&gt;Then you can store two things there:&lt;/P&gt;&lt;P&gt;the last successfully processed timestamp / cursor&lt;BR /&gt;a short-lived cache of recently processed PingOne event IDs&lt;/P&gt;&lt;P&gt;With Redis, for example, you could keep the event IDs with a TTL of a few minutes or hours. The workflow would check whether the event ID already exists before sending the log to Dynatrace. If it exists, skip it. If it does not exist, send the event and store the ID in Redis.&lt;/P&gt;&lt;P&gt;This keeps the 1-minute safety buffer, but avoids scanning already ingested logs in Dynatrace.&lt;/P&gt;</description>
      <pubDate>Mon, 29 Jun 2026 08:16:43 GMT</pubDate>
      <guid>https://community.dynatrace.com/t5/Extensions/PingOne-Extension-Suggessions/m-p/301298#M7325</guid>
      <dc:creator>t_pawlak</dc:creator>
      <dc:date>2026-06-29T08:16:43Z</dc:date>
    </item>
    <item>
      <title>Re: PingOne Extension - Suggessions</title>
      <link>https://community.dynatrace.com/t5/Extensions/PingOne-Extension-Suggessions/m-p/301322#M7328</link>
      <description>&lt;P&gt;Thanks&amp;nbsp;&lt;a href="https://community.dynatrace.com/t5/user/viewprofilepage/user-id/42367"&gt;@t_pawlak&lt;/a&gt;&amp;nbsp;for the solution with all details. We need to see and get approvals on using external cache. As an alternative, it looks dedup can be easy in OpenPipeline. I know it incurs log ingestion cost but seems better alternative as it avoids external cache or other caching mechanism. We still need to weigh in and estimate the ingestion cost but seems its better than scanning.&amp;nbsp; Thoughts?&lt;/P&gt;</description>
      <pubDate>Mon, 29 Jun 2026 14:14:39 GMT</pubDate>
      <guid>https://community.dynatrace.com/t5/Extensions/PingOne-Extension-Suggessions/m-p/301322#M7328</guid>
      <dc:creator>observefdfx</dc:creator>
      <dc:date>2026-06-29T14:14:39Z</dc:date>
    </item>
    <item>
      <title>Re: PingOne Extension - Suggessions</title>
      <link>https://community.dynatrace.com/t5/Extensions/PingOne-Extension-Suggessions/m-p/302770#M7355</link>
      <description>&lt;P&gt;Let me help you out.&amp;nbsp; The PingOne extension by Dynatrace is great if you have a small PingOne AIC tenant.&amp;nbsp; But if you have a large one that generates a lot of logs, you will struggle.&amp;nbsp; PingOne uses Google Cloud as their backend and that means they have a 60,000 logs per minute rate limit per tenant.&amp;nbsp; That means you will frequently hit rate limit issues if you are querying more than 60,000 log records a minute (which is almost guaranteed, especially if you are querying all log sources, which you really shouldn't as many of the sources aren't necessary for day-to-day monitoring).&amp;nbsp; The extension logic tries to compensate by tracking this and filling in gaps in logs, but this just causes the queries it sends to be for more and more logs, meaning you will constantly hit the rate limit.&amp;nbsp; It's a nightmare.&lt;BR /&gt;&lt;BR /&gt;Instead, the solution is to stop querying for the logs altogether.&amp;nbsp; Fetching logs is probably one of the worst ways to collect logs.&amp;nbsp; Pushing them from your source into your monitoring tool is much better and easier.&amp;nbsp;&lt;/P&gt;&lt;P&gt;Luckily, PingOne AIC offers such a log streaming feature as of earlier this year:&lt;BR /&gt;&lt;A href="https://docs.pingidentity.com/pingoneaic/tenants/audit-debug-logs-push.html" target="_blank" rel="noopener"&gt;Stream logs to an external monitoring tool | PingOne Advanced Identity Cloud&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;This will stream logs from the PingOne SaaS tenants to the Dynatrace SaaS &lt;STRONG&gt;OTLP&lt;/STRONG&gt; API Logs Ingest endpoint (well, it will once you configure it to do so, of course).&amp;nbsp; This means those logs don't have to traverse your WAN boundaries into your network and you get every single log record streamed in near real time and you will get no duplicates.&lt;BR /&gt;&lt;BR /&gt;Then, you just setup an OpenPipeline to format the logs to your liking and extract Smartscape Nodes/Edges and Metrics and place the logs in buckets so they are fast and easy to query (I recommend creating a &lt;STRONG&gt;Buckets&lt;/STRONG&gt;&amp;nbsp;Segment and pointing that Segment at all of your storage buckets.&amp;nbsp; Then people can just use the &lt;STRONG&gt;Buckets&lt;/STRONG&gt;&amp;nbsp;Segment and select the PingOne log Buckets that you send your logs to in the PingOne OpenPipeline you setup.).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;With this method, the only thing we use the official PingOne extension by Dynatrace for is scraping the Prometheus metrics.&amp;nbsp; We don't query any logs with it because PingOne's log query method stinks.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;What we actually did was a bit more involved than just that.&amp;nbsp; Instead, I created what I have termed a "Presentation" type extension.&amp;nbsp; Basically, it's a custom Dynatrace extension that doesn't have a datasource.&amp;nbsp; Most extensions have a datasource, like SNMP, WMI, Prometheus, SQL, or Python (which is the type of extension the official PingOne extension is).&amp;nbsp; Instead, what I figured out you could do is just define an extension without the datasource part.&amp;nbsp; So, instead, the extension has the OpenPipeline definitions bundled within it (which contains the log formatting/transforming and metric extraction and smartscape extraction I mentioned earlier) as well as all of the classic topology extraction, screen definitions (so that the PingOne entities you extract show up in the Infrastructure &amp;amp; Operations app), the new I&amp;amp;O Explorer screen definition JSON files, alert templates, and custom dashboards (classic and latest).&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I've actually trained our Cursor AI on how to create these "Presentation" type extensions for me and I use them for all kinds of stuff where the data is already in Dynatrace (like Cloudflare logpush logs that are streamed into Dynatrace or Syslogs that are streamed from devices like DataPower or F5).&amp;nbsp; This allows us to standardize the way we format our logs, extract metrics and entities (classic and new smartscape), create dashboards and screens, and create alerts.&amp;nbsp; It's super-fast and pretty easy once you get it all setup.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;These are the entities we are currently extracting from our PingOne logs streaming into our Dynatrace environments:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="36Krazyfists_0-1785763515004.png"&gt;&lt;img src="https://community.dynatrace.com/t5/image/serverpage/image-id/33843iFF9B0E59E783EC47/image-size/medium?v=v2&amp;amp;px=400" alt="36Krazyfists_0-1785763515004.png" title="36Krazyfists_0-1785763515004.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;BR /&gt;And most of them have relationships to each other.&amp;nbsp; The Journey entities have a parent_of relationship to the Node entities (Journeys are the TreeName field from the logs while the Node entities are derived from the scripted decision node display name fields from the logs) and then the Journeys have a runs_on relationship to the Tenants.&amp;nbsp; This means we have a relationship of Tenant &amp;gt; Journey &amp;gt; Scripted Decision Nodes&lt;BR /&gt;&lt;BR /&gt;I'm also working with our PingOne team to see if we can create a custom javascript node within PingOne to take the Header Origin field from the initial am-access log entry at the beginning of a user's journey and insert that origin field value into the scripted decision node am-authentication log entries that make up the elements of a user's journey within PingOne AIC so that we can have all of the Journeys' scripted decision node steps have a relationship to the origin address.&amp;nbsp; This will allow full correlation of the telemetry within PingOne as well as allow us to create an entity mapping between the PingOne origin entities and other built-in entity types like Server Request entities and RUM Application entities, giving Dynatrace much better topological awareness of the authentication layer of a monitored web page or API endpoint.&amp;nbsp; This is still a work in progress.&amp;nbsp; I also have an idea for perhaps getting W3C trace propagation to work within PingOne AIC.&amp;nbsp; Not sure if it's possible, but I think it's at least theoretically possible, so we shall see!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;And, if you have other Ping products (like PingID or Ping Protect for example), they offer Webhook integrations which give you similar capabilities.&amp;nbsp; We are currently setting that up and doing something similar to what we're doing for the PingOne AIC logs so that we can ingest and utilize those.&lt;/P&gt;</description>
      <pubDate>Mon, 03 Aug 2026 14:03:23 GMT</pubDate>
      <guid>https://community.dynatrace.com/t5/Extensions/PingOne-Extension-Suggessions/m-p/302770#M7355</guid>
      <dc:creator>36Krazyfists</dc:creator>
      <dc:date>2026-08-03T14:03:23Z</dc:date>
    </item>
  </channel>
</rss>

