IBM QRadar

IBM QRadar

Join this online user group to communicate across Security product users and IBM experts by sharing advice and best practices with peers and staying up to date regarding product enhancements.

 View Only

Documenting QRadar Pulse Dashboards: The Puzzle, The Pain, and… A Python Script? – PulseQueryViewer for QRadar (contrib)

By Pascal Weber posted 4 hours ago

  

Following the footsteps of our previous contribution 🛠 NHSuite for QRadar 🛠 — a Python tool that simplified the management of Network Hierarchies — I’ve continued my commitment to sharing useful utilities with the community.

After facing another limitation often encountered when working with QRadar Pulse dashboards. And once again, rather than keep the fix private, I've decided to publish a new script for everyone’s benefit.

Introducing: PulseQueryViewer 🎉

Why PulseQueryViewer?

In today’s SOC environments, dashboards are more than pretty charts — they’re the pulse of the security monitoring lifecycle. Analysts rely on them to visualize trends, define thresholds, or use drill down to do dynamic investigations.

But here’s the catch: while QRadar Pulse makes it easy to build powerful dashboards from widgets and AQL queries, documenting them is another story.

Export a dashboard and you’ll get… JSON...

Useful for a machine, but not exactly analyst-friendly.

We’ve seen this pain point across multiple deployments:

  • 📜 Documentation (especially for SOC audit/compliance) when exporting Pulse dashboards.

  • 🤔 Analysts unsure which AQL query sits behind each widget.

  • 🔄 No easy way to reuse or share queries in reports, audits, or CI/CD pipelines.

That’s why we built PulseQueryViewer — a simple but powerful Python script to bring clarity to Pulse dashboard exports.

PulseQueryViewer for QRadar: A brief Overview

Usage

👉 Usage : PulseQueryViewer.py --help

PulseQueryViewer.py --help

📂 
Input File(s): Using -f or --file parameter (mandatory)
📤 Export to CSV: Using -c or --csv parameter
📜 Export to Markdown: Using -m or --markdown parameter
ℹ️ Version Information: Using --version parameter

Exporting Your Pulse Dashboard JSON

Before using PulseQueryViewer, you first need the JSON export of your QRadar Pulse dashboards.

Once your dashboard is selected in Pulse, exporting it is simple:

  1. Go to your QRadar console and open the Pulse App.

  2. Select the dashboard you want to document or analyze after (example : Event and Flow Metrics in the screen capture)

    QRadar Pulse Dashboard - Event and flow metrics
  3. In the upper-right menu, click on the Export button → Export with default parameters values

    CPT-Pulse-ExportPulseDashboard1

  4. Save the file locally (e.g., Event and flow metrics.json).

    CPT-Pulse-ExportPulseDashboard2

This JSON file contains all the widgets, AQL queries, and configuration data of the dashboard.


👉 You can repeat this process for every dashboard you want to document, exporting as many JSON files as you need. PulseQueryViewer will then parse them individually or even combine them if you specify multiple files at once.

