Asterism — reconstruct call timelines from CEL/CDR/full logs (open source, Go)

Hi all,

I built an open-source CLI tool for post-mortem call analysis on Asterisk and
wanted to share it with the community for feedback.

The problem it solves: debugging why a call dropped usually means grepping the
full log for the right [C-xxxxxxxx], cross-referencing CDR rows by uniqueid, and
decoding CEL events by hand. asterism does this automatically — it groups events
by linkedid and reconstructs a single call’s timeline, combining CEL, CDR, and
full log into one view.

What it currently does:

  • Reconstructs call timelines from CEL + CDR, correlated by linkedid
  • Optional full log correlation (dialplan execution + SIP signaling)
  • Q.850 hangup cause translation
  • Queue call detection (wait time, agent, abandoned calls)
  • Blind/attended transfer awareness
  • Text, JSON, HTML (with SIP ladder diagram), and CSV output
  • A “scan” mode to flag suspicious calls in large logs (long holds, many
    transfers, codec failures)

Tested against Asterisk 18/20/21 with PJSIP. Written in Go, no third-party
dependencies, single static binary.

Repo: GitHub - forgetdev/asterism: Reconstruct and inspect Asterisk calls from log, CDR, and CEL data. · GitHub

It’s an early release (v1.0.0) and I’d genuinely value feedback from people who
run Asterisk in production: does this match a real workflow? What’s missing?
If anyone wants to test it against their own logs, I’d be happy to hear how it
holds up against setups different from my lab.

Thanks!

Disclaimer - I made it with the help of Claude Code to improve my codes and thoughts :slight_smile: