Skip to content

sreerajsivadas/DurableFunctionsMonitor

 
 

Repository files navigation

logo

Durable Functions Monitor

A monitoring/debugging UI tool for Azure Durable Functions

Azure Durable Functions provide an easy and elegant way of building cloud-native Reliable Stateful Services in the Serverless world. The only thing that's missing so far is a UI for monitoring, managing and debugging your orchestration instances. This project tries to bridge the gap.

Nuget GitHub Repo stars

Visual Studio Marketplace Installs Nuget

Prerequisites

To run this on your devbox you need to have Azure Functions Core Tools globally installed (which is normally already the case, if you're working with Azure Functions - just ensure that you have the latest version of it).

OR

Docker Desktop, if you prefer to run it locally as a container.

How to run

As a VsCode Extension.

  • Install it from the Marketplace or from a VSIX-file.
  • (if you have Azure Functions extension also installed) Goto Azure Functions View Container, observe all your TaskHubs under DURABLE FUNCTIONS tab and click on them to connect.
  • (if not) Type Durable Functions Monitor in your Command Palette and then confirm or provide Storage Connection String and Hub Name.

OR

As a standalone service, either running locally on your devbox or deployed into Azure: Deploy to Azure

OR

Install it as a NuGet package into your own Functions project (.Net Core only).

Features

1. View the list of your Orchestrations and/or Durable Entities, with sorting, infinite scrolling and auto-refresh:

2. Filter by time range and column values:

3. Visualize the filtered list of instances as a Time Histogram or as a Gantt chart:

4. Monitor the status of a certain instance:

5. Quickly navigate to a certain instance by its ID:

6. Observe Sequence Diagrams and Gantt Charts for orchestrations:

7. Restart, Purge, Rewind, Terminate, Raise Events, Set Custom Status:

8. Purge Orchestration/Entity instances history:

9. Clean deleted Durable Entities:

10. Create custom Orchestration/Entity status tabs with Liquid Templates:

  1. Create a Liquid template file and name it like [My Custom Tab Name].[orchestration-or-entity-name].liquid or just [My Custom Tab Name].liquid (this one will be applied to any kind of entity).
  2. In the same Storage Account (the account where your Durable Functions run in) create a Blob container called durable-functions-monitor.
  3. Put your template file into a tab-templates virtual folder in that container (the full path should look like /durable-functions-monitor/tab-templates/[My Custom Tab Name].[orchestration-or-entity-name].liquid).
  4. Restart Durable Functions Monitor.
  5. Observe the newly appeared My Custom Tab Name tab on the Orchestration/Entity Details page:

Sample Liquid Template:

 <h2>These people were invited:</h2>
 <ul>
 {% for participant in Input.Participants %}
   <li><h3>{{participant}}<h3></li>
 {% endfor %}
 </ul>  

You can have multiple templates for each Orchestration/Entity type, and also multiple 'common' (applied to any Orchestration/Entity) templates. Here is a couple of more sample templates.

NOTE1: this .Net object is passed to your templates as a parameter. Mind the property names and their casing.

NOTE2: code inside your templates is still subject to these Content Security Policies, so no external scripts, sorry.

11. Connect to different Durable Function Hubs and Azure Storage Accounts:

12. Monitor non-default Storage Providers (Netherite, Microsoft SQL, etc.):

For that you can use Durable Functions Monitor in 'injected' mode, aka added as a NuGet package to your project.

  1. Create a .Net Core Function App project, that is configured to use an alternative Storage Provider and make sure it compiles and starts.
  2. Add DurableFunctionsMonitor.DotNetBackend package to it:
 dotnet add package DurableFunctionsMonitor.DotNetBackend
  1. Add mandatory initialization code, that needs to run at your Function's startup:
[assembly: WebJobsStartup(typeof(StartupNs.Startup))]
namespace StartupNs 
{
  public class Startup : IWebJobsStartup
  {
     public void Configure(IWebJobsBuilder builder)
     {
        DfmEndpoint.Setup();
     }
  }
}

Find more details on programmatic configuration options in the package readme.

  1. Run the project:
 func start
  1. Navigate to http://localhost:7071/api. You can customize the endpoint address as needed, as described here.

13. Visualize your Azure Function projects in form of an interactive graph:

This functionality is powered by az-func-as-a-graph tool, but now it is also fully integrated into Durable Functions Monitor: image

When running Durable Functions Monitor as VsCode Extension, the Functions Graph tab should appear automatically, once you have the relevant Functions project opened.

When running in standalone/injected mode you'll need to generate and upload an intermediate Functions Map JSON file.

  1. Generate it with az-func-as-a-graph CLI. Specify dfm-func-map.<my-task-hub-name>.json (will be applied to that particular Task Hub only) or just dfm-func-map.json (will be applied to all Task Hubs) as the output name.
  2. Upload this generated JSON file to function-maps virtual folder inside durable-functions-monitor BLOB container in the underlying Storage Account (the full path should look like /durable-functions-monitor/function-maps/dfm-func-map.<my-task-hub-name>.json).
  3. Restart Durable Functions Monitor.
  4. Observe the newly appeared Functions Graph tab.

About

A monitoring/debugging UI tool for Azure Durable Functions

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • TypeScript 59.1%
  • C# 21.2%
  • HTML 18.3%
  • CSS 0.8%
  • JavaScript 0.5%
  • Dockerfile 0.1%