Azure IoT Hub Operations Monitoring

六眼飞鱼酱① 提交于 2019-12-12 01:49:56

问题


I have an Azure IoT hub that I connect devices to. I want to enable monitoring to monitor devices connecting and disconnecting from the hub.

I've enabled Verbose on Connections in the monitoring categories for my Iot hub:

My devices connect to my Hub and show in Device Explorer:

I then have an Azure Function set to log my data from the Operations Monitoring to an Azure SQL db:

using System;
using System.Configuration;
using System.Data.SqlClient;
using Newtonsoft.Json;

public static void Run(string myEventHubMessage, TraceWriter log)
{
    log.Info(myEventHubMessage);

    try
    {
        var connectionString = ConfigurationManager.ConnectionStrings["iotAzureSQLDb"].ConnectionString;

        log.Info(connectionString);
        var message = JsonConvert.DeserializeObject<MonitoringMessage>(myEventHubMessage);

        using (var connection = new SqlConnection(connectionString))
        {
            var sqlStatement = "insert into [dbo].[DeviceStatuses] " +
                                "(DeviceId, ConnectionStatus, ConnectionUpdateTime)" +
                                "values " +
                                "(@DeviceId, @ConnectionStatus, @ConnectionUpdateTime)";
            using (var dataCommand = new SqlCommand(sqlStatement, connection))
            {
                dataCommand.Parameters.AddWithValue("@ConnectionStatus", message.operationName);
                dataCommand.Parameters.AddWithValue("@DeviceId", message.deviceId);
                dataCommand.Parameters.AddWithValue("@ConnectionUpdateTime", message.time);

                connection.Open();
                dataCommand.ExecuteNonQuery();
                connection.Close();

                log.Info($"Device {message.deviceId} changed state: {message.operationName}");
            }
        }
    }
    catch (Exception ex)
    {
        log.Info(ex.Message);
    }
}

public class MonitoringMessage
{
    public string deviceId { get; set; }
    public string operationName { get; set; }
    public int? durationMs { get; set; }
    public string authType { get; set; }
    public string protocol { get; set; }
    public DateTimeOffset? time { get; set; }
    public string category { get; set; }
    public string level { get; set; }
    public int? statusCode { get; set; }
    public int? statusType { get; set; }
    public string statusDescription { get; set; }
}

If I enable Device Identity Operations in Operations Monitoring, I get create events being logged. So I'm confident the inputs to the function is correct. However, nothing is ever created for Connections???

I can also send messages to my connected devices fine. I'm just seeing no events for connections / disconnections.

I've also tried creating a Stream Analytics and sampling the input for a period where I know I have connections / disconnections and nothing is being found.


回答1:


I have resolved this by forcing my device to connect over MQTT in the dev environment and now I see it connecting and disconnecting.

Unfortunately I can't use MQTT in production.

Does anyone know if Connection / Disconnection events are only possible in MQTT as opposed to AMQP?




回答2:


If you just would like to get devices connection states, use REST instead.

https://docs.microsoft.com/en-us/rest/api/iothub/deviceapi#DeviceApi_GetDevices

Also, here's an online tool to monitor devices connection state.

https://iotdevtool.com/registry/




回答3:


We invented a data flow to determine "device state". We created a Stream Analytics Job, wired to the Operations monitoring (that's the Endpoint type in the IOT Input definition). We have the Stream Analytics query SELECT INTO a ServiceBus queue . We have a WebJob processing that queue and updating a persistent store (SQL Table, Azure Table, your pick) where we write down the status. A UI (or WebAPI Controller) can then inspect that persistent store.

So far we have all the Monitoring categories (in the IOT Hub Portal blade) set to Verbose but may dial it down later.

We do get data.



来源:https://stackoverflow.com/questions/43490633/azure-iot-hub-operations-monitoring

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!