IoT (und mehr) mit Azure Digital Twins

Im Zuge der Weiterentwicklung der Industrie 4.0-Konzepte werden wir uns mit der Azure-Ausgabe der Digital Twins (digitale Zwillinge) befassen. Die Definition von digitalen Zwillingen geht von der digitalen Darstellung der Eigenschaften von realen Dingen (oder Menschen) aus, entweder in Echtzeit (zur Steuerung und vorausschauenden Wartung) oder in Simulationen, um Verhaltensweisen vor dem tatsächlichen Einsatz zu erfassen und zu testen. Als solche sind Azure Digital Twins eng mit den Azure IoT-Diensten verwandt; sie könnten jedoch noch etwas mehr leisten, wie wir im Folgenden sehen werden.

Symbolbild: Ein Ingenieur und eine Ingenieurin stehen in einer modernen Fabrik, während der Ingenieur ein Tablet bedient, mit dem er eine Maschine in der Produktionslinie steuert.

Wie werden Modelle erstellt und eingesetzt ?

Azure Digital Twins stützt sich auf die Digital Twins Definition Language (DTDL), die der JavaScript Object Notation for Linked Data (JSON-LD) folgt, wodurch sie sprachenagnostisch und mit bestimmten Ontologie-Standards verbunden ist. Die Root-Struktur wird als Schnittstelle deklariert, die Eigenschaften, Beziehungen und Komponenten enthalten kann. Eigenschaften können Telemetriedaten (ereignisbasiert, wie z. B. Temperaturmessungen) oder Werte (z. B. Name oder Gesamtverbrauch) enthalten, Beziehungen beschreiben die Verbindung zwischen Zwillingen (z. B. Etage enthält Raum), und schließlich sind Komponenten auch Modelle, die in der Schnittstelle per Id referenziert werden (z. B. Telefon hat Kamera-Komponente).

Modelle unterstützen Vererbung, daher kann man sich diese Modelle bereits als serverlose (POCOs) Klassen vorstellen. In der Tat werden aus diesen Modellen Instanzen erstellt, die in Azure Digital Twins leben. Es stellt sich die logische Frage: Wenn es sich um Klassen handelt, was ist dann mit Methoden? Hier kommen die serverlosen Azure Functions sehr gut zum Einsatz, da alle Ereignisse von Digital Twins mit Azure Functions abgefangen und verarbeitet werden können. Somit schaffen Azure Digital Twins, gepaart mit Azure Functions, eine leistungsstarke serverlose Infrastruktur, die sehr komplexe ereignisgesteuerte Szenarien implementieren kann, indem sie die bereitgestellte REST-API für die Modell- und Datenmanipulation nutzt. Der Preis für diese Flexibilität ist eine ziemlich steile Lernkurve und man muss Funktionen für die Dateneingabe und -ausgabe von Grund auf neu schreiben.

Json-Modelle können manuell erstellt werden, oder noch einfacher, Microsoft stellt Beispiel-Ontologien (vorgefertigte Domänenmodelle) in Excel zur Verfügung, die erweitert oder angepasst werden können. Mit dem Digital Twins Explorer (derzeit in der Vorschau im Azure-Portal) können diese Modelle in Azure hochgeladen werden, wobei die Erstellung von Instanzen und Beziehungen bereits automatisiert ist. Unter dem Azure Digital Twins Explorer befindet sich eine REST API, sodass man diese auch programmieren kann.

In unserer Beispielimplementierung eines intelligenten Gebäudes (siehe Abbildung 1) haben wir Modelle (links) und Instanzen mit Beziehungen (rechts) erstellt und hochgeladen. Es gibt eine Unternehmensmodellinstanz für ZEISS Digital Innovation (ZDI), die zwei Gebäude in Dresden und München hat, die jeweils Stockwerke, Räume und Aufzüge enthalten.

Screenshot aus einem Programm zur Modellierung von Azure Digital Twins
Abbildung 1: Modellierung

Wie kommen die Daten in das System?

In unserer Smart-Building-Implementierung (siehe Abbildung 2) verwenden wir den IoT-Hub, um Sensordaten aus Räumen (Temperatur, Energieverbrauch, Anzahl der Personen in den Räumen, usw.), sowie OPC-UA-konvertierte Daten aus Aufzügen, zu sammeln.

Schematische Darstellung der Architektur einer Smart-Building-Implementierung
Abbildung 2: Architektur

Normalerweise lässt sich IoT Hub mit ein paar Klicks problemlos in Insight Time Series integrieren, aber es sind einige Funktionen erforderlich, um diese Daten mit Digital Twins abzufangen. Die erste Funktion reagiert auf Änderungen im IoT Hub Event Grid und gibt Aktualisierungen an Digital Twins weiter, die dann andere Funktionen auslösen können, z. B. die Berechnung und Aktualisierung des Gesamtenergieverbrauchs im Raum und die Weitergabe an alle Eltern. Alle diese Änderungen in den Digital Twins werden in einem Update-Patch-Format an den Event Hub weitergeleitet, das von Insight Time Series nicht gelesen werden kann. Hier kommt eine weitere Funktion ins Spiel, die diese Patch-Änderungen umwandelt und sie an einen anderen Event Hub weiterleitet, den Insight Time Series abonnieren und die Daten speichern kann. Klingt über-technisch? Ist es auch! Wie bereits erwähnt, muss eine Menge Arbeit von Grund auf geleistet werden, aber wenn man sich erst einmal mit den Konzepten vertraut gemacht hat, ist der Preis die Flexibilität bei der Implementierung fast aller Szenarien. Von vertikalen Hierarchien mit Datenvermehrung (z. B. Aggregationen des Wärmeverbrauchs) bis hin zu horizontalen Interaktionen zwischen Zwillingen auf der Grundlage von Beziehungen (z. B. wenn ein Aufzug spricht und die Leistung der anderen Aufzüge im selben Gebäude auf der Grundlage eines KI-Modells beeinflusst) kann alles implementiert werden.

