<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Anaphora Blog</title>
  <subtitle>Transform Kibana dashboards into automated PDF reports and real-time Slack alerts - Latest updates and changelog</subtitle>
  <link href="https://anaphora.it/atom.xml" rel="self" type="application/atom+xml"/>
  <link href="https://anaphora.it/blog/" rel="alternate" type="text/html"/>
  <id>https://anaphora.it/blog/</id>
  <updated>2025-12-12T00:00:00.000Z</updated>
  <author>
    <name>Anaphora Team</name>
    <email>support@anaphora.it</email>
  </author>
  <entry>
    <title>Why Kibana Reporting Fails in the Real World (and How Teams Work Around It)</title>
    <link href="https://anaphora.it/blog/posts/2025-12-why-kibana-reporting-fails-in-the-real-world-and-how-teams-work-around-it/" rel="alternate" type="text/html"/>
    <id>https://anaphora.it/blog/posts/2025-12-why-kibana-reporting-fails-in-the-real-world-and-how-teams-work-around-it/</id>
    <published>2025-12-12T00:00:00.000Z</published>
    <updated>2025-12-12T00:00:00.000Z</updated>
    <author>
      <name>Anaphora Team</name>
      <email>support@anaphora.it</email>
    </author>
    <summary type="text">Kibana reporting is a headless screenshot pipeline, not a semantic reporting engine. Here&#39;s why it breaks for real-world operational needs and what teams do instead.</summary>
    <content type="html"><![CDATA[<p>Kibana reporting is genuinely useful—right up to the moment you rely on it for executive updates, compliance evidence, customer-facing PDFs, or “send this only if something changed.” Then it starts behaving like what it really is: a headless screenshot pipeline bolted onto an interactive UI.</p>
<p>This post isn’t a dunk. It’s a practical map of where Kibana reporting shines, where it predictably breaks, and what teams do when they hit the wall.</p>
<h2>What Kibana Reporting actually is (so expectations are accurate)</h2>
<p>Kibana’s PDF/PNG reporting is built around rendering what you see on screen into an export. Under the hood, reports are generated on the Kibana server as background jobs coordinated through Elasticsearch documents.</p>
<p>And the rendering itself is based on headless Chromium (Kibana manages Chromium binaries and drives the browser for screenshotting / PDF exports).</p>
<p>This architecture implies two important truths:</p>
<ul>
<li>Reporting inherits UI fragility. If the UI struggles to render a view reliably, reporting will struggle too.</li>
<li>Reporting is “what’s on the screen,” not “what’s true.” It’s a presentation capture mechanism, not a semantic reporting engine.</li>
</ul>
<p>Reporting inherits UI fragility. If the UI struggles to render a view reliably, reporting will struggle too.</p>
<p>Reporting is “what’s on the screen,” not “what’s true.” It’s a presentation capture mechanism, not a semantic reporting engine.</p>
<p>That’s fine—until your use case is not a screenshot.</p>
<h2>The first failure: reporting is static, but operations are comparative</h2>
<p>Most reporting needs are comparative:</p>
<ul>
<li>“Did error rate change since last week?”</li>
<li>“Is this spike new or just seasonality?”</li>
<li>“Only notify if the KPI moved materially.”</li>
<li>“Send the PDF only if something significant changed.”</li>
</ul>
<p>“Did error rate change since last week?”</p>
<p>“Is this spike new or just seasonality?”</p>
<p>“Only notify if the KPI moved materially.”</p>
<p>“Send the PDF only if something significant changed.”</p>
<p>Kibana reporting doesn’t have a native concept of diffing between runs, conditional delivery, or “what changed since last export.” It creates a PDF/PNG of the current dashboard state.</p>
<p>Elastic’s own wording around reporting reinforces this “what you see” model: PDF reports are tied directly to what is seen on screen.</p>
<p>Why this matters: In real teams, attention is the scarce resource. Static scheduled PDFs quickly become noise—people stop reading them because they don’t answer the question “why am I being pinged?”</p>
<h2>The second failure: large dashboards don’t export cleanly</h2>
<p>If your dashboards are small and tidy, Kibana reporting can be smooth. But real dashboards aren’t always small and tidy—especially in mid-market orgs where dashboards become living shared artifacts.</p>
<p>Elastic’s own troubleshooting guidance acknowledges that large pixel counts (big dashboards, lots of panels) can demand more memory/CPU and suggests splitting dashboards into smaller artifacts.</p>
<p>In practice, teams run into:</p>
<ul>
<li>PDFs with unusable pagination or layout</li>
<li>Panels stretched, clipped, or missing</li>
<li>“For printing” exports that time out or format awkwardly</li>
</ul>
<p>PDFs with unusable pagination or layout</p>
<p>Panels stretched, clipped, or missing</p>
<p>“For printing” exports that time out or format awkwardly</p>
<p>These aren’t hypothetical. Community reports describe large dashboards producing a single giant unprintable page or poorly paginated PDFs with cut-off / stretched visualizations.</p>
<p>And for truly huge canvases or dashboards, people end up increasing memory and timeouts dramatically and still failing—because you’re essentially asking a headless browser to deterministically render a complex app view into a document.</p>
<h2>The third failure: timeouts and “max attempts reached” become your operational burden</h2>
<p>When reporting fails, Kibana surfaces errors like “Max attempts reached.” Elastic documents two common causes:</p>
<ul>
<li>The export spans a large amount of data and Kibana hits xpack.reporting.queue.timeout</li>
<li>Reverse-proxy / server settings are not configured correctly</li>
</ul>
<p>The export spans a large amount of data and Kibana hits xpack.reporting.queue.timeout</p>
<p>Reverse-proxy / server settings are not configured correctly</p>
<p>This reveals a hidden cost: your team becomes the operator of a rendering farm.</p>
<p>Instead of “schedule report,” your backlog becomes:</p>
<ul>
<li>tuning queue timeouts</li>
<li>tuning capture timeouts</li>
<li>resizing dashboards</li>
<li>splitting dashboards</li>
<li>debugging reverse proxy edge cases</li>
<li>chasing nondeterministic Chromium issues</li>
</ul>
<p>tuning queue timeouts</p>
<p>tuning capture timeouts</p>
<p>resizing dashboards</p>
<p>splitting dashboards</p>
<p>debugging reverse proxy edge cases</p>
<p>chasing nondeterministic Chromium issues</p>
<p>That’s not reporting. That’s maintaining an internal PDF renderer.</p>
<h2>The fourth failure: “reporting” and “alerting” don’t naturally fit together</h2>
<p>Kibana alerting is solid for what it’s built to do: create rules against Elasticsearch data and send actions through connectors. Elastic positions it as a consistent interface across use cases, with integrations and scripting available.</p>
<p>But alerting and reporting live in different mental models:</p>
<ul>
<li>Alerts are about signals: something crossed a threshold, a rule matched, an anomaly score tripped.</li>
<li>Reports are about communication: what changed, what it means, and what to do.</li>
</ul>
<p>Alerts are about signals: something crossed a threshold, a rule matched, an anomaly score tripped.</p>
<p>Reports are about communication: what changed, what it means, and what to do.</p>
<p>You can send an alert to Slack. You can attach a PDF. But Kibana doesn’t give you a first-class, built-in way to reliably produce human-ready, contextual, change-aware narratives (because its primitives are rules and screenshots).</p>
<p>So teams either:</p>
<ul>
<li>spam alerts (and burn attention), or</li>
<li>schedule reports (and hope people read them), or</li>
<li>manually add context (and burn engineering time)</li>
</ul>
<p>spam alerts (and burn attention), or</p>
<p>schedule reports (and hope people read them), or</p>
<p>manually add context (and burn engineering time)</p>
<h2>The fifth failure: compliance and audit evidence needs “immutability,” not “a screenshot today”</h2>
<p>For compliance, the question is rarely “what does the dashboard look like right now?”</p>
<p>It’s:</p>
<ul>
<li>“What was true on that date?”</li>
<li>“Can you prove it wasn’t tampered with?”</li>
<li>“Can you show consistent evidence collection over time?”</li>
</ul>
<p>“What was true on that date?”</p>
<p>“Can you prove it wasn’t tampered with?”</p>
<p>“Can you show consistent evidence collection over time?”</p>
<p>Kibana reporting can generate PDFs, but it’s not designed as a compliance evidence pipeline. If you’re in a regulated environment, you’ll feel the gap quickly: lack of run-to-run comparison, lack of explicit evidence controls, and the ease with which dashboards change after the fact.</p>
<p>(If you’re already collecting screenshots into a GRC folder manually, you know exactly what this costs.)</p>
<h2>Common workarounds teams use (and what they cost)</h2>
<p>These are the patterns that appear again and again once Kibana reporting doesn’t fit.</p>
<h3>1) “Split the dashboard”</h3>
<p>This is even recommended in Elastic troubleshooting guidance.</p>
<p>Cost: redesign work and fractured storytelling. People lose the “single pane” view that made the dashboard valuable.</p>
<h3>2) “Tune timeouts / memory / reverse proxy”</h3>
<p>Elastic explicitly points at timeout settings like xpack.reporting.queue.timeout when exports fail.</p>
<p>Cost: ongoing ops toil. Reporting becomes another service to babysit.</p>
<h3>3) “Use Canvas for paginated layouts”</h3>
<p>Some teams rebuild reports in Canvas because it gives more control over page-like layouts (and community responses often point users there).</p>
<p>Cost: now you’re maintaining two artifacts: operational dashboards and report layouts.</p>
<h3>4) “Write custom Puppeteer scripts”</h3>
<p>This works—because Kibana itself uses a headless browser approach.</p>
<p>Cost: brittle scripts, auth headaches, constant UI changes breaking automation.</p>
<h3>5) “Buy a reporting add-on”</h3>
<p>There’s a whole ecosystem of third-party Kibana reporting tools that exist for a eason: teams want scheduled delivery, fewer license constraints, and more control.</p>
<p>Cost: additional platform, integration, and security review—plus you still often end up with static screenshots.</p>
<h2>A decision framework: when Kibana reporting is enough vs. when it isn’t</h2>
<h3>Kibana reporting is usually enough if:</h3>
<ul>
<li>You export small-to-medium dashboards</li>
<li>You’re okay with static PDFs/PNGs</li>
<li>You don’t need cross-tool reporting</li>
<li>“Send every Monday” is acceptable even when nothing changed</li>
</ul>
<p>You export small-to-medium dashboards</p>
<p>You’re okay with static PDFs/PNGs</p>
<p>You don’t need cross-tool reporting</p>
<p>“Send every Monday” is acceptable even when nothing changed</p>
<h3>You’ve outgrown Kibana reporting if:</h3>
<ul>
<li>Stakeholders ask “what changed?” more than “what is it?”</li>
<li>Reports are frequently failing on large dashboards (timeouts/layout)</li>
<li>You need conditional delivery (only notify on meaningful change)</li>
<li>You need compliance-ready evidence artifacts</li>
<li>Your reality is multi-tool (Kibana + Grafana + SaaS + internal UIs)</li>
</ul>
<p>Stakeholders ask “what changed?” more than “what is it?”</p>
<p>Reports are frequently failing on large dashboards (timeouts/layout)</p>
<p>You need conditional delivery (only notify on meaningful change)</p>
<p>You need compliance-ready evidence artifacts</p>
<p>Your reality is multi-tool (Kibana + Grafana + SaaS + internal UIs)</p>
<p>This isn’t a moral failing of Kibana. It’s just not what Kibana reporting was designed to be.</p>
<h2>What a “modern reporting layer” needs (the missing primitives)</h2>
<p>If you’re designing for real-world reporting needs, these primitives matter:</p>
<ul>
<li>Conditional reporting“Only send if KPI moved by X”“Only send if visual changed”</li>
<li>“Only send if KPI moved by X”</li>
<li>“Only send if visual changed”</li>
<li>Run-to-run diffdetect change, summarize deltas, highlight what matters</li>
<li>detect change, summarize deltas, highlight what matters</li>
<li>Narrative contextexplain “why this matters,” not just present charts</li>
<li>explain “why this matters,” not just present charts</li>
<li>Multi-source supportauthenticated web UIs + APIs, not just one stack</li>
<li>authenticated web UIs + APIs, not just one stack</li>
<li>Operational reliabilityreporting should not require you to become a Chromium SRE</li>
<li>reporting should not require you to become a Chromium SRE</li>
</ul>
<p>Conditional reporting</p>
<ul>
<li>“Only send if KPI moved by X”</li>
<li>“Only send if visual changed”</li>
</ul>
<p>“Only send if KPI moved by X”</p>
<p>“Only send if visual changed”</p>
<p>Run-to-run diff</p>
<ul>
<li>detect change, summarize deltas, highlight what matters</li>
</ul>
<p>detect change, summarize deltas, highlight what matters</p>
<p>Narrative context</p>
<ul>
<li>explain “why this matters,” not just present charts</li>
</ul>
<p>explain “why this matters,” not just present charts</p>
<p>Multi-source support</p>
<ul>
<li>authenticated web UIs + APIs, not just one stack</li>
</ul>
<p>authenticated web UIs + APIs, not just one stack</p>
<p>Operational reliability</p>
<ul>
<li>reporting should not require you to become a Chromium SRE</li>
</ul>
<p>reporting should not require you to become a Chromium SRE</p>
<p>Kibana reporting gives you the screenshot. Many teams need the communication system.</p>
<h2>The missing layer: change-aware reporting</h2>
<p>What Kibana lacks isn’t another export format.It’s a layer that understands change over time.</p>
<p>Teams that move past screenshot-based reporting introduce a thin reporting layer that:</p>
<ul>
<li>captures dashboards or data at regular intervals</li>
<li>compares current state to previous runs</li>
<li>generates reports only when something meaningfully changes</li>
<li>adds minimal narrative context for humans</li>
</ul>
<p>captures dashboards or data at regular intervals</p>
<p>compares current state to previous runs</p>
<p>generates reports only when something meaningfully changes</p>
<p>adds minimal narrative context for humans</p>
<p>Crucially, this layer does not replace Kibana.</p>
<p>Kibana remains the system of exploration.The reporting layer becomes the system of communication.</p>
<p>Once teams adopt this pattern, reporting stops being noisy—and starts being trusted.</p>
]]></content>
    <category term="changelog"/>
    <category term="dashboard"/>
    <category term="kibana"/>
    <category term="report"/>
    <category term="update"/>
  </entry>
  <entry>
    <title>&quot;Calculate&quot; action enables anomaly detection</title>
    <link href="https://anaphora.it/blog/posts/2025-05-calculate-action-enables-anomaly-detection/" rel="alternate" type="text/html"/>
    <id>https://anaphora.it/blog/posts/2025-05-calculate-action-enables-anomaly-detection/</id>
    <published>2025-05-01T00:00:00.000Z</published>
    <updated>2025-05-01T00:00:00.000Z</updated>
    <author>
      <name>Anaphora Team</name>
      <email>support@anaphora.it</email>
    </author>
    <summary type="text">Use the Calculate action to compare hourly vs. daily Kibana hit counts and suppress alerts below a threshold — enabling dynamic anomaly detection.</summary>
    <content type="html"><![CDATA[<p>Let's use &quot;calculate&quot; action to create a dynamic threshold value for our &quot;conditional block&quot; action.</p>
<ul>
<li>Capture the Kibana Discover's hits count integer value of the last hour</li>
<li>Capture the same, but for the last 24 hours</li>
<li>Use the &quot;calculate&quot; action to obtain the hourly mean hit count over the past 24h</li>
<li>Use the &quot;conditional block&quot; action to compare the last hour reading to the 24h mean</li>
<li>If the difference is less than 20%, don't send the alert</li>
</ul>
<p>Capture the Kibana Discover's hits count integer value of the last hour</p>
<p>Capture the same, but for the last 24 hours</p>
<p>Use the &quot;calculate&quot; action to obtain the hourly mean hit count over the past 24h</p>
<p>Use the &quot;conditional block&quot; action to compare the last hour reading to the 24h mean</p>
<p>If the difference is less than 20%, don't send the alert</p>
<p>This example is by default included in the job templates in any new installation of Anaphora.</p>
]]></content>
    <category term="action"/>
    <category term="anomaly"/>
    <category term="calculate"/>
    <category term="capture"/>
    <category term="changelog"/>
    <category term="detection"/>
    <category term="elasticsearch"/>
    <category term="update"/>
  </entry>
  <entry>
    <title>Conditional actions enables alerting</title>
    <link href="https://anaphora.it/blog/posts/2025-05-conditional-actions-enables-alerting/" rel="alternate" type="text/html"/>
    <id>https://anaphora.it/blog/posts/2025-05-conditional-actions-enables-alerting/</id>
    <published>2025-05-01T00:00:00.000Z</published>
    <updated>2025-05-01T00:00:00.000Z</updated>
    <author>
      <name>Anaphora Team</name>
      <email>support@anaphora.it</email>
    </author>
    <summary type="text">Add conditional logic to Anaphora jobs — compare captured values and trigger alerts only when thresholds are exceeded, like detecting brute-force login spikes.</summary>
    <content type="html"><![CDATA[<p>Thanks to the conditional block, we can create proper alerts. A simple example:</p>
<h3>Example1: send a report after comparing values from two websites</h3>
<ul>
<li>Capture a string/numeric value from a website</li>
<li>Capture numeric/string value from another website</li>
<li>Compare the two</li>
<li>Skip sending the report if condition is met</li>
</ul>
<p>Capture a string/numeric value from a website</p>
<p>Capture numeric/string value from another website</p>
<p>Compare the two</p>
<p>Skip sending the report if condition is met</p>
<h3>Example2: alert if a numeric reading is above/below a threshold</h3>
<p>This is useful for brute force attack detection, or any other alerts about high log event count over time.</p>
<ul>
<li>Capture Kibana discovery query results “count” for the last hour</li>
<li>Compare if this value is &gt; 1 million</li>
<li>Send the report (notify the system admin)</li>
</ul>
<p>Capture Kibana discovery query results “count” for the last hour</p>
<p>Compare if this value is &gt; 1 million</p>
<p>Send the report (notify the system admin)</p>
<h2></h2>
]]></content>
    <category term="action"/>
    <category term="alerts"/>
    <category term="capture"/>
    <category term="changelog"/>
    <category term="monitoring"/>
    <category term="observability"/>
    <category term="report"/>
    <category term="update"/>
  </entry>
  <entry>
    <title>Save time with Job templates</title>
    <link href="https://anaphora.it/blog/posts/2025-05-save-time-with-job-templates/" rel="alternate" type="text/html"/>
    <id>https://anaphora.it/blog/posts/2025-05-save-time-with-job-templates/</id>
    <published>2025-05-01T00:00:00.000Z</published>
    <updated>2025-05-01T00:00:00.000Z</updated>
    <author>
      <name>Anaphora Team</name>
      <email>support@anaphora.it</email>
    </author>
    <summary type="text">Create reusable job templates in Anaphora to skip repetitive setup — pre-bake branded PDF layouts, login flows, and common capture configurations.</summary>
    <content type="html"><![CDATA[<p>Don’t let users start from scratch every time they create a job. It’s useful for:</p>
<ul>
<li>Save time by anticipating some common tasks</li>
<li>Pre-bake some company-branded PDF templates</li>
<li>Reuse the boilerplate of a login process to a particular website</li>
</ul>
<p>Save time by anticipating some common tasks</p>
<p>Pre-bake some company-branded PDF templates</p>
<p>Reuse the boilerplate of a login process to a particular website</p>
<p>You can create unlimited templates. You can also promote a job to become a template.</p>
<p><img src="https://anaphora.it/blog/posts/2025-05-save-time-with-job-templates/assets/b64u-aW1hZ2UucG5n.png" alt="Image"></p>
]]></content>
    <category term="automation"/>
    <category term="changelog"/>
    <category term="job"/>
    <category term="template"/>
    <category term="update"/>
  </entry>
  <entry>
    <title>Dashboard to &quot;tiles&quot; &amp; advanced PDF composer</title>
    <link href="https://anaphora.it/blog/posts/2025-04-dashboard-to-tiles-advanced-pdf-composer/" rel="alternate" type="text/html"/>
    <id>https://anaphora.it/blog/posts/2025-04-dashboard-to-tiles-advanced-pdf-composer/</id>
    <published>2025-04-30T00:00:00.000Z</published>
    <updated>2025-04-30T00:00:00.000Z</updated>
    <author>
      <name>Anaphora Team</name>
      <email>support@anaphora.it</email>
    </author>
    <summary type="text">Capture Kibana dashboard visualizations as individual tiles and reassemble them with drag-and-drop in Anaphora&#39;s visual PDF report composer.</summary>
    <content type="html"><![CDATA[<p>You can now capture all visualizations of a Kibana dashboard into single tiles to selectively reassemble by drag &amp; drop into your visual PDF report composer in Anaphora.</p>
<p><img src="https://anaphora.it/blog/posts/2025-04-dashboard-to-tiles-advanced-pdf-composer/assets/b64u-aW1hZ2UucG5n.png" alt="Image"></p>
<h2>Make your PDF report look professional</h2>
<p>You can now make your PDF prettier by adding a page background (PNG, SVG, solid colors, gradients, etc). Trick: use lower opacity to watermark the background!</p>
]]></content>
    <category term="capture"/>
    <category term="changelog"/>
    <category term="composer"/>
    <category term="dashboard"/>
    <category term="kibana"/>
    <category term="pdf"/>
    <category term="report"/>
    <category term="tiles"/>
    <category term="update"/>
    <category term="visualization"/>
  </entry>
  <entry>
    <title>Introducing Spaces: restricting resources to users/roles</title>
    <link href="https://anaphora.it/blog/posts/2025-04-introducing-spaces-restricting-resources-to-users-roles/" rel="alternate" type="text/html"/>
    <id>https://anaphora.it/blog/posts/2025-04-introducing-spaces-restricting-resources-to-users-roles/</id>
    <published>2025-04-30T00:00:00.000Z</published>
    <updated>2025-04-30T00:00:00.000Z</updated>
    <author>
      <name>Anaphora Team</name>
      <email>support@anaphora.it</email>
    </author>
    <summary type="text">Spaces let you isolate jobs and delivery interfaces by user or role, with read-only, read-write, and admin permissions across multi-tenant environments.</summary>
    <content type="html"><![CDATA[<p>On the same note of ReadonlyREST’s tenancies, users and roles can be associated using “permissions” to an unlimited number of spaces.</p>
<p>A space is a virtual container of Jobs and Delivery Interfaces. Users and roles can be associated to a number of spaces via permissions of any access levels between read-only, read-write, or Admin.</p>
<p><img src="https://anaphora.it/blog/posts/2025-04-introducing-spaces-restricting-resources-to-users-roles/assets/b64u-aW1hZ2UucG5n.png" alt="Image"></p>
<h2>Moving resources across spaces</h2>
<p>Users that have admin access level to 2 or more spaces can copy resources across between spaces</p>
<p><img src="https://anaphora.it/blog/posts/2025-04-introducing-spaces-restricting-resources-to-users-roles/assets/b64u-aW1hZ2UucG5n.png" alt="Image"></p>
]]></content>
    <category term="changelog"/>
    <category term="permissions"/>
    <category term="roles"/>
    <category term="security"/>
    <category term="spaces"/>
    <category term="update"/>
  </entry>
  <entry>
    <title>OIDC gets added, and a login page facelift</title>
    <link href="https://anaphora.it/blog/posts/2025-04-oidc-gets-added-and-a-login-page-facelift/" rel="alternate" type="text/html"/>
    <id>https://anaphora.it/blog/posts/2025-04-oidc-gets-added-and-a-login-page-facelift/</id>
    <published>2025-04-30T00:00:00.000Z</published>
    <updated>2025-04-30T00:00:00.000Z</updated>
    <author>
      <name>Anaphora Team</name>
      <email>support@anaphora.it</email>
    </author>
    <summary type="text">Anaphora now supports OpenID Connect (OIDC) authentication alongside LDAP and SAML SSO, with a redesigned login page for enterprise identity providers.</summary>
    <content type="html"><![CDATA[<h2>Enterprise authentication, and authorization</h2>
<p>Navigate to settings &gt; system settings to find all the available authentication and authorization connectors configurations.</p>
<p><img src="https://anaphora.it/blog/posts/2025-04-oidc-gets-added-and-a-login-page-facelift/assets/b64u-aW1hZ2UucG5n.png" alt="Image"></p>
<h2>LDAP</h2>
<p>We support LDAP from the major open source LDAP server implementations like OpenLDAP or LemonLDAP, but also Microsoft Active Directory Domain Services (AD DS), IBM Security Directory Server, etc.</p>
<h2>SAML</h2>
<p>SAML SSO 2.0 is available to connect to your enterprise centralised authentication, it works with Keycloak, Azure ADFS, Okta, One Login, and many others.</p>
<p><img src="https://anaphora.it/blog/posts/2025-04-oidc-gets-added-and-a-login-page-facelift/assets/b64u-aW1hZ2UucG5n.png" alt="Image"></p>
<h2>OIDC</h2>
<p>OpenID Connect support is finally added! Keycloak is our reference implementation, but this one is a real passepartout for the world of the internet.</p>
<p><img src="https://anaphora.it/blog/posts/2025-04-oidc-gets-added-and-a-login-page-facelift/assets/b64u-aW1hZ2UucG5n.png" alt="Image"></p>
]]></content>
    <category term="authentication"/>
    <category term="changelog"/>
    <category term="ldap"/>
    <category term="oidc"/>
    <category term="saml"/>
    <category term="security"/>
    <category term="update"/>
  </entry>
  <entry>
    <title>Record a video - for easier capture debugging</title>
    <link href="https://anaphora.it/blog/posts/2025-04-record-a-video-for-easier-capture-debugging/" rel="alternate" type="text/html"/>
    <id>https://anaphora.it/blog/posts/2025-04-record-a-video-for-easier-capture-debugging/</id>
    <published>2025-04-30T00:00:00.000Z</published>
    <updated>2025-04-30T00:00:00.000Z</updated>
    <author>
      <name>Anaphora Team</name>
      <email>support@anaphora.it</email>
    </author>
    <summary type="text">Record and download full videos of headless browser capture operations to debug complex multi-step Kibana workflows visually.</summary>
    <content type="html"><![CDATA[<p>When you have a multi-step capture, clicks, navigations, selectors can get tricky to get right. So we introduced the capability to produce, visualize and download the full video of the headless browser operations, and see what went wrong.</p>
<p>You can also get the debug files containing the browser internal state, so it’s easier for us to support you when things are hard to debug.</p>
<p><img src="https://anaphora.it/blog/posts/2025-04-record-a-video-for-easier-capture-debugging/assets/b64u-aW1hZ2UucG5n.png" alt="Image"></p>
]]></content>
    <category term="capture"/>
    <category term="changelog"/>
    <category term="debugging"/>
    <category term="update"/>
    <category term="video"/>
  </entry>
  <entry>
    <title>Self-monitoring - Alert on job failures, observability metrics</title>
    <link href="https://anaphora.it/blog/posts/2025-04-self-monitoring-alert-on-job-failures-observability-metrics/" rel="alternate" type="text/html"/>
    <id>https://anaphora.it/blog/posts/2025-04-self-monitoring-alert-on-job-failures-observability-metrics/</id>
    <published>2025-04-30T00:00:00.000Z</published>
    <updated>2025-04-30T00:00:00.000Z</updated>
    <author>
      <name>Anaphora Team</name>
      <email>support@anaphora.it</email>
    </author>
    <summary type="text">Get notified when Anaphora jobs fail — configure alerts via email, Slack, or webhooks with throttling to prevent notification fatigue, plus a REST API for health monitoring.</summary>
    <content type="html"><![CDATA[<p>Keeping all the jobs running is a great responsibility. Fortunately, Anaphora can use a delivery interface to send an alert to you via email, slack, webhook (etc.) about the insurgence of errors.</p>
<p>No danger of getting spammed, as a maximum notification frequency can be set.</p>
<p>Alternatively, you can use the REST API to monitor the green, yellow, red state of each job.</p>
]]></content>
    <category term="alerts"/>
    <category term="changelog"/>
    <category term="interface"/>
    <category term="monitoring"/>
    <category term="observability"/>
    <category term="update"/>
  </entry>
  <entry>
    <title>Troubleshooting Failed Video Captures in Anaphora</title>
    <link href="https://anaphora.it/blog/posts/2024-02-video-troubleshooting/" rel="alternate" type="text/html"/>
    <id>https://anaphora.it/blog/posts/2024-02-video-troubleshooting/</id>
    <published>2025-02-07T00:00:00.000Z</published>
    <updated>2025-02-07T00:00:00.000Z</updated>
    <author>
      <name>Simone</name>
      <email>support@anaphora.it</email>
    </author>
    <summary type="text">Common issues and solutions for video capture failures in Kibana dashboards</summary>
    <content type="html"><![CDATA[<p>Video captures in Anaphora can sometimes fail due to various reasons. Here's your comprehensive guide to diagnosing and fixing common issues.</p>
<h2>Common Failure Scenarios</h2>
<h3>1. Blank Screen Captures</h3>
<pre><code class="language-yaml">Symptoms:
  - White/black screen in output
  - Missing dashboard elements
  - Incomplete rendering

Solutions:
  - Increase wait time
  - Check viewport size
  - Verify CSS selectors
</code></pre>
<h3>2. Authentication Issues</h3>
<ul>
<li>Session timeouts</li>
<li>Invalid credentials</li>
<li>SAML/SSO problems</li>
<li>Cookie management</li>
</ul>
<h3>3. Performance Problems</h3>
<ul>
<li>Browser memory limits</li>
<li>Network timeouts</li>
<li>Resource constraints</li>
<li>Concurrent job limits</li>
</ul>
<h2>Diagnostic Steps</h2>
<ol>
<li>
<p><strong>Check Browser Logs</strong></p>
<pre><code class="language-javascript">// Example log pattern
[ERROR] Failed to load resource: net::ERR_CONNECTION_TIMED_OUT
</code></pre>
</li>
<li>
<p><strong>Verify Network Access</strong></p>
<ul>
<li>Dashboard accessibility</li>
<li>Proxy settings</li>
<li>Firewall rules</li>
<li>SSL certificates</li>
</ul>
</li>
<li>
<p><strong>Review Resource Usage</strong></p>
<ul>
<li>Memory consumption</li>
<li>CPU utilization</li>
<li>Network bandwidth</li>
<li>Disk space</li>
</ul>
</li>
</ol>
<h2>Advanced Troubleshooting</h2>
<h3>Browser Configuration</h3>
<pre><code class="language-yaml">chromium_flags:
  - --disable-gpu
  - --no-sandbox
  - --disable-dev-shm-usage
  - --window-size=1920,1080
</code></pre>
<h3>Network Settings</h3>
<ul>
<li>Connection timeouts</li>
<li>Retry attempts</li>
<li>Keep-alive settings</li>
<li>DNS resolution</li>
</ul>
<h3>Memory Management</h3>
<ol>
<li>Clear browser cache</li>
<li>Adjust memory limits</li>
<li>Monitor swap usage</li>
<li>Optimize concurrent jobs</li>
</ol>
<h2>Common Solutions</h2>
<h3>For Blank Screens</h3>
<ol>
<li>Increase page load timeout</li>
<li>Add explicit wait conditions</li>
<li>Check JavaScript errors</li>
<li>Verify CSS selectors</li>
</ol>
<h3>For Authentication</h3>
<ol>
<li>Update credentials</li>
<li>Check SSO configuration</li>
<li>Manage cookie persistence</li>
<li>Verify token expiration</li>
</ol>
<h3>For Performance</h3>
<ol>
<li>Optimize dashboard</li>
<li>Reduce capture frequency</li>
<li>Adjust resource limits</li>
<li>Scale infrastructure</li>
</ol>
<h2>Prevention Tips</h2>
<h3>Regular Maintenance</h3>
<ul>
<li>Update browser versions</li>
<li>Clear temporary files</li>
<li>Monitor system resources</li>
<li>Test authentication</li>
</ul>
<h3>Best Practices</h3>
<ol>
<li>Use explicit selectors</li>
<li>Set appropriate timeouts</li>
<li>Monitor job queues</li>
<li>Implement retry logic</li>
</ol>
<h2>Debug Mode</h2>
<p>Enable debug mode for detailed logs:</p>
<pre><code class="language-bash">docker run -e DEBUG=true beshultd/anaphora
</code></pre>
<p>Debug output includes:</p>
<ul>
<li>Browser console logs</li>
<li>Network requests</li>
<li>Resource timing</li>
<li>Error stack traces</li>
</ul>
<h2>Getting Support</h2>
<p>If issues persist:</p>
<ol>
<li>Collect debug logs</li>
<li>Document reproduction steps</li>
<li>Check system requirements</li>
<li>Contact our support team</li>
</ol>
<p>Need more help? Join our <a href="https://community.anaphora.io">community forum</a> for expert assistance.</p>
]]></content>
    <category term="tutorial"/>
    <category term="troubleshooting"/>
    <category term="video"/>
    <category term="capture"/>
  </entry>
  <entry>
    <title>Monitoring Jobs in Anaphora</title>
    <link href="https://anaphora.it/blog/posts/2024-02-jobs-monitoring/" rel="alternate" type="text/html"/>
    <id>https://anaphora.it/blog/posts/2024-02-jobs-monitoring/</id>
    <published>2025-02-06T00:00:00.000Z</published>
    <updated>2025-02-06T00:00:00.000Z</updated>
    <author>
      <name>Simone</name>
      <email>support@anaphora.it</email>
    </author>
    <summary type="text">Learn how to track, monitor and manage your reporting jobs effectively</summary>
    <content type="html"><![CDATA[<h1>Monitoring Jobs in Anaphora</h1>
<p>Anaphora provides powerful tools to monitor your reporting jobs. This guide covers everything you need to know about job monitoring and management.</p>
<h2>The Jobs Dashboard</h2>
<p>The Jobs dashboard is your command center for monitoring all reporting activities:</p>
<ul>
<li><strong>Active Jobs</strong>: Currently running reports</li>
<li><strong>Scheduled Jobs</strong>: Upcoming automated reports</li>
<li><strong>Completed Jobs</strong>: Successfully delivered reports</li>
<li><strong>Failed Jobs</strong>: Reports that encountered errors</li>
</ul>
<h2>Understanding Job States</h2>
<p>Jobs in Anaphora can be in several states:</p>
<pre><code class="language-yaml">PENDING: Waiting to start
RUNNING: Currently executing
COMPLETED: Successfully finished
FAILED: Encountered an error
PAUSED: Temporarily suspended
</code></pre>
<h2>Monitoring Features</h2>
<h3>Real-time Status</h3>
<ul>
<li>Live progress indicators</li>
<li>Current step visualization</li>
<li>Time elapsed/remaining estimates</li>
</ul>
<h3>Job Details</h3>
<ul>
<li>Capture configuration</li>
<li>Delivery settings</li>
<li>Schedule information</li>
<li>Resource usage</li>
</ul>
<h3>Health Metrics</h3>
<ul>
<li>Success/failure rates</li>
<li>Average completion time</li>
<li>Resource utilization</li>
<li>Delivery performance</li>
</ul>
<h2>Setting Up Alerts</h2>
<p>Configure notifications for:</p>
<ol>
<li>Job completion</li>
<li>Execution failures</li>
<li>Performance issues</li>
<li>Resource constraints</li>
</ol>
<h2>Best Practices</h2>
<h3>Regular Monitoring</h3>
<ul>
<li>Check the dashboard daily</li>
<li>Review failure patterns</li>
<li>Monitor resource usage</li>
<li>Track delivery success rates</li>
</ul>
<h3>Performance Optimization</h3>
<ul>
<li>Stagger job schedules</li>
<li>Set appropriate timeouts</li>
<li>Monitor memory usage</li>
<li>Optimize capture settings</li>
</ul>
<h3>Troubleshooting Tips</h3>
<ol>
<li>Check job logs</li>
<li>Verify configurations</li>
<li>Test network connectivity</li>
<li>Validate credentials</li>
</ol>
<h2>Advanced Monitoring</h2>
<h3>API Integration</h3>
<pre><code class="language-python"># Example API call to check job status
response = requests.get(
    'https://your-anaphora/api/v1/jobs/status',
    headers={'Authorization': 'Bearer YOUR_TOKEN'}
)
</code></pre>
<h3>Custom Dashboards</h3>
<p>Create personalized views:</p>
<ul>
<li>Team-specific metrics</li>
<li>Department reports</li>
<li>Client dashboards</li>
</ul>
<h2>Maintenance Tasks</h2>
<p>Regular maintenance ensures smooth operation:</p>
<ol>
<li>Archive old reports</li>
<li>Clean up failed jobs</li>
<li>Update schedules</li>
<li>Rotate credentials</li>
</ol>
<p>Need help? Check our <a href="/blog/posts/2024-02-video-troubleshooting">troubleshooting guide</a> or contact support.</p>
]]></content>
    <category term="tutorial"/>
    <category term="monitoring"/>
  </entry>
  <entry>
    <title>Getting Started with Anaphora on Kibana</title>
    <link href="https://anaphora.it/blog/posts/2024-02-getting-started-with-anaphora/" rel="alternate" type="text/html"/>
    <id>https://anaphora.it/blog/posts/2024-02-getting-started-with-anaphora/</id>
    <published>2025-02-04T00:00:00.000Z</published>
    <updated>2025-02-04T00:00:00.000Z</updated>
    <author>
      <name>Simone</name>
      <email>support@anaphora.it</email>
    </author>
    <summary type="text">Create a PDF email report from a single Kibana dashboard</summary>
    <content type="html"><![CDATA[<p>Anaphora is a powerful tool for generating reports from your Elasticsearch data. In this guide, we'll walk through the basics of getting started with Anaphora and show you how to create your first report.</p>
<h2>Prerequisites</h2>
<p>Before we begin, make sure you have:</p>
<ul>
<li>Docker installed</li>
<li>Access to Kibana (you can use the demo instance of Kibana at https://demo.elastic.co/)</li>
</ul>
<h2>Installation</h2>
<p>Getting started with Anaphora is simple:</p>
<pre><code class="language-bash">docker run --name=anaphora -p 3000:3000 --rm -d beshultd/anaphora
</code></pre>
<p>Then visit http://localhost:3000 and log in with:</p>
<ul>
<li>Username: <code>admin</code></li>
<li>Password: <code>admin</code></li>
</ul>
<h2>Creating Your First Report</h2>
<ol>
<li>Click &quot;New Job&quot; in the Anaphora dashboard</li>
<li>Choose a job template or start with a plain one</li>
<li>Select &quot;Visualizations&quot; as your snapshot capture type</li>
<li>Click &quot;Test Capture&quot; to preview</li>
<li>Proceed to the compose screen to customize your report</li>
</ol>
<h2>Next Steps</h2>
<p>Go to composer and start creating your first report!</p>
<p>Here you can rows and columns to your report.
<img src="https://anaphora.it/blog/posts/2024-02-getting-started-with-anaphora/assets/composer.png" alt="Anaphora Composer Interface"></p>
<p>Pages can have custom backgrounds, like a logo or a large image.</p>
<p>Next, let's go to the deliver screen, where you can specify where to send your report.</p>
<h3>Testing without a real delivery interface</h3>
<p>By default a newly created Job will have assigned a dummy delivery interface. This is very useful for testing, and creating jobs right away without first going through configuring the details of a real delivery interface.</p>
<h2>Creating a real delivery interface</h2>
<p>Anaphora supports many delivery protocols, SMTP, S3, Webhook (i.e. for Mattermost chat), Slack, Mailgun, and more to come.</p>
<p><img src="https://anaphora.it/blog/posts/2024-02-getting-started-with-anaphora/assets/delivery_config.png" alt="Anaphora Delivery Interfaces protocols"></p>
<p>This time, let's select the SMTP interface, here is what to set up:
<img src="https://anaphora.it/blog/posts/2024-02-getting-started-with-anaphora/assets/delivery_smtp_config.png" alt="Anaphora Delivery Interface"></p>
<p>You can test your configuration straigth away using the included test feature
<img src="https://anaphora.it/blog/posts/2024-02-getting-started-with-anaphora/assets/delivery_smtp_test.png" alt="Anaphora Delivery Interface"></p>
<p>If your email was received, you can go back to the Job configuration and assign the new DI to the job.
<img src="https://anaphora.it/blog/posts/2024-02-getting-started-with-anaphora/assets/add_di.png" alt="Anaphora Delivery Interface add to job"></p>
<h2>Recap</h2>
<p>In this guide, we covered:</p>
<ul>
<li>Quick installation using Docker with a single command</li>
<li>Creating your first report by selecting visualization captures</li>
<li>Using the composer to create a customized eport with rows, columns, and backgrounds</li>
<li>Previewing the resulting PDF with a dummy delivery interface</li>
<li>Setting up real delivery interfaces like SMTP, S3, Webhook, Slack, and Mailgun</li>
<li>Configuring and testing an SMTP delivery interface</li>
<li>Assigning delivery interfaces to your jobs</li>
</ul>
<p>With these basics, you're ready to start creating and sharing professional reports from your Kibana dashboards.</p>
]]></content>
    <category term="tutorial"/>
    <category term="getting-started"/>
    <category term="email"/>
    <category term="kibana"/>
  </entry>
  <entry>
    <title>0.8.59</title>
    <link href="https://anaphora.it/blog/posts/2024-10-0-8-59/" rel="alternate" type="text/html"/>
    <id>https://anaphora.it/blog/posts/2024-10-0-8-59/</id>
    <published>2024-10-11T00:00:00.000Z</published>
    <updated>2024-10-11T00:00:00.000Z</updated>
    <author>
      <name>Anaphora Team</name>
      <email>support@anaphora.it</email>
    </author>
    <summary type="text">Anaphora 0.8.59 release — S3 delivery, ready-made job templates, improved PDF composer, Calculate capture step, and notification throttling.</summary>
    <content type="html"><![CDATA[<ul>
<li>
<p>S3 delivery interface</p>
</li>
<li>
<p>ready made template jobs</p>
</li>
<li>
<p>better PDF composer</p>
</li>
<li>
<p>“Calculate” capture step: for math expressions on variables</p>
</li>
<li>
<p>Max notification interval (no spam)</p>
</li>
</ul>
<p><img src="https://anaphora.it/blog/posts/2024-10-0-8-59/assets/01927adf-34c2-7cb2-9e09-f83033e24364.png" alt="Image 1 from changelog entry"></p>
]]></content>
    <category term="changelog"/>
    <category term="update"/>
  </entry>
  <entry>
    <title>0.8.0</title>
    <link href="https://anaphora.it/blog/posts/2024-03-0-8-0/" rel="alternate" type="text/html"/>
    <id>https://anaphora.it/blog/posts/2024-03-0-8-0/</id>
    <published>2024-03-26T00:00:00.000Z</published>
    <updated>2024-03-26T00:00:00.000Z</updated>
    <author>
      <name>Anaphora Team</name>
      <email>support@anaphora.it</email>
    </author>
    <summary type="text">Anaphora 0.8.0 release — dashboard full-load detection, wait actions, and customizable report templates with logo upload and color themes.</summary>
    <content type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Kibana Connector waits for Dashboard to be fully loaded</li>
<li>New action: wait an arbitrary amount of time before continue</li>
<li>Templates: Logo upload, color theme and default font</li>
</ul>
<p>Kibana Connector waits for Dashboard to be fully loaded</p>
<p>New action: wait an arbitrary amount of time before continue</p>
<p>Templates: Logo upload, color theme and default font</p>
<h3>Fixed</h3>
<ul>
<li>When testing, capture will output the correct error message on wrong credentials</li>
<li>Cron job not triggering correctly</li>
</ul>
<p>When testing, capture will output the correct error message on wrong credentials</p>
<p>Cron job not triggering correctly</p>
]]></content>
    <category term="action"/>
    <category term="changelog"/>
    <category term="dashboard"/>
    <category term="kibana"/>
    <category term="update"/>
  </entry>
</feed> 