Core functionalities

  • Streamlined Dashboard Documentation:
    The tool parses JSON exports from QRadar Pulse dashboards and transforms them into human-readable formats. Analysts can choose between color-coded console output, CSV tables, or Markdown documentation — making it easier to analyze, share, or archive queries related to the Pulse dashboard.
     
    • Console Output:
      👉 Using -f or --file parameter

      Example : PulseQueryViewer.py -f dashboard1.json

      PulseQueryViewer.py -f

      PulseQueryViewer parses the JSON and displays each widget in a clear, color-coded format with a direct output on the console :

      🟡
      Yellow : Pulse Dashboard name on QRadar Pulse
      Example : Dashboard: Event and flow metrics

      Grey : Widget Number (identifies the position/order of the widget in the dashboard JSON)
      Example : Widget Number: 1

      🔴 Red : Widget Name (The label/title of the widget as defined in the Pulse dashboard)
      Example : Name: Top 10 log sources


      🟢 Green : AQL Query (The full Ariel Query Language (AQL) statement associated with the widget)
      Example :
      Query: SELECT logsourcename(logsourceid) as 'MY Log Sources', LONG(SUM("SUM_eventcount")/(2*60*60)) event_rate FROM GLOBALVIEW('Top Log Sources','NORMAL') WHERE logSourceId not in (62,63,64,65,66,67,68,69) GROUP BY logsourceid ORDER BY event_rate DESC LIMIT 10 LAST 2 HOURS

      PulseQueryViewer is not limited to a single dashboard export. You can specify several JSON files in the same command line, and the tool will parse them sequentially. This is particularly useful if you need to generate consolidated documentation or compare multiple dashboards at once.

      👉 Example:

      PulseQueryViewer.py -f dashboard1.json dashboard2.json dashboard3.json


    • CSV Export:
      👉 Using -c or --csv parameter
      Example : PulseQueryViewer.py -f dashboard1.json -c myexportedfile.csv
      PulseQueryViewer export csv file

      On this example, each widget is exported into a clear tabular structure, easily opened in Numbers, Excel, LibreOffice or any tool.

      Here is the result (example) : cat PulseFirewallDB.csv

      PulseQueryViewer exported csv file output

      Here is the result On Excel (example): 
      PulseQueryViewer csv output on Excel


      PulseQueryViewer is not limited to a single dashboard export. You can specify several JSON files in the same command line, and the tool will parse them sequentially. This is particularly useful if you need to generate consolidated documentation or compare multiple dashboards at once.

      👉 Example:

      PulseQueryViewer.py dashboard1.json dashboard2.json -c PulseConsolidedDocumentation.csv

      PulseQueryViewer consolidation of multiple dashboard for documentation


      Sample of two Pulse Dashboard output on Excel :

      Sample multiple dashboard consolidated on Excel


    • Markdown Export:
      👉 Using -m or --markdown parameter

      Example : PulseQueryViewer.py -f dashboard1.json -m myexportedfmarkdownfile.md

      PulseQueryViewer markdown option

      Output of the md file (example) :

      PulseQueryViewer text Markdown export


      Markdown output is structured for easy integration into documentation systems (Confluence, Gitlab, Wikis), example here on Gitlab :

      PulseQueryViewer markdown option output on gitlab


  • Error Management:

    No tool is complete without robust error handling ⚠️.

    PulseQueryViewer validates inputs and reports issues clearly:

    • 🧾 Invalid JSON → flagged and logged

    • ❌ Missing widget/query → highlighted

    • 🔐 Export issues (permissions, disk errors) → written into PulseQueryViewer.log

    This ensures analysts always get trustworthy outputs, even in complex environments.


    • Using the PulseQueryViewer.log file generated

      PulseQueryViewer.log file



  • Version Information:
    👉 Using --version parameter

    PulseQueryViewer version

    Displays script version info.

👉 With these options, PulseQueryViewerSuite transforms Pulse dashboards into readable, exportable, and auditable documentation, ready to integrate with CI/CD pipelines or compliance workflows.

GitHub Link 

Here is the link of the full project - contribution are welcome - 

👉 Github Link : https://github.com/zoldax/PulseQueryViewer

Environment and prerequisite

  • 🌐 Input: JSON export of a QRadar Pulse dashboard
  • 🐍 Python: 3.6+
  • 📦 Dependencies: json, argparse, colorama, csv

    Runs on a standard Linux machine or directly from your workstation — no changes needed on QRadar.

How do i start?

Clone the project from GitHub on your Linux instance with the git clone command : https://github.com/zoldax/PulseQueryViewer.git

Wrapping Up

🔍 With PulseQueryViewer, Pulse Dashboards become readable outputs, structured files, and shareable documentation.

It’s part of a larger vision: embedding CI/CD principles into SIEM operations, ensuring dashboards and documentation evolve together, securely and consistently in a universal readable format.

For QRadar users — with audit/compliance requirement on documentation— this means improved robustness, auditability, and operational efficiency.

For analysts, it simply means less time wrestling with JSON and more time doing what matters: defending the enterprise.

👉 GitHub link (contributions welcome!)

Because the beat of a SOC isn’t only in flashy widgets… it’s in sharing queries and docs the whole team can dance to.🥁.

Cheers 🍻,
zoldax

0 comments
17 views

Permalink