Eine weitere leistungsstarke Funktion besteht darin, dass wir Daten aus praktisch jeder Quelle in Digital Twins streamen und mischen können, um ihre Nutzung für Business Intelligence zu erweitern. Von ERP- und Buchhaltungssystemen bis hin zu Sensoren und OPC-UA-Servern können Daten in Echtzeit eingespeist und mit Querverweisen versehen werden, um nützliche Informationsströme zu erzeugen – von Teebeuteln, die an einem verschneiten Wintertag in der Küche ausgehen, bis hin zu der Frage, ob der monetäre Aufwand für die Aufzugswartung proportional zur Anzahl der Fahrten im Jahr ist.

Wie werden die Daten analysiert und berichtet?

In vielen industriellen Systemen und dank der immer preiswerteren Speicherung landen alle Telemetriedaten in der Regel in einer Zeitreihe zur Analyse und Archivierung.

Datenalarme, Durchschnittswerte und Aggregationen können jedoch ein echter Gewinn für die Berichterstattung in Echtzeit sein. Digitale Zwillinge bieten eine vollständige REST-API, über die Zwillinge auf der Grundlage von Beziehungen, Hierarchien oder Werten abgefragt werden können. Diese APIs können auch komponiert und in API Management Services für Echtzeitaufrufe an Dritte weitergegeben werden.

Eine andere Möglichkeit ist die Nutzung von Time Series Insights für eine umfassende Analyse kompletter Datensätze oder die Verwendung von Abfragen aus Time Series zur Erstellung interaktiver Berichte mit Power BI.

Sowohl Echtzeit- als auch historische Berichte haben ihre Berechtigung, und die optimale Nutzung sollte auf der Grundlage konkreter Szenarien bestimmt werden.

Zusammenfassung

Azure Digital Twins bieten eine sprachenagnostische Modellierung, die eine Vielzahl von Datentypen akzeptieren und verschiedene Ontologien unterstützen kann. In Verbindung mit serverlosen Funktionen können sehr komplexe und leistungsstarke interaktive Lösungen erstellt werden. Diese Flexibilität ist jedoch mit hohen Kosten für die manuelle Implementierung in den Datenfluss mittels Events und Funktionen verbunden. Aus diesem Grund ist zu erwarten, dass Microsoft (oder ein Open-Source-Anbieter) in Zukunft Middleware mit generischen Funktionen und Bibliotheken für Standarddatenflüsse bereitstellen wird.

Patientenversorgung der Zukunft – Digital Health Solutions mit Azure Health Data Services

Seit Beginn der Covid-Pandemie steht das Gesundheitswesen unter enormem Druck. Die demografische Entwicklung, der Wandel des Krankheitsspektrums, gesetzliche Vorschriften, Kostendruck und Fachkräftemangel bei gleichzeitig steigendem Anspruch der Patienten stellt Gesundheitsorganisationen vor einige Herausforderungen. Hier bieten die Digitalisierung und der Einsatz moderner Technologien wie Künstlicher Intelligenz oder Machine Learning zahlreiche Chancen und Potentiale zur Effizienzsteigerung, Fehlerreduktion und somit Verbesserung der Patientenbehandlung.

Arzt verwendet eine medizinische Applikation auf Cloud-Basis auf dem Smartphone, im Hintergrund unterhalten sich medizinische Fachkräfte
Abbildung 1: Digital Health Solutions mit Azure Health Data Services für eine optimale und zukunftsfähige Patientenversorgung

Nutzung medizinischer Daten als Basis für eine optimierte Patientenversorgung

Grundlage für die Nutzung dieser Technologien und für eine zukunftsfähige prädiktive und präventive Versorgung sind medizinische Daten. Diese finden sich bereits heute überall. Die meisten Akteure im Gesundheitswesen und die im Einsatz befindlichen Medizingeräte speichern diese aber immer noch on-premise, was zu Millionen von isolierten medizinischen Datensätzen führt. Um einen vollumfänglichen Überblick über die Krankheitsgeschichte eines Patienten zu erhalten und darauf aufbauend Behandlungspläne im Sinne einer patientenzentrierten Behandlung zu erstellen und übergreifende Erkenntnisse aus diesen Datensätzen ableiten zu können, müssen Organisationen Gesundheitsdaten aus verschiedenen Quellen integrieren und synchronisieren.

