What is this?
CAT is an open-source real-time application monitoring platform (APM) written in Java at Meituan-Dianping. It collects performance metrics, health status and alerts from your services and turns them into live reports.
Is this a server I deploy, or a library I embed in my code?
Both: a server you deploy, plus clients you embed in your apps to report data. On the server side, cat-consumer builds the analytics reports, cat-alarm raises real-time alerts and cat-hadoop archives logview data to HDFS.
How do I get it running?
Clone the repo with --depth=1 (the git history is huge), run the database scripts from the script folder, then build and deploy the cat-home module - it hosts the admin console, data server and alarm service all at once.
What can I instrument with it - which languages and stacks?
Official clients cover Java, C/C++, Node.js, Python and Go. An integration module adds connectors for common middleware: MVC, RPC, database and cache frameworks, message queues and config systems.
Any gotchas before I adopt it?
The cat-client module at the repo root is deprecated and will be removed in a future major version - use the new Java client in lib/java. Also treat the master-branch docs as authoritative; older third-party configs may not be compatible.
Is this only useful at Meituan-Dianping scale, or can a smaller team run it too?
It was built as a foundational component of Meituan-Dianping's server infrastructure, so it targets production services at scale - but it is open source, other companies use it too, and they can register in the adopters list.
What kinds of data can it monitor?
Four message models: Transaction, Event, Heartbeat and Metric - together they capture call flows, discrete events, runtime status and measured metrics.
How fast does data actually show up?
Very fast: report granularity is minute-level, but the pipeline from data generation to finished server-side processing runs in seconds - the README notes you see data from a couple of seconds back essentially immediately.
Does it record every request or just a sample?
Metrics are collected in full, with aggregation pre-computed on the client side; only the call-chain (trace) data is sampled to keep volume under control.
Will it hold up under heavy production traffic?
That is the design goal: high throughput for massive data volumes, fault tolerance that keeps monitoring transparent to your business, and horizontal scaling across distributed, even cross-datacenter (cross-IDC) deployments.
What are similar projects?
signoz, pinpoint, skywalking, thanos, zipkin, VictoriaMetrics, xxl-job, jaeger
Which topics is it in?
distributed-tracing, apm, hadoop, tracing, distributed, high-availability, metrics, realtime, infrastructure, observability, distributed-systems, dashboard
