如何获取逻辑应用指标?

How to get Logic App Metrics?

我正在尝试在我的控制台应用程序中获取逻辑应用指标,例如 BillableExecutions、延迟等。

目前,我能够使用 .Net 客户端 Microsoft.Azure.Management 列出逻辑应用程序运行、触发器和版本。但是它似乎没有 API 来访问监控 API。

代码摘录

private static void Main(string[] args)
        {
            var token = GetTokenCredentials();
            var client = new LogicManagementClient(token, new HttpClientHandler())
            {
                SubscriptionId = new AzureSubscription().SubscriptionId
            };

            var dataQuery = new ODataQuery<WorkflowFilter>
            {
                Top = 50
            };

            using (client)
            {
                var logicAppsWorkFlows = client.Workflows.ListBySubscription(dataQuery);

                foreach (var logicAppsWorkFlow in logicAppsWorkFlows)
                {
                    var runs = GetWorkflowRuns(client, logicAppsWorkFlow.Id.Split('/')[4], logicAppsWorkFlow.Name);
                    Console.WriteLine(runs.Count);
                }
                Console.WriteLine(logicAppsWorkFlows.Count());
            }
        }

谁能告诉我如何访问逻辑应用指标?是否有类似于 Microsoft.Azure.Management 的客户端用于访问指标数据?

更新 2

我找到了一个处于预发布模式的客户端 dll,用于获取指标。下面是我当前的代码

var token = GetTokenCredentials();
            var insightsClient = new InsightsClient(token, new HttpClientHandler())
            {
                SubscriptionId = new AzureSubscription().SubscriptionId
            };

            var logicManagementClient = new LogicManagementClient(token, new HttpClientHandler())
            {
                SubscriptionId = new AzureSubscription().SubscriptionId
            };

            var dataQuery = new ODataQuery<WorkflowFilter>
            {
                Top = 50
            };

            using (logicManagementClient)
            {
                var logicAppsWorkFlows = logicManagementClient.Workflows.ListBySubscription(dataQuery);

                foreach (var logicAppsWorkFlow in logicAppsWorkFlows)
                {
                    using (insightsClient)
                    {
                        var metricsDataQuery = new ODataQuery<Metric>
                        {
                            Filter = "name.value eq 'ActionLatency' and startTime ge '2014-07-16'"
                        };

                        IEnumerable<Metric> metricsList = null;
                        try
                        {
                            metricsList = insightsClient.Metrics.List(logicAppsWorkFlow.Id, metricsDataQuery);
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(e);
                        }


                        if (metricsList == null) continue;
                        foreach (var metric in metricsList)
                        {
                            foreach (var metricValue in metric.Data)
                            {
                                Console.WriteLine(metric.Name.Value + " = " + metricValue.Total);

                            }
                        }
                    }


                }
            }

我收到一个异常,提示过滤字符串无效。我指的是此处提供的过滤器字符串结构

https://docs.microsoft.com/en-us/rest/api/monitor/filter-syntax

谁能告诉我我做错了什么?

谢谢

出于某种原因,logic Apps StartTime 字段似乎不允许使用 ge。我必须将代码更改为以下才能使其工作

using (logicManagementClient)
            {
                var logicAppsWorkFlows = logicManagementClient.Workflows.ListBySubscription(dataQuery);

                foreach (var logicAppsWorkFlow in logicAppsWorkFlows)
                {
                    using (insightsClient)
                    {
                        var metricsDataQuery = new ODataQuery<Metric>
                        {
                            Filter = "startTime eq " + DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd") + " and name.value eq 'BillableTriggerExecutions' and endTime eq " + DateTime.Now.ToString("yyyy-MM-dd")
                        };


                        var query = metricsDataQuery.GetQueryString();
                        Console.WriteLine(query);
                        IEnumerable<Metric> metricsList = null;
                        try
                        {
                            //throws exception if there is no metrics data
                            //TODO: Check whether the logic app ran atleast one time
                            metricsList = insightsClient.Metrics.List(logicAppsWorkFlow.Id, metricsDataQuery);
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(e);
                        }
                        if (metricsList == null) continue;
                        foreach (var metric in metricsList)
                        {
                            foreach (var metricValue in metric.Data)
                            {
                                Console.WriteLine(metric.Name.Value + " = " + metricValue.Total);

                            }
                        }
                    }


                }
            }