Um die Entwicklung von Ökosystemen im Gesundheitswesen zu unterstützen, bieten die großen globalen Public Cloud Provider (Microsoft Azure, Amazon Web Service und Google Cloud Platform) zunehmend spezielle SaaS- und PaaS-Dienste für den Healthcare-Sektor an, die Unternehmen eine Basis für ihre eigenen Lösungen bieten können. Durch unsere Erfahrung bei ZEISS Digital Innovation als Implementierungspartner der Carl Zeiss Meditec AG und von Kunden außerhalb der ZEISS Gruppe haben wir bereits früh erkannt, dass Microsoft ein besonders leistungsfähiges Healthcare-Portfolio bietet und dieses weiter stark ausbaut. Das wurde auch auf der diesjährigen Ignite wieder deutlich.

Screenshot aus einem Video, in dem sich zwei Personen virtuell zu einem Thema unterhalten
ZEISS Digital Innovation (re.) bei der Ignite 2021 im Gespräch darüber, wie man langfristigen Nutzen aus Gesundheitsdaten mit Microsoft Cloud for Healthcare ziehen kann. (Hier geht’s zum vollständigen Video)

Medizinische Datenplattformen auf Basis von Azure Health Data Services

Eine Möglichkeit für den Aufbau einer solchen medizinischen Datenplattform als Basis eines Ökosystems ist die Nutzung vonAzure Health Data Services. Mit Hilfe dieser Services lassen sich Speicherung, Zugriff und Verarbeitung von medizinischen Daten interoperabel und sicher gestalten. Tausende Medizingeräte können miteinander verbunden werden und die so generierten Daten von zahlreichen Anwendungen skalierbar und robust genutzt werden. Da es sich bei den Azure Health Data Services um PaaS-Lösungen handelt, sind sie „out of the box“ nutzbar und werden vollständig von Microsoft entwickelt, verwaltet und betrieben. Sie sind dadurch außerdem standardmäßig sicher und compliant und mit geringem Aufwand hoch verfügbar. Dies senkt den Implementierungsaufwand und damit auch die Kosten erheblich.

Auch die Carl Zeiss Meditec AG setzt bei der Entwicklung seines digitalen, datengesteuerten Ökosystems auf Azure Health Data Services. Das gemeinsam mit der ZEISS Digital Innovation entwickelte ZEISS Medical Ecosystem verbindet Geräte und klinische Systeme über eine zentrale Datenplattform mit Applikationen und schafft so einen Mehrwert auf verschiedenen Ebenen zur Optimierung des klinischen Patientenmanagements.

Als zentrale Schnittstelle für die Geräteanbindung wird hier der DICOM Service der Azure Health Data Services genutzt. Da DICOM ein offener Standard zur Speicherung und zum Austausch von Informationen im medizinischen Bilddatenmanagement ist, kommunizieren ein Großteil der medizinischen Geräte, die Bilddaten generieren, mithilfe des DICOM-Protokolls. Durch eine erweiterbare Konnektivitätslösung, die auf Azure IoT Edge basiert, können diese Geräte unter Verwendung des DICOM-Standards direkt mit der Datenplattform in Azure verbunden werden. Dies ermöglicht die Integration einer Vielzahl von Geräten, die bereits seit Jahren bei Kunden im Einsatz sind, in das Ökosystem. Dies erhöht die Akzeptanz und sorgt dafür, dass mehr Daten in die Cloud fließen und weiterverarbeitet werden können, um klinische Anwendungsfälle zu ermöglichen und neue Verfahren zu entwickeln.

Als zentraler Data Hub der Plattform dient Azure API for FHIR®. Dort werden alle Daten des Ökosystems strukturiert gespeichert und miteinander verknüpft, um sie zentral auffindbar zu machen und den Applikationen zur Verfügung zu stellen. HL7® FHIR® (Fast Healthcare Interoperability Resources) bietet ein standardisiertes und umfassendes Datenmodell für Daten im Gesundheitsweisen. Damit können nicht nur einfache und robuste Schnittstellen zu den eigenen Anwendungen umgesetzt werden, sondern auch die Interoperabilität mit Drittsystemen wie EMR-Systemen (Electronic Medical Record), Krankenhausinformationssystemen oder der elektronischen Patientenakte sichergestellt werden. Die Daten aus den medizinischen Geräten, historische Messdaten aus lokalen PACS-Lösungen und Informationen aus anderen klinischen Systemen werden nach dem Hochladen automatisch weiterverarbeitet, strukturiert und zentral in Azure API for FHIR® aggregiert. Dies ist ein Schlüsselfaktor, um mehr wertvolle Daten für klinische Anwendungsfälle zu sammeln und den Kunden ein nahtlos integriertes Ökosystem zu bieten.

Schematische Darstellung des Aufbaus einer medizinischen Datenplattform mit Azure Healthcare APIs
Abbildung 2: Aufbau einer medizinischen Datenplattform mit Azure Health Data Services

Erfolgreiche Zusammenarbeit von ZEISS Digital Innovation und Microsoft

Als Early Adopter der Azure Health Data Services arbeiten unsere Entwicklungsteams bei ZEISS Digital Innovation eng mit der Produktgruppe der Azure Health Data Services im Microsoft Headquarter in Redmond, USA, zusammen und gestalten so die Services im Sinne unserer Kunden mit. In regelmäßigen Co-Creation-Sessions zwischen den Teams der ZEISS Digital Innovation und Microsoft wird das Lösungsdesign für aktuell implementierte Features der Azure Health Data Services diskutiert. So können wir sicherstellen, dass auch die komplexesten derzeit bekannten Anwendungsfälle berücksichtigt werden.

