Customer log timeline for support agents, without Kibana

Your support team types a customer's email and sees every error that customer hit, in plain language, right beside their open tickets.

App
ElasticsearchZendeskCustomer SupportEngineeringFeedback TriageResearch & Monitoring
PromptCreate

Build me an app my support agents open whenever a customer reports that something broke, so they stop pasting query syntax into Kibana or interrupting an engineer for every lookup. It reads log and event data from Elasticsearch and works alongside our Zendesk tickets.

The main surface is a single lookup box. An agent types one identifier, either a customer email, an account ID, or an order ID, and the app uses the Elasticsearch Search Documents (Query Index) operation against the configured log and event indices and renders the matches as a readable timeline ordered by timestamp, newest first. Rows whose level or status marks them as a failure are visually highlighted as errors. Every row is expandable to reveal the raw document underneath, so an engineer looking over an agent's shoulder can still see ground truth, but the collapsed row shows only a human-readable summary: when it happened, what happened, and which part of the system it came from.

Down the side, give the timeline filters for time range, environment, and log source. The time range defaults to the last 24 hours, with one-click toggles for 7 days and 30 days. Environment and log source are dropdowns. Populate the log source dropdown using the Elasticsearch List Indices operation, filtered to the indices an admin allowed in settings, rather than making anyone type an index name.

Across the top, show a header strip driven by the Elasticsearch Count Documents operation: how many error events versus how many normal events that customer hit in the selected window. Two counts, stated plainly, so the agent immediately knows whether this customer had a bad time or a normal one. Important: hits.total caps at 10,000 by default, so pass track_total_hits when the counts need to be exact, otherwise a busy customer's numbers will silently flatten at 10,000 and the strip will lie.

A second panel lists that customer's recent Zendesk tickets using the Search Tickets operation, matched on the same identifier the agent typed. Selecting a ticket loads its full thread with the List Ticket Comments operation, showing public replies and internal notes in order. The point is that the agent reads the customer's complaint in their own words directly next to the evidence of what actually happened, without switching tabs.

Every timeline row has an Attach to ticket action, and agents can also multi-select several rows and attach them together. Attaching writes the chosen entries into the selected Zendesk ticket as an internal note using the Update Ticket operation, formatted readably with timestamps and messages rather than as a dump of raw JSON. This is always an internal note, never a public reply, because it is evidence for the team and not something the customer should receive.

Add an Explain what happened button that kicks off a background agent. It reads the log documents currently matched for this customer, identifies the dominant error signature among them, then runs follow-up Search Documents calls for that same signature across all customers over the same period to judge whether the problem is isolated to this one customer or widespread. It writes back into the app a plain-language explanation of what went wrong, in language a non-engineer can repeat to a customer, plus a blast-radius count of how many other customers hit the same error. Its output lands in the app for the support agent to read and approve. The agent must never post anything to Zendesk or to the customer by itself; a human decides whether any of it gets used.

Include a small settings screen for an admin. The identifier field must be configurable, because every cluster names it differently and the app is useless if it guesses wrong: common values are user.email, account_id, and customer.id. Use the Elasticsearch Get Index Schema (Mapping and Settings) operation to offer the real field names from the selected index as choices instead of making an admin type a field path blind. Settings also cover which indices agents may search, which field carries the environment, and which values count as an error. Settings are shared across the whole team, not per agent, so everyone searches the same way.

Two hard rules on the agent-facing UI. First, it must never show raw Query DSL anywhere, not in a preview, not in an advanced panel, not in an error message. If a search fails, say so in plain language. Second, use support vocabulary rather than Elasticsearch vocabulary throughout: say log source rather than index, say entry or event rather than document, say time range rather than range query. The people using this all day should never need to learn what an index is.

One connection note: Elasticsearch is authenticated per cluster with a base URL supplied by the user alongside an encoded key, so never hard-code a host anywhere in the app. Always build requests from the configured base URL.

