The Diffusion metrics API

Getting information about how your system is running is crucial in most production environments. Diffusion has always been pretty good at providing lots of metrics, and allowing you to define your own in many cases through custom metric collectors.

Accessing these metrics and getting the data into your own monitoring system is pretty straightforward too. Mostly, this is through Diffusion’s Prometheus endpoint although JMX is an option too.

However – if you have written your own adapter, (or control client) that needs metrics from the server, you might not want to create a separate connection (be it HTTP to Prometheus, or JMX) to gather information. After all, you already have a websocket open to the server – why not use that?

With Diffusion 6.10 we created a metrics API that allows you to do just that. You will need your session to have VIEW_SERVER permissions – you probably don’t want your metrics exposed to the public! – and then you can write code like this:

CompletableFuture<Metrics.MetricsResult> future =
    session.feature(Metrics.class)
           .metricsRequest()
           .currentServer()
           .filter(Set.of("diffusion_topics_subscriptions",
                          "diffusion_topics_count"))
           .fetch();

This is using the Java API, but the other Diffusion SDKs also have the new metrics API available in them.

The metric names supplied match those that you would see in Prometheus, and you can either request them with a Set of names as you see above, or using a regular expression instead:

CompletableFuture<Metrics.MetricsResult> future =
    session.feature(Metrics.class)
           .metricsRequest()
           .currentServer()
           .filter(Pattern.compile("diffusion_.*"))
           .fetch();

The API is also able to fetch metrics from servers in a cluster, provided that you know the ServerName:

CompletableFuture<Metrics.MetricsResult> future =
     session.feature(Metrics.class)
            .metricsRequest()
            .server("server-1")
            .filter(Pattern.compile("diffusion_.*"))
            .fetch();

What happens if you don’t specify a server at all?

CompletableFuture<Metrics.MetricsResult> future =
    session.feature(Metrics.class)
           .metricsRequest()
           .filter(Pattern.compile("diffusion_.*"))
           .fetch();

Then you get metrics for all servers in the cluster, and the returned MetricsResult will let you identify which server provided which values.


Further reading

BLOG

Real-Time Data: The Missing Ingredient in AI’s Next Leap

September 10, 2025

Read More about Real-Time Data: The Missing Ingredient in AI’s Next Leap/span>

BLOG

DiffusionData Wins “Best Data Ops Solution Provider” at the Data Management Insight Awards Europe 2025

December 04, 2025

Read More about DiffusionData Wins “Best Data Ops Solution Provider” at the Data Management Insight Awards Europe 2025/span>

BLOG

DiffusionData Targets Agentic AI in Finance with New MCP Server

November 11, 2025

Read More about DiffusionData Targets Agentic AI in Finance with New MCP Server/span>

The owner of this website has made a commitment to accessibility and inclusion, please report any problems that you encounter using the contact form on this website. This site uses the WP ADA Compliance Check plugin to enhance accessibility.