We are working very closely with ZEISS Digital Innovation to shape Azure’s next generation health services alongside their customer needs. Their strong background in the development of digital medical products for their customers is a core asset in our collaboration and enables the development of innovative solutions for the healthcare sector.

Steven Borg (Director, Medical Imaging at Microsoft)

Profitieren auch Sie von unserem Know-how und kontaktieren Sie uns. Wir erarbeiten gemeinsam die Vision Ihrer innovativen Lösung und unterstützen Sie bei der Implementierung.

Dieser Beitrag wurde verfasst von:

Elisa Kunze

Elisa Kunze ist seit 2013 bei der ZEISS Digital Innovation tätig und konnte dort bei ihren unterschiedlichen Tätigkeiten im Sales und Marketing viele Projekte, Teams und Unternehmen in unterschiedlichsten Branchen kennenlernen und begleiten. Heute betreut sie als Key Account Managerin ihre Kunden im Health Sector bei der Umsetzung ihrer Projektvisionen.

Alle Beiträge des Autors anzeigen

Serverless Computing: Ein Überblick zu den Services von Amazon und Microsoft

Im Serverless-Modell werden Anwendungskomponenten wie Datenbanken oder Komponenten zur Datenverarbeitung automatisch und bedarfsabhängig vom Cloud-Provider zur Verfügung gestellt und betrieben. Die Verantwortung des Cloud-Nutzers liegt darin, diese Ressourcen zu konfigurieren – etwa durch eigenen Code oder anwendungsspezifische Parameter – und sie zu kombinieren.

Kosten fallen nach verbrauchten Kapazitäten an und die Skalierung erfolgt automatisch auf Basis der Last. Bereitstellung, Skalierung, Wartung, Hochverfügbarkeit und Verwaltung von Ressourcen liegen in der Verantwortung des Cloud-Providers.

Serverless eignet sich besonders für schwer vorhersehbare oder kurzlebige Arbeitslasten, für Automatisierungsaufgaben oder Prototypen. Serverless ist weniger ideal für ressourcenintensive, langlebige und planbare Aufgaben, da in diesem Fall die Kosten signifikant höher sein können als bei selbstverwalteten Ausführungsumgebungen.

Building Blocks

Im Rahmen eines Serverless-Adventskalenders wurden die Cloud-Services von AWS und Azure gegenübergestellt. Die Türchen öffnen sich unter dem Hashtag #ZEISSDigitalInnovationGoesServerless.

KategorieAWSAzure
COMPUTE
Serverless Function
AWS LambdaAzure Functions
COMPUTE
Serverless Containers
AWS Fargate
Amazon ECS/EKS
Azure Container Instances / AKS
INTEGRATION
API Management
Amazon API GatewayAzure API Management
INTEGRATION
Pub-/Sub-Messaging
Amazon SNSAzure Event Grid
INTEGRATION
Message Queues
Amazon SQSAzure Service Bus
INTEGRATION
Workflow Engine
AWS Step FunctionsAzure Logic App
INTEGRATION
GraphQL API
AWS AppSyncAzure Functions mit Apollo Server
STORAGE
Object Storage
Amazon S3Azure Storage Account
DATA
NoSQL-Datenbank
Amazon DynamoDBAzure Table Storage
DATA
Storage Query Service
Amazon Aurora ServerlessAzure SQL Database Serverless
SECURITY
Identity Provider
Amazon CognitoAzure Active Directory B2C
SECURITY
Key Management
AWS KMSAzure Key Vault
SECURITY
Web Application Firewall
AWS WAFAzure Web Application Firewall
NETWORK
Content Delivery Network
Amazon CloudFrontAzure CDN
NETWORK
Load Balancer
Application Load BalancerAzure Application Gateway
NETWORK
Domain Name Service
Amazon Route 53Azure DNS
ANALYTICS
Data Stream
Amazon KinesisAnalytics
ANALYTICS
ETL Service
AWS GlueAzure Data Factory
ANALYTICS
Storage Query Service
Amazon AthenaAzure Data Lake Analytics

Einen Überblick zu den genannten Services und ihren Eigenschaften sowie einige beispielhafte Architekturmuster haben wir in Form eines Posters zusammengetragen. Dieser Überblick ermöglicht einen leichten Einstieg in das Thema Serverless-Architektur.

Abbildung 1: Vorschau Poster „Serverless Computing“

Gerne senden wir Ihnen das Poster auch in Originalgröße (1000 x 700 mm) zu. Schreiben Sie uns dazu einfach eine E-Mail mit Ihrer Adresse an info.digitalinnovation@zeiss.com. Beachten Sie hierzu bitte unsere Datenschutzhinweise.

Best Practices für Serverless-Funktionen

Jede Funktion sollte nur eine Sache tun (Single Responsibility Principle). Dies verbessert Wartbarkeit und Wiederverwendbarkeit. Speicherkapazität, Zugri­ffsrechte und Timeout-Einstellung können gezielter konfiguriert werden.