What does this prompt do?

  • Gives agents one search box: type a customer's email, account ID, or order ID and get a readable, time-ordered list of everything that happened to them, with errors highlighted
  • Shows a count strip at the top so an agent instantly sees how many error events versus normal events that customer hit in the chosen window
  • Puts the customer's recent support tickets and the full comment thread next to the evidence, so the complaint and the proof sit on one screen
  • Lets an agent attach the exact entries that explain the problem to a ticket as an internal note, in one click
  • Adds an Explain what happened button that sends a background assistant to investigate whether the problem hit only this customer or many, and writes a plain-language summary back for the agent to review

What do I need to use this?

  • An Elasticsearch cluster holding your application logs or event data, plus a read-only key for it
  • A Zendesk account your support team already works out of
  • The name of the field your logs use to identify a customer, for example the one holding their email or account ID
  • Roughly which log sources your support team should be allowed to search

How can I customize it?

  • Change which field identifies a customer, since every cluster names it differently, and pick which log sources agents can search
  • Adjust the default time window, which starts at the last 24 hours with one-click 7 day and 30 day toggles
  • Decide what counts as an error in your data, so the highlighting and the count strip match how your team talks about failures
  • Choose whether the background assistant's explanation stays internal for review or can be copied into a reply

FAQs

Do my support agents need to know how to search Elasticsearch?
No, and that is the whole point. Agents only ever type a customer's email, account ID, or order ID into a single box. The app builds the search behind the scenes and shows results as a plain timeline. No query syntax appears anywhere in the interface.
Will this work if our logs name the customer field something unusual?
Yes. The field that identifies a customer is a setting you choose once during setup, because every cluster names it differently. Common choices are a user email field, an account ID, or a customer ID. You can change it later without rebuilding the app.
Does this replace Kibana for our engineers?
No. Engineers keep Kibana for open-ended investigation. This app covers the narrow, repetitive case that eats support time: one customer said something broke, show me what happened to them. It hides everything an agent does not need.
Can an agent accidentally send a technical explanation to the customer?
No. Anything the background assistant writes lands inside the app for a human to read first, and anything attached to a ticket goes on as an internal note that only your team sees. Nothing reaches the customer without an agent deciding to send it.
How does it know whether a problem affected other customers too?
When an agent presses Explain what happened, the background assistant takes the error it found for that customer and looks for the same failure across everyone else in the same period. It reports back whether the issue looks isolated or widespread, along with how many customers it touched.
Is our log data safe to expose to support agents?
The app only reads from the log sources you choose during setup, using a key you control, and you can point it at a read-only key. Agents see the entries the app surfaces rather than free access to your whole cluster.

Related templates

Account takeover ticket triage console for support teams

Work "I think I was hacked" tickets in one place: see each customer's real breach exposure beside their conversation, then note, tag, and reply with confidence.

Have I Been Pwned
Zendesk
App
Turn your top support questions into explainer videos

See which questions your customers keep asking, then record a short avatar explainer for the ones actually worth answering on video.

HeyGen
Zendesk
Google Sheets
+1
App
A support answer desk that drafts replies from your docs

Reps work their live ticket queue on one screen, get a cited draft answer pulled straight from your documentation, and send it without leaving the app.

GitBook
Zendesk
Slack Bot
App
Saved Elasticsearch queries anyone on your team can run

Turn the five queries your engineers keep rewriting into a library of simple forms, so anyone can pull the data themselves.

Elasticsearch
Slack Bot
App
Answer hard Zendesk tickets with your best past replies

A console where reps open a tough ticket, see the three closest past resolutions, and send an approved reply drafted from them.

Zendesk
Fireworks AI
App
Debug a customer's E2B sandbox from their support ticket

Look up a customer by name, find the sandbox behind their complaint, and get a plain language explanation of what went wrong, no E2B login needed.

E2B
Zendesk
Linear
App

Stop sending support agents to Kibana.

Give them one search box that answers what happened to this customer, and stop interrupting an engineer for every lookup.