如何获得Logic App Metrics?

时间:2017-02-06 06:59:41

标签: azure azure-logic-apps

我试图在我的控制台应用程序中获取像BillableExecutions,Latency等逻辑应用程序指标。

目前,我能够使用.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

有人可以告诉我这里做错了吗?

由于

1 个答案:

答案 0 :(得分:1)

由于某种原因,逻辑应用程序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);

                            }
                        }
                    }


                }
            }