Mit der Erhöhung des zugewiesenen Speichers einer Lambda-Funktion werden auch CPU‑ und Netzwerkkapazität erhöht. Ein optimales Verhältnis aus Ausführungszeit und Kosten sollte per Benchmarking gefunden werden.

Eine Funktion sollte keine weitere Funktion synchron aufrufen. Das Warten führt zu unnötigen Kosten und erhöhter Kopplung. Stattdessen ist asynchrone Verarbeitung, z. B. über Message Queues, einzusetzen.

Das Deployment-Paket einer Funktion sollte so klein wie möglich sein. Auf große externe Bibliotheken ist zu verzichten. Das verbessert die Kaltstartzeit. Wiederkehrende Initialisierungen von Abhängigkeiten sollten außerhalb der Handler-Funktion stattfinden, damit sie nur einmalig beim Kaltstart ausgeführt werden müssen. Es ist ratsam, betriebliche Parameter über Umgebungsvariablen einer Funktion abzubilden. Das verbessert die Wiederverwendbarkeit.

Die Zugriffsberechtigungen auf andere Cloud-Ressourcen sind für jede Funktion individuell und so restriktiv wie möglich zu definieren. Zustandsbehaftete Datenbankverbindungen sind zu vermeiden. Stattdessen sollten Service-APIs verwendet werden.

Schau mir in die Augen – Anwendungsüberwachung mit Azure Application Insights

Mit Application Insights liefert Microsoft einen Dienst zur Anwendungsüberwachung für Entwicklung und DevOps. Damit kann so gut wie alles erfasst werden – von Antwortzeiten und -raten über Fehler und Ausnahmen, Seitenaufrufe, Benutzer (-Sitzungen), Backend bis hin zu Desktop-Anwendungen.

Die Überwachung beschränkt sich keinesfalls nur auf Webseiten. Application Insights lässt sich auch bei Webdiensten sowie im Backend einsetzen. Sogar Desktop-Anwendungen lassen sich überwachen. Anschließend können die Daten über unterschiedliche Wege analysiert und ausgewertet werden (siehe Abbildung 1).

Einsatzmöglichkeiten von Application Insights
Abbildung 1: Einsatzmöglichkeiten von Application Insights (Quelle: https://docs.microsoft.com/de-de/azure/azure-monitor/app/app-insights-overview)

Loggen

Als Ausgangsbasis wird eine Azure Subscription mit einer Application-Insights-Instanz benötigt. Ist diese angelegt, findet man in der Übersicht den sogenannten Instrumentation Key – dieser fungiert als Connection String.

Sobald die Instanz bereitgestellt wurde, kann auch schon mit der Implementierung begonnen werden. Programmiertechnisch ist man hier keinesfalls auf Azure-Ressourcen oder .Net beschränkt. Microsoft unterstützt eine Vielzahl an Sprachen und Plattformen.

Als Beispiel dient hier eine kleine .Net-Core-Konsolenanwendung. Dazu muss lediglich das NuGet-Paket Microsoft.ApplicationInsights eingebunden werden und schon kann es losgehen.

Als erstes wird ein Telemetry Client erstellt. Hier wird einfach der passende Instrumentation Key aus der eigenen Application-Insights-Instanz eingefügt und schon ist die Anwendung bereit für die ersten Log-Einträge.

  • Mit Trace erzeugt man einen einfachen Trace-Log-Eintrag mit entsprechender Message und passendem Severity Level.
  • Events eignen sich für strukturierte Logs, welche sowohl Text als auch numerische Werte enthalten können.
  • Metrics sind dagegen ausschließlich numerische Werte und dienen daher vor allem zur Erfassung regelmäßiger Ereignisse.
static void Main(string[] args)
{
Console.WriteLine("Schau mir in die Augen");

       var config = TelemetryConfiguration.CreateDefault();
       config.InstrumentationKey = "INSTRUMENTATIONKEY";
       var tc = new TelemetryClient(config);

       // Track traces
       tc.TrackTrace("BlogTrace", SeverityLevel.Information);

       // Track custom events
       var et = new EventTelemetry();
       et.Name = "BlogEvent";
       et.Properties.Add("Source", "console");
       et.Properties.Add("Context", "Schau mir in die Augen");
       tc.TrackEvent(et);

       // Track custom metric
       var mt = new MetricTelemetry();
       mt.Name = "BlogMetric";
       mt.Sum = new Random().Next(1,100);
       tc.TrackMetric(mt);

       tc.Flush();
}

Als Hinweis sei noch erwähnt, dass die Log-Einträge mit bis zu fünf Minuten Verzögerung im Application Insights erscheinen.

Zusammenspiel mit NLog

Application Insights lässt sich mit wenigen Schritten auch in eine bestehende NLog-Konfiguration einbinden.

Dazu müssen das NuGet-Paket Microsoft.ApplicationInsights.NLogTarget installiert und danach die NLog-Konfiguration um folgende Einträge erweitern werden:

  • Extensions mit dem Verweis auf die Application Insights Assembly hinzufügen
  • Neues Target vom Typ Application Insights Target (hier wieder den eigenen Instrumentation Key angeben)
  • Neue Regel mit Ziel auf das Application Insights Target
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      throwConfigExceptions="true">

  <extensions>
    <add assembly="Microsoft.ApplicationInsights.NLogTarget" />
  </extensions>

  <targets>
    <target name="logfile" xsi:type="File" fileName="log.txt" />
    <target name="logconsole" xsi:type="Console" />
    <target xsi:type="ApplicationInsightsTarget" name="aiTarget">
      <instrumentationKey>INSTRUMENTATIONKEY</instrumentationKey>
      <contextproperty name="threadid" layout="${threadid}" />
    </target>
  </targets>

  <rules>
    <logger name="*" minlevel="Info" writeTo="logconsole" />
    <logger name="*" minlevel="Debug" writeTo="logfile" />
    <logger name="*" minlevel="Trace" writeTo="aiTarget" />
  </rules>
</nlog>

Auswertung

Die Auswertung erfolgt anschließend über das Application-Insights-Portal. Sämtliche Logs finden sich anschließend unter Protokolle in der jeweiligen Tabelle (siehe Abbildung 2).

Auswertungen mit Application Insights
Abbildung 2: Auswertungen mit Application Insights

Die in der Konsolenanwendung erzeugten Trace-Logs können der Tabelle traces entnommen werden. Abfragen werden mit der Kusto Query Language (KQL) formuliert. Die Traces aus dem obigen Beispiel können über folgende Query abgefragt werden:

traces
| where message contains "BlogTrace"

Die geloggten Metriken lassen sich mit folgender Abfrage auch grafisch als Liniendiagramm darstellen (siehe Abbildung 3):

customMetrics
| where timestamp >= ago(12h)
| where name contains "Blog"
| render timechart 
Grafische Darstellung der geloggten Metriken
Abbildung 3: Grafische Darstellung der geloggten Metriken

Dashboards & Warnungsregeln

Um Unregelmäßigkeiten frühzeitig zu erkennen, können individuelle Dashboards und Warnungsregeln angelegt werden. Im Falle der oben verwendeten Metriken kann man das Diagramm an ein freigegebenes Dashboard anheften. Dies lässt sich mit weiteren Abfragen beliebig fortsetzen, bis die gewünschten Informationen zu einer Übersicht zusammengetragen sind.

Das folgende Dashboard zeigt die Metrik der Konsolenanwendung. Gleichzeitig sind darin auch exemplarisch Informationen über Serveranfragen, fehlerhafte Anfragen, Antwortzeiten sowie Leistung und Verfügbarkeit enthalten (siehe Abbildung 4).

Informationen auf einen Blick auf dem Dashboard
Abbildung 4: Informationen auf einen Blick auf dem Dashboard

Hat man das Dashboard mal nicht im Blick und es kommt zu Anomalien, kann man sich auch über Warnungsregeln direkt per E-Mail oder SMS informieren lassen.

Einzelne Warnungsregeln lassen sich über den Menüpunkt Warnungen im Application-Insights-Portal anlegen und verwalten. Eine Warnungsregel besteht aus einer Signallogik (Bedingung) sowie einer Aktionsgruppe.

Bei der Bedingung wird ein Signal, z. B. eine Metrik, ausgewählt und mit einem Schwellwert versehen: „traces größer als 80“. Erhält man nun innerhalb eines definierten Zeitraumes mehr als 80 trace-Einträge, wird die Warnung ausgelöst.

Die Aktionsgruppe legt abschließend fest, was im Falle einer Warnung zu tun ist. Hier lassen sich einfache Hinweis-E-Mails oder SMS an festgelegte Personen verschicken oder komplexere Handlungen programmatisch über Runbooks, Azure Functions, Logik-Apps oder Webhooks abbilden (siehe Abbildung 5).

Verschiedene Aktionstypen in einer Aktionsgruppe
Abbildung 5: Verschiedene Aktionstypen in einer Aktionsgruppe

REST API

Besteht der Bedarf, die Daten auch außerhalb von Application Insights zu verarbeiten, können diese über eine REST API abgefragt werden.

Die URL für die API-Aufrufe setzt sich aus einem Basis-Teil und der gewünschten Operation zusammen. Operationen sind metrics, events oder query. Dazu muss noch ein API-Key als „X-API-Key“ HTTP-Header übergeben werden:

https://api.applicationinsights.io/v1/apps/{app-id}/{operation}/[path]?[parameters]

Die App-ID ist in den Settings unter API Access zu finden.

Abbildung 6: URL der API-Aufrufe
Abbildung 6: URL der API-Aufrufe (Quelle: https://dev.applicationinsights.io/quickstart)

Um bei den oben beschriebenen Metriken zu bleiben, hier der API-Aufruf mit query-Operation für die Anzahl aller Einträge der letzten 24 Stunden:

https://api.applicationinsights.io/v1/apps/{}app-id}/query?query=customMetrics | where timestamp >= ago(24h) | where name contains „Blog“ | summarize count()

Das Ergebnis kommt im JSON-Format zurück:

{
    "tables": [
        {
            "name": "PrimaryResult",
            "columns": [
                {
                    "name": "count_",
                    "type": "long"
                }
            ],
            "rows": [
                [
                    13
                ]
            ]
        }
    ]
}

Fazit

Wie anhand dieses kleinen Beispiels zu sehen ist, lässt sich ein zentralisiertes Logging mit Hilfe von Application Insights in wenigen Schritten aufbauen und verwalten. Neben der schnellen und einfachen Integration ist auch die automatisierte Infrastruktur von Vorteil. Man muss sich um kein Hosting kümmern und sollte die Last einmal steigen, skaliert Application Insights automatisch.

Greetings from Santa Cloud

Was uns Santa über die Cloud zu berichten hat …

Mit unserer diesjährigen Grußaktion möchten wir das Thema Cloud auch in Ihre Weihnachtsstube bringen. Vielleicht haben Sie schon einmal darüber nachgedacht, für Ihre digitalen Lösungen Cloud-Plattformen wie AWS oder Azure zu nutzen. Vielleicht nutzen Sie auch bereits erste Anwendungen in der Cloud oder sie haben bisher noch gar keine Berührungspunkte mit diesem Thema.

Santa Cloud möchte Ihnen eine klare Botschaft übermitteln:

Statt monolithische Anwendungen auf Application Servern zu entwickeln und zu betreiben, sollten Sie sich auf die Lieferung wertschöpfender Features für Ihre Nutzer und Ihr Geschäft konzentrieren.“

Ein fröhlicher Weihnachtsmann sitzt auf einer Wolke.

Durch den Einsatz skalierbarer Cloud-Lösungen erhalten Sie mehr Flexibilität und steigern Ihre Innovationskraft. Möglicherweise ist unser kleiner Weihnachtsgruß ein erster Anreiz für Sie. Santa Cloud würde sich freuen!

Was wir gemeinsam Gutes tun wollen …

Doch nicht nur Ihnen wollen wir neue Möglichkeiten eröffnen. Deshalb widmen wir uns in diesem Jahr einem ganz besonderen Projekt der Kindernothilfe, welches “Kleinen Herzen große Chancen gibt”. Mit der 1+3=4 Weihnachtsaktion werden öffentliche Zuschüsse wie z.B. vom Bundesministerium für wirtschaftliche Zusammenarbeit und Entwicklung (BMZ) beantragt. Durch diese Kofinanzierung wird die Spende vervierfacht. 

Mit unterschiedlichen Projekten bekämpft die Kindernothilfe den Hunger weltweit. So wird beispielsweise durch die Vermittlung von Wissen gezeigt, wie sich mehr Ernte-Erträge erbringen lassen. Es entstehen neue Einnahmequellen durch den Aufbau von Schafs-, Ziegen- oder Hühnerzuchten und es werden neue Möglichkeiten für den Anbau von Pflanzen, insbesondere von Kaffee, geschaffen.

Blaues Kreuz der Kindernothilfe

Weihnachtsaktion
“1 + 3 = 4”

Und wie Sie uns und Santa Cloud dabei helfen können …

Wir haben Ihnen einen kleinen Holzanhänger geschickt. Senden Sie einfach ein Foto von dem Anhänger an Ihren Ansprechpartner und zeigen uns, wo Santa Cloud Sie zur Weihnachtszeit oder über Weihnachten begleitet. Der Kreativität sind dabei keine Grenzen gesetzt.

Wir sammeln Ihre Bilder und spenden für die ersten 50 eingesendeten Fotos jeweils zehn Euro an die Kindernothilfe. Mit Ihrer Hilfe können wir unser Spendenziel von 2.000 Euro erreichen. Also machen Sie mit.

Einsendeschluss ist der 31. Januar 2020. Wir freuen uns über jede Rückmeldung!

Grün-weiß-gestreiftes Geschenk mit roter Schleife
Grünes Geschenk mit weißen Punkten und roter Schleife

Wir danken Ihnen für Ihre Unterstützung und wünschen Ihnen ein gesundes, frohes und erfolgreiches Jahr 2020!

Cloud Special Day – OOP 2019

Nicht nur Start-Ups sondern auch große und etablierte Unternehmen setzen immer stärker auf Cloud-Lösungen, um ihre Wertschöpfungskette zu digitalisieren. Doch welche technischen Möglichkeiten stehen auf Cloud-Plattformen wie Amazon Webservices und Microsoft Azure zur Verfügung, um geschäftskritische Anwendungen z. B. im medizintechnischen Umfeld zu entwickeln? Genau diese Fragen haben wir als Saxonia Systems AG (seit 03/2020 ZEISS Digital Innovation) im Rahmen unseres Cloud Special Days auf der OOP 2019 in München gemeinsam mit u. a. der Carl Zeiss Meditec AG beantwortet.


Vortrag 1

Sicher und compliant: Wie man eine medizinische Cloud-Plattform aufbaut​

Im ersten Beitrag boten Thorsten Bischoff (Carl Zeiss Meditec AG) und Dirk Barchmann (Saxonia Systems AG) einen Einblick in die Entwicklung einer bereits international eingeführten Mobil-Anwendung: Diese erlaubt es Ärzten, Patienten- und OP-Informationen mithilfe einer Cloud-Plattform auf Basis von Amazon Webservices (AWS) zwischen der Arztpraxis und einem entfernten OP-Saal zu synchronisieren. Das Hauptaugenmerk wurde dabei auf die Sicherheit der zu übermittelnden und zu speichernden Daten gelegt (encryption in transit / at rest), wobei es eine Vielzahl von Industrienormen und gesetzlichen Vorschriften in den verschiedenen Zielländern zu beachten und zu erfüllen galt. Beispiele dafür sind die DSGVO in Europa oder die HIPAA Privacy, Security, Transactions Rule in den USA sowie die weltweit anerkannten ISO-27001-Standards. Ein zentraler Lösungsbaustein sind bereits geprüfte und zertifizierte Cloud-Dienste wie etwa der Amazon Key Management Service (KMS) zur Verschlüsselung von Daten oder der Amazon Simple Storage Service (S3) zu deren Speicherung. Aber nicht nur technische Fragestellungen mussten geklärt werden – auch organisatorische und prozessuale Anpassungen wurden aufgrund der Nutzung von Cloud-Diensten vorgenommen, um die notwendigen Zertifizierungen zu erreichen.


Vortrag 2

Vor- und Nachbereitung von Katarakt OPs in der Cloud

Im darauffolgenden Vortrag von Rainer Scheubeck (Carl Zeiss Meditec AG) und Alexander Casall (Saxonia Systems AG) wurde davon berichtet, wie eine Lösung zur Vorbereitung, Planung und Nachbereitung von Augenoperationen in der Cloud entwickelt und in Produktion gebracht wurde.

Neben der Möglichkeit, dass Updates an zentraler Stelle ausgerollt und Daten (z. B. Stammdaten) zentral gepflegt werden können, war die dynamische Skalierbarkeit der Anwendung ein Argument für eine Cloud-basierte Lösung. Um die Nachhaltigkeit und Erweiterbarkeit der Anwendung sicherzustellen, werden die Komponenten der Anwendung als Docker-Container auf Basis der Cluster-Management-Lösung Kubernetes betrieben. Die verwendeten Cloud-Native-Dienste, wie etwa Azure Kubernetes Service und Azure CosmosDB, sind über standardisierte und verbreitete Schnittstellen angebunden. Dieses Vorgehen erlaubt es, die Anwendung relativ unabhängig vom Public-Cloud-Provider zu betreiben und ermöglicht es, den gewählten Provider ohne größeren Aufwand zu wechseln. Da es sich bei der Anwendung um ein Medizinprodukt handelt, ist deren Entwicklung und Distribution durch verschiedene Institutionen reguliert, so dass in der Konzeption und Entwicklung besonderer Wert auf Infrastruktur und Testautomatisierung gelegt wurde.


Vortrag 3

Neue Wege mit der Cloud erforschen

Dr. Andreas Zeidler (Carl Zeiss Meditec AG) und Leo Lindhorst (Saxonia Systems AG) stellten im dritten Vortrag die aktuellen Erkenntnisse eines F&E-Projekts der Carl Zeiss Meditec AG vor. Ziel ist es zu bewerten, wie bestehende On-Premises-Lösungen auf AWS migriert werden können. Hintergrund ist der steigende Bedarf der Mediziner an rechenintensiven Analysen, für die die bestehende On-Premises-Infrastruktur zu schwach ist. Für die Bewertung werden auf Basis des Prototyps einer medizinischen Cloud-Plattform mehrere minimale Produkte entwickelt, um die verschiedenen Ansätze und Herausforderungen bei einer Cloud-Migration zu explorieren. Dabei kommen moderne Konzepte und Technologien wie etwa Datalake oder Serverless-Architekturen zum Einsatz.


Vortrag 4

Private Cloud – Eine Alternative?

Für Fälle in denen eine Transformation zu einer Public-Cloud-Infrastruktur nicht möglich ist, kann eine Private-Cloud eine Alternative sein. Günther Buchner (Saxonia Systems AG) stellte im letzten Vortrag des Tages seine Erfahrungen bezüglich der Einführung einer OpenStack basierten Private-Cloud-Infrastruktur in einem Großunternehmen vor. Dabei handelt es sich um eine Infrastruktur, die zentral vom Unternehmen für verschiedene Parteien in der Organisation auf eigener Hardware betrieben wird. Diese Infrastruktur besitzt Cloud-Eigenschaften wie bedarfsorientiert skalierbare Bereitstellung und Abrechnung von Ressourcen, Hochverfügbarkeit und zentrale Implementierung von Querschnittsfunktionalitäten. Im beschriebenen Szenario kam OpenStack als Basistechnologie zum Einsatz.

Open Stack bietet einen Infrastructure as a Service (IaaS) Layer, auf dessen Basis im vorgestellten Projekt Cloud Foundry als Platform as a Service (PaaS) Dienst betrieben wird. Die Kosten werden, analog zur Public-Cloud, bedarfsabhängig anhand eines Kostenschlüssels auf die Abteilungen umgelegt, welche die Private-Cloud-Dienste nutzen. Die Einführung einer solchen komplexen IT-Infrastruktur ist zwar mit einem nicht unerheblichen Aufwand verbunden, bietet allerdings auch eine Reihe von Vorteilen: So können Unternehmen dadurch Agilität und Flexibilität in der Softwareentwicklung mit Cloud-Technologien steigern, ohne abhängig von Public-Cloud-Providern zu sein oder sich mit der komplexeren Datenschutzsituation bei Anbietern außerhalb der eigenen Organisation auseinandersetzen zu müssen.