<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Go Live on Azure</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/golive/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/golive/feed.xml</link>
    <description />
    <lastBuildDate>Tue, 16 Apr 2019 05:08:09 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Project FlashCast – upload and consume blobs simultaneously</title>
      <link>https://docs.microsoft.com/archive/blogs/golive/project-flashcast-upload-and-consume-blobs-simultaneously</link>
      <pubDate>Wed, 25 Jul 2018 08:33:09 GMT</pubDate>
      <dc:creator><![CDATA[Greg Oliver (CSE)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/golive/?p=1555</guid>
      <description><![CDATA[An offhand comment by my business counterpart went something like this: "the partner wants to be...]]></description>
      <content:encoded><![CDATA[An offhand comment by my business counterpart went something like this: "the partner wants to be able to upload an asset to the cloud and start processing it immediately rather than waiting for it to be fully transmitted." I had done something like this with <a href="https://docs.microsoft.com/en-us/azure/network-watcher/">Azure Network Watcher</a>, <a href="https://docs.microsoft.com/en-us/azure/network-watcher/network-watcher-nsg-flow-logging-overview/">NSG Flow Logs</a> in this project: <a href="https://github.com/Microsoft/AzureNetworkWatcherNSGFlowLogsConnector">Azure Network Watcher NSG Flow Logs Connector</a>. The use case is possible with <a href="https://docs.microsoft.com/en-us/azure/storage/">Azure Blob Storage</a> because of a technical detail: once the block list of an Azure Storage block blob is committed, the blob is readable. Add to this the platform's notification system, <a href="https://docs.microsoft.com/en-us/azure/event-grid/">Azure Event Grid</a>, and we have all of the required elements.

Find the POC here: <a href="https://github.com/sebastus/flashcast">Project FlashCast</a>. It is comprised of two Windows console applications written in C# using Visual Studio 2017. "<a href="https://github.com/sebastus/flashcast">UploadFileConsole</a>" sends a file to <a href="https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction">Azure blob storage</a>, committing each block as it's transmitted. "<a href="https://github.com/sebastus/flashcast">DownloadBlobConsole</a>" receives events in the form of <a href="https://docs.microsoft.com/en-us/azure/storage/queues/storage-queues-introduction">Azure storage queue</a> messages and then reads the uploaded blob block by block accordingly.

There are several ways to consume the <a href="https://docs.microsoft.com/en-us/azure/event-grid/">Azure Event Grid</a> notifications – Azure storage queue is only one of them. There's probably one that fits your needs.

Please add your comments outlining use cases that would be facilitated by this technique.

Cheers!]]></content:encoded>
    </item>
    <item>
      <title>A Power BI Data Analytics Pipeline for ISVs</title>
      <link>https://docs.microsoft.com/archive/blogs/golive/a-power-bi-data-analytics-pipeline-for-isvs</link>
      <pubDate>Thu, 14 Jun 2018 15:13:30 GMT</pubDate>
      <dc:creator><![CDATA[Greg Oliver (CSE)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/golive/?p=1225</guid>
      <description><![CDATA[In this blog I set out an architecture for a data analytics pipeline that starts with an SQL Server...]]></description>
      <content:encoded><![CDATA[In this blog I set out an architecture for a data analytics pipeline that starts with an SQL Server database and ends with a Power BI dashboard. The pipeline can be fully automated so that updates to the data in the core SQL Server DB flow through the pipeline to the dashboard without human intervention – but can be monitored at each step of the way. Most of the provisioning of the pipeline components can be automated as well, making it easy for a software company to set up new customers as they come on board. The code associated with this blog is here: <a href="https://github.com/sebastus/PowerBIPipeline">https://github.com/sebastus/PowerBIPipeline</a>.
<h1>The Architecture</h1>
<img alt="" src="https://msdnshared.blob.core.windows.net/media/2018/06/061418_1509_APowerBIDat1.png" />
<h1>Overview</h1>
Core DB is the customer's operational database. The data warehouse isn't necessarily a large-scale system – it could simply be a SQL Server database or Azure SQL DB that fulfills the role of data warehouse. In this case that means it serves as an isolation layer between the core DB and further abstraction in the analysis services layer. <a href="https://docs.microsoft.com/en-gb/azure/data-factory/">Azure Data Factory</a> hosts a <a href="https://docs.microsoft.com/en-gb/azure/data-factory/concepts-integration-runtime">SQL Server Integration Services Integration Runtime</a> (SSIS IR). This provides worker agents that run your SSIS packages. These packages will run periodically (daily or hourly most likely) copying new and updated data to the data warehouse. The SSIS IR package also can tell the <a href="https://docs.microsoft.com/en-gb/azure/analysis-services/analysis-services-overview">Azure Analysis Services</a> server to process models (copies and refactors data from data warehouse to analysis services model). The PBI reports and dashboards are connected to the Analysis Services model using Direct Query.
<h1>Implementation details</h1>
All components in my test are running in the East US data center. Having everything in one place isn't possible in all locations around the world, so care must be taken to minimize traffic between the elements if they must be in different locations.
<h2>Core DB</h2>
In my test system, the Core DB is a SQL Server VM running in Azure with a copy of the <a href="https://github.com/Microsoft/sql-server-samples/releases/tag/adventureworks">AdventureWorks database</a> installed. If the core database is not in Azure, a network link must be established. These techniques are well known. One option is a <a href="https://azure.microsoft.com/en-us/services/vpn-gateway/">Site-to-Site VPN</a>. Another is <a href="https://azure.microsoft.com/en-us/services/expressroute/">ExpressRoute</a>. Even if the database is in Azure, the vNet is still required to make connectivity to the SSIS IR straightforward. The Core DB can be any database that is supported by SQL Server Integration Services.
<h2>Azure Data Factory</h2>
ADF is a managed cloud service that's built for complex hybrid extract-transform-load (ETL), extract-load-transform (ELT), and data integration projects. I used Version 2 in my test system. The major component used is an SSIS IR as part of ADF. Its job is to host the worker agents that run your ETL packages. It only needs to be up (and costing money) during those times. It can be scaled both up and out to meet speed/number/size of workload needs. One other important component in the solution is an <a href="https://docs.microsoft.com/en-us/azure/data-factory/concepts-pipelines-activities">ADF Pipeline</a>. The ETL package details the work, i.e. specifies which data sources are input and output, says what data to copy, etc. The pipeline orchestrates the work, i.e. says when to run it, what parameters to use, etc.

How many of these are needed? I don't see any need for more than one for reasons of scalability, but if you're operating in multiple regions then one per region makes the best sense.
<h2>Data Warehouse</h2>
In my test system, the Data Warehouse is an <a href="https://docs.microsoft.com/en-gb/azure/sql-database/sql-database-technical-overview">Azure SQL Database</a>. For a software company implementing this pipeline for a group of customers, the Azure SQL DB might be in an <a href="https://docs.microsoft.com/en-gb/azure/sql-database/sql-database-elastic-pool">Elastic Pool</a>. For a company with a terabytes or petabytes sized database, a true data warehouse solution like <a href="https://docs.microsoft.com/en-us/azure/sql-data-warehouse/sql-data-warehouse-overview-what-is">Azure SQL Data Warehouse</a> might be the best fit.

You'll need one per customer for this component. They can be grouped into Elastic Pools on a per region basis, but usually Elastic Pools are allocated with other concerns (such as scale) in mind as well.
<h2>Azure Analysis Services</h2>
AAS is a fully managed platform as a service (PaaS) that provides enterprise-grade data models in the cloud. It allows you to use advanced mashup and modeling features to combine data from multiple data sources, define metrics, and secure your data in a single, trusted <strong>tabular</strong> semantic data model. Not shown in the picture but a very important element of the solution is Visual Studio. <a href="https://docs.microsoft.com/en-us/sql/ssdt/download-sql-server-data-tools-ssdt?view=sql-server-2017">SQL Server Data Tools</a> is an extension to Visual Studio that provides modelling of the analysis services model/database and deploying the model to AAS. If Visual Studio is not installed, selecting <a href="https://docs.microsoft.com/en-us/sql/ssdt/download-sql-server-data-tools-ssdt?view=sql-server-2017"><strong>Install a new SQL Server Data Tools instance</strong></a> installs SSDT with a minimal version of Visual Studio.

Like ADF, one AAS instance per region makes the best sense, though there will be one model/database per customer.
<h1>Provisioning the pipeline</h1>
Basic provisioning of the elements in the pipeline is handled by the PowerShell files in the scripts folder of the <a href="https://github.com/sebastus/PowerBIPipeline">repo</a>. To run them, open a PowerShell command line or the PowerShell ISE and navigate to the repo's scripts folder. 'common.ps1' contains variables specific to your environment, so start by tailoring it to your needs. 'InitializeResources.ps1' executes the script system in the right order while maintaining an operating context. Run it by typing '.\InitializeResources.ps1' at the PowerShell command prompt or by loading that script into the ISE and clicking the F5 button on your keyboard.

From left to right, here are some details about provisioning that you should read before proceeding. Really. If you don't read this, you'll have to start over.

<em>Speaking of starting over, here's a quick note about the script system. At the top of 'common.ps1' is a variable called $index. $index is appended to all globally-unique names in the scripts. I assume that I'm going to have to iterate a few times before I get it right, so I start with $index = '01' and run the scripts. When it fails, I start the delete process for the Azure resource group ('pbiRg01' for example), change $index to '02', make whatever updates I need to the common.ps1 variables or my environment and then start installing again. $index can be anything you want – it doesn't have to be numbers.
</em>
<h2>Virtual Network</h2>
The virtual network facilitates communication between the core DB and the SSIS IR cluster. Outside the context of a vNet/subnet, the IP addresses of the SSIS IR VMs aren't static, so you can't put them into the firewall or NSG rules that protect the core DB. You should put your core DB into one subnet (call it 'one') in the vNet and the SSIS IR into another (call it 'two'). Then you can create a Network Security Group (NSG) protecting subnet 'one' but allowing incoming traffic from subnet 'two'. This way, as the SSIS IR cluster scales up and down, all of the VMs in the cluster will be able to contact the core DB. Details regarding this can be found <a href="https://docs.microsoft.com/en-us/azure/data-factory/join-azure-ssis-integration-runtime-virtual-network">here</a>. The 'InitializeADFandAASandPBI.ps1' script implements this correctly.
<h2>Azure Data Factory</h2>
During provisioning of ADF, the SSIS IR is created but not started. One of the parameters of SSIS IR creation is a Secure Access Signature (SAS) URI for a container in the storage account created by 'InitializeStorage.ps1'. In that container will be a couple of files from the scripts folder: 'main.cmd' and 'processASDatabase.ps1'. These files get loaded onto each of the SSIS IR VMs as they are started (each time they are started). They form a part of the ADF pipeline – making it possible for the pipeline to tell the Azure Analysis Services server to process a database.
<h2>Azure SQL Server</h2>
The provisioning scripts create only the Azure SQL Server, not the Azure SQL Database that is a customer's data warehouse. There is a separate script (NewCustomerDw.ps1) that creates the data warehouse databases because it's run once per customer. 'InitializeSQLServer.ps1' creates the Azure SQL Server and two firewall rules. One of them allows Azure services to contact the server. The other allows your local PC to contact it so you can manage the server.

Regarding server credentials: 'common.ps1' calls the PowerShell cmdlet 'Get-Credential'. This allows you to inject your password into the script system securely.
<h1>Adding a customer</h1>
There are a few assets that are required for each customer. They are:
<ol>
 	<li>Core DB + network configuration allowing access to it</li>
 	<li>Data warehouse database</li>
 	<li>ADF pipeline configured with connection details for the core DB and the customer's data warehouse database</li>
 	<li>Analysis services tabular model, both in Visual Studio and in AAS</li>
</ol>
<h2>Core DB / network</h2>
In my test system, the core DB is a SQL Server VM. It has no internet IP address – only a local subnet address. That subnet ('one') has a network security group rule that allows incoming traffic from subnet 'two' which contains the SSIS IR VMs.
<h2>Data warehouse database</h2>
The data warehouse database is created by 'scripts\NewCustomerDw.ps1'. That script takes as a parameter the name of the database, such as 'customerA'. It uses 'common.ps1' to establish context, so it knows the name and location of the SQL Server and so on. Part of creating the new database is importing a data tier application containing the schema of the data warehouse. <strong>Create that data tier application</strong> and put it in the 'db' folder of the repo. Call it 'dwSchema.bacpac' or fix up 'common.ps1' with the name that you decide to use.
<h2>Analysis services model</h2>
In the repo, I named the analysis services project 'aasTemplate' for a reason. You're going to need one per customer and they're all the same, at least to start with. There is no facility for stamping out copies of them but there is a way and it's documented it in another <a href="#_Replicating_the_Analysis">section below</a>. The first step is to create a template using SSDT by connecting to one of the data warehouse databases, specifying the desired tables, creating relationships and whatever else needs to be there. After following the instructions to replicate the template, open the new project. Opening the project causes a new model to be created in the Azure Analysis Services instance. Find the new model in the Azure portal and copy its name. This name is value needed in the 'dbName' parameter required in the ADF pipeline. Save the project in Visual Studio – you'll need it later if you need to make changes.
<h2>ADF pipeline</h2>
The ADF pipeline has a dependency on the SSIS package exemplified by adfEtl.dtsx in the adf project located in the repo. How that asset was created is the subject of a <a href="#_Creating_the_Process_1">section below</a>.

Each customer's pipeline instance invokes this SSIS package with the appropriate parameters:

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2018/06/061418_1509_APowerBIDat2.png" />

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2018/06/061418_1509_APowerBIDat3.png" />

That pipeline executes an Execute SSIS Package Activity. It requires configuration as well, specifically connection details for the 'source_db' and the 'target_dw'.

<strong>General page:
</strong>

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2018/06/061418_1509_APowerBIDat4.png" />

<strong>Settings page:
</strong>

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2018/06/061418_1509_APowerBIDat5.png" />

<strong>Advanced page:
</strong>

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2018/06/061418_1509_APowerBIDat6.png" />

The Advanced page starts out with only typeProperties. It's the place where you need to put the 'source_db' and 'target_dw' connection details. Here's a more complete sample:

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2018/06/061418_1509_APowerBIDat7.png" />
<h1>Replicating the Analysis Services Model Template</h1>
One approach to this is programmatic. The docs are <a href="https://docs.microsoft.com/en-us/sql/analysis-services/tabular-model-programming-compatibility-level-1200/introduction-to-the-tabular-object-model-tom-in-analysis-services-amo?view=sql-analysis-services-2017">here</a>. An alternate approach is to edit a few project files in a text editor. It's a little hacky, but very quick and accurate.

NOTE: In the following, references to 'CustomerA' should match up with the name given to the data warehouse database <a href="#_Data_warehouse_database">above</a>.
<ol>
 	<li>Copy the 'aas' project folder. Rename the new folder something like 'aasCustomerA'.</li>
 	<li>
<div>File aasTemplate.smproj</div>
<ol>
 	<li>Rename the file to something like 'aasCustomerA.smproj'.</li>
 	<li>Change &lt;PropertyGroup&gt;.&lt;Name&gt; from 'aasTemplate' to something like 'aasCustomerA'.</li>
 	<li>Change all instances of &lt;PropertyGroup&gt;.&lt;DeploymentServerDatabase&gt; to something like 'aasCustomerA'.</li>
 	<li>Change all instances of &lt;PropertyGroup&gt;.&lt;DeploymentServerName&gt; to match your AAS server name.</li>
</ol>
</li>
 	<li>
<div>File Model.bim</div>
<ol>
 	<li>Change all instances of 'dwCustomerX' to something like 'dwCustomerA'. This is the data warehouse database name and must match <a href="#_Data_warehouse_database">above</a>.</li>
</ol>
</li>
 	<li>
<div>File Model.bim_xxx.settings</div>
<ol>
 	<li>Change &lt;ModelUserSettings&gt;.&lt;ServerName&gt; to match your AAS server name.</li>
 	<li>Change &lt;ModelUserSettings&gt;.&lt;DatabaseName&gt; to simply 'aasCustomerA'. This is the analysis services database name. It does not need to match anything.</li>
</ol>
</li>
 	<li>In Visual Studio, right-click the solution and Add, Existing Project. Select 'aasCustomerA.smproj'.</li>
 	<li>Open Model.bim in the added project. You may have to authenticate to the AAS server.</li>
 	<li>Process the model. This will involve authenticating to the data warehouse database. Save the solution.</li>
 	<li>Over time, there will be more and more AAS projects – one per customer – and hopefully a lot of them.</li>
 	<li>In the Azure Portal, take a look at your AAS server. You will see a new database/model for CustomerA. Congrats!</li>
</ol>
<h1>Creating the Process Analysis Services Model task</h1>
As each new customer is added, an SSIS Activity is created to encapsulate the parameters specific to the new customer. Some of the parameters are specified for convenience; others are needed to pass down to the PowerShell script 'processASDatabase.ps1'.

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2018/06/061418_1509_APowerBIDat8.png" />

The highlighted item is built in another dialog: (building it there creates it here)

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2018/06/061418_1509_APowerBIDat9.png" />

On the Process page of the Execute Process Task Editor, the Arguments and WorkingDirectory expressions are evaluated and filled in based on editing them on the Expressions page:

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2018/06/061418_1509_APowerBIDat10.png" />

The arguments are structured so the command passes them into the PowerShell script:

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2018/06/061418_1509_APowerBIDat11.png" />

Once you have this pipeline working, you can replace elements in it to better fit your circumstances. For example, maybe you want to use an <a href="https://docs.microsoft.com/en-us/azure/sql-data-warehouse/sql-data-warehouse-overview-what-is">Azure SQL Data Warehouse</a>. Or you might want to use a SQL Server VM to host your SSIS and SSAS functions. And of course, you can use whatever data sources you want for the Core DB, such as Oracle or MySQL.

Cheers!]]></content:encoded>
    </item>
    <item>
      <title>Bootstrap your Container-Based Azure Function</title>
      <link>https://docs.microsoft.com/archive/blogs/golive/bootstrap-your-container-based-azure-function</link>
      <pubDate>Mon, 30 Apr 2018 16:17:24 GMT</pubDate>
      <dc:creator><![CDATA[Greg Oliver (CSE)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/golive/?p=1025</guid>
      <description><![CDATA[This blog builds on this Azure docs document, but starts with my own code rather than a pre-canned...]]></description>
      <content:encoded><![CDATA[This blog builds on this <a href="https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-function-linux-custom-image">Azure docs document</a>, but starts with my own code rather than a pre-canned solution. The solution is simple: it's a function app with a single function that is triggered by event hub content. But it's enough to demonstrate how to create a new container-based function app using the new (in preview) functions runtime v2.

Full disclosure: this blog was written in April of 2018. I used Visual Studio 2017 to prototype the function. I used an Azure-based Ubuntu 17.10 VM as my test bed.

Start by creating a new Azure Functions Function App:

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2018/04/043018_1600_Bootstrapyo1.png" />

Leave off the offered triggers but browse for a storage account or create one. All Azure Functions need a storage account to store their own state. Be sure you select the v2 runtime.

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2018/04/043018_1600_Bootstrapyo2.png" />

Right-click the project (in my case FunctionApp1) and Add a New Azure Function.

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2018/04/043018_1600_Bootstrapyo3.png" />

Then select the event hub trigger and add some configuration details:

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2018/04/043018_1600_Bootstrapyo4.png" />

Note that the "Connection string setting" isn't the actual connection string. It's a pointer to the actual setting that's going to be in the local.settings.json file for VS tests and in an environment variable for the Docker container. The Event Hub name (insights-operational-logs) that I selected is the name of the hub that receives Azure Activity Log telemetry if the Activity Log has a diagnostics profile defined that sends Activity Log telemetry to an event hub.

Add the Connection String Setting to local.settings.json:

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2018/04/043018_1600_Bootstrapyo5.png" />

Hit F5 to test. You should see telemetry pouring out of the event hub. If not, check that the hub exists. This is a good indicator that there is a correctly configured diagnostics profile. The hub is created in the hub namespace automatically when telemetry starts to flow.

Next task: let's get this into a Docker container. At this point, I committed my code and then cloned it in my Linux VM. In my actual test environment, this is what it looks like (only the names are different – the structure is identical. Rather than 'goliveHubConnectionString', I used 'goliveEhConnection'.)

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2018/04/043018_1600_Bootstrapyo6.png" />

I added Dockerfile out of band, and here it is:

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2018/04/043018_1600_Bootstrapyo7.png" />

This requires some explanation. The FROM designates an alpha release of the Azure Functions v2 runtime. Follow the image <a href="https://hub.docker.com/r/microsoft/azure-functions-dotnet-core2.0/tags/">here</a> and upgrade to GA when it's available. The ENV values for AzureWebJobsStorage and AzureWebJobsDashboard are required for the function to operate. And the ENV's have semicolon's ( ; ) embedded. Note that the semicolons must be quoted with a backslash (e.g. \; ). The COPY line gets the results of my dotnet publish step. Here's how that is done:

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2018/04/043018_1600_Bootstrapyo8.png" />

Next step is the Docker build:

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2018/04/043018_1600_Bootstrapyo9.png" />

And then docker run it:
<ul>
 	<li><span style="font-family: Consolas">docker run -p 8080:80 –rm -it funcv2
</span></li>
</ul>
<span style="font-family: Consolas">You should see telemetry streaming to the console just as you did when testing in Visual Studio.
</span>

<span style="font-family: Consolas">Cheers!
</span>]]></content:encoded>
    </item>
    <item>
      <title>Using Microsoft Azure Video Indexer</title>
      <link>https://docs.microsoft.com/archive/blogs/golive/using-microsoft-azure-video-indexer</link>
      <pubDate>Mon, 26 Mar 2018 10:41:24 GMT</pubDate>
      <dc:creator><![CDATA[Greg Oliver (CSE)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/golive/?p=605</guid>
      <description><![CDATA[This blog takes the developer through having an Azure subscription to processing video with Azure...]]></description>
      <content:encoded><![CDATA[This blog takes the developer through having an Azure subscription to processing video with Azure Video Indexer (VI) REST API. At the time of this writing, VI is in preview. Find VI by going to https://azure.com, then Products, AI + Machine Learning, Cognitive Services, Vision, and finally Video Indexer. Or just search for Azure Video Indexer on Bing. This <a href="https://docs.microsoft.com/en-us/azure/cognitive-services/video-indexer/video-indexer-overview">page</a> is a great place to start learning overview material.

Let's dive in! Follow the guidance on this <a href="https://docs.microsoft.com/en-us/azure/cognitive-services/video-indexer/video-indexer-get-started">page</a> to get signed up for the preview and process your first video using the VI portal. Then continue through this <a href="https://docs.microsoft.com/en-us/azure/cognitive-services/video-indexer/video-indexer-use-apis">page</a> to get set up with the API. Once you have your <strong>subscription key</strong> (<a href="https://docs.microsoft.com/en-us/azure/cognitive-services/video-indexer/video-indexer-use-apis">step 2</a>), you're ready to go. Here's the <a href="https://videobreakdown.portal.azure-api.net/docs/services/582074fb0dc56116504aed75/operations/5857caeb0dc5610f9ce979e4">page</a> with a list of the REST API methods that we'll be using.

<span style="font-size: 12pt">Start by uploading a video file to a publicly accessible network address.</span>

Most use cases will start with uploading a video. This is facilitated by first uploading the video file to a publicly accessible network address, such as <a href="https://azure.microsoft.com/en-us/services/storage/blobs/">Azure Blob Storage</a>. My storage account has a public container in it. I upload my video files to it (as <a href="https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction">block blobs</a>) and the <a href="https://videobreakdown.portal.azure-api.net/docs/services/582074fb0dc56116504aed75/operations/5a37a5a80dc5610d2cc48213?">upload API</a> accesses it as expected. There are several tools that you can use to manage (upload, download, delete, etc) your storage account files. I like this one: <a href="https://docs.microsoft.com/en-us/azure/vs-azure-tools-storage-manage-with-storage-explorer">Microsoft Azure Storage Explorer</a>.

<span style="font-size: 12pt">Call the VI Upload API to process the video file.
</span>

For my testing purposes I use Google <a href="https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop">Postman</a>. The <a href="https://videobreakdown.portal.azure-api.net/docs/services/582074fb0dc56116504aed75/operations/5a37a5a80dc5610d2cc48213?">Upload API</a> is a POST – and here's the address that I used to upload my video file:
<p style="background: white"><span style="color: #0070c0"><span style="font-family: Consolas;font-size: 9pt">POST https:</span>//videobreakdown.azure-api.net/Breakdowns/Api/Partner/Breakdowns<span style="font-family: Consolas;font-size: 9pt">
?name=GregFrontFacialWithAudio
&amp;privacy=Private
&amp;videoUrl=https%3A%2F%2Fgolivearmstorage.blob.core.windows.net%2Fpublic%2FGregFrontWithAudio.MOV
</span></span></p>
(Line breaks added for readability.)

One header key is required: Ocp-Apim-Subscription-Key. The value to provide is your <strong>subscription key</strong> noted above.

Sending this to the backend results in return of a reference code such as "cce0136440". As depicted:

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2018/03/032618_1039_UsingMicros1.png" />

<span style="font-size: 12pt">Call the VI Get Processing State API to learn the status of processing of your video.
</span>

Now you can learn the status of the VI ingestion process by calling the <a href="https://videobreakdown.portal.azure-api.net/docs/services/582074fb0dc56116504aed75/operations/5a37a5a80dc5610d2cc4821d?">Get Processing State API</a>. Use the reference code from the upload call to identify which video upload you want to learn about.
<p style="background: white"><span style="color: #0070c0">GET https:<span style="font-family: Consolas;font-size: 9pt">//videobreakdown.azure-api.net/Breakdowns/Api/Partner/Breakdowns/cce0136440/State
</span></span></p>
<p style="background: white">As before, you'll need the Ocp-Apim-Subscription-Key header key and value. You'll get back something like this:<span style="color: #0070c0;font-family: Consolas;font-size: 9pt">
</span></p>
<img alt="" src="https://msdnshared.blob.core.windows.net/media/2018/03/032618_1039_UsingMicros2.png" />

You'll know it's done when it says "state": "Processed".

<span style="font-size: 12pt">Call the Get Breakdown API to see what VI was able to discern about your video.
</span>

To find out what VI was able to see in your video, call the <a href="https://videobreakdown.portal.azure-api.net/docs/services/582074fb0dc56116504aed75/operations/5a37a5a80dc5610d2cc48219?">Get Breakdown API</a>. This results in a JSON object with all of the details. Similar to this:

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2018/03/032618_1039_UsingMicros3.png" />

There is a great deal to be discovered by reading the JSON. Many use cases can continue on from this point, such as identifying the faces that are detected by VI the first time it sees them.

Please provide feedback – especially regarding usage of other VI API's.

Cheers!]]></content:encoded>
    </item>
    <item>
      <title>Microsoft Azure: Send Diagnostic Monitoring Data from a Windows IaaS VM to an Event Hub, Part 2</title>
      <link>https://docs.microsoft.com/archive/blogs/golive/microsoft-azure-send-diagnostic-monitoring-data-from-a-windows-iaas-vm-to-an-event-hub-part-2</link>
      <pubDate>Fri, 14 Jul 2017 20:35:14 GMT</pubDate>
      <dc:creator><![CDATA[Greg Oliver (CSE)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/golive/?p=575</guid>
      <description><![CDATA[In Part 1 I went into the details of configuring an IaaS VM with a trivial configuration file using...]]></description>
      <content:encoded><![CDATA[In <a href="https://blogs.msdn.microsoft.com/golive/2017/07/14/microsoft-azure-send-diagnostic-monitoring-data-from-a-windows-iaas-vm-to-an-event-hub/">Part 1</a> I went into the details of configuring an IaaS VM with a trivial configuration file using PowerShell. Then I added a few lines to start the flow of a small set of messages. In this post, I'll show how to do the same thing using the <a href="https://docs.microsoft.com/en-us/cli/azure/install-azure-cli">Azure CLI</a>.

In the PowerShell scenario, both the public and private settings are combined into one file before sending to the VM. With the CLI, the two are separated into separate files. Here's what should go into a file named something like publicConfig.json:

[code lang="js"]
{
    &quot;WadCfg&quot;: {
        &quot;DiagnosticMonitorConfiguration&quot;: {
            &quot;overallQuotaInMB&quot;: 4096,
            &quot;sinks&quot;: &quot;HotPath&quot;
        },
        &quot;SinksConfig&quot;: {
            &quot;Sink&quot;: [
                {
                    &quot;name&quot;: &quot;HotPath&quot;,
                    &quot;EventHub&quot;: {
                        &quot;Url&quot;: &quot;https://myEHNamespace.servicebus.windows.net/myEHHubName&quot;,
                        &quot;SharedAccessKeyName&quot;: &quot;RootManageSharedAccessKey&quot;
                    }
                }
            ]
        }
    },
    &quot;storageAccount&quot;: &quot;mystorageaccountname&quot;
}
[/code]

And into a file named something like privateConfig.json, put the rest of the lines:

[js]
{
    &quot;storageAccountName&quot;: &quot;mystorageaccountname&quot;,
    &quot;storageAccountKey&quot;: &quot;NotReallyMyStorageAccountKey==&quot;,
    &quot;storageAccountEndPoint&quot;: &quot;https://core.windows.net/&quot;,
    &quot;EventHub&quot;: {
        &quot;Url&quot;: &quot;https://myEHNamespace.servicebus.windows.net/myEHHubName&quot;,
        &quot;SharedAccessKeyName&quot;: &quot;RootManageSharedAccessKey&quot;,
        &quot;SharedAccessKey&quot;: &quot;Jf9JhNotReallyMyKeyCC/ZCSl6h5pq4lnBDtsUoXYZ=&quot;
    }
}
[/js]

The command to load the configuration into the VM is going to be something like this:

[code lang="text"]
az vm diagnostics set -g YOURRESOURCEGROUP --vm-name YOURVM --settings @/pathto/publicConfig.json --protected-settings @/pathto/privateConfig.json
[/code]

You can use the Azure CLI in a variety of ways: a Linux server, a Mac terminal, Bash on Windows, Azure Cloud Shell, and so on.

Cheers!]]></content:encoded>
    </item>
    <item>
      <title>Microsoft Azure: Send Diagnostic Monitoring Data from a Windows IaaS VM to an Event Hub</title>
      <link>https://docs.microsoft.com/archive/blogs/golive/microsoft-azure-send-diagnostic-monitoring-data-from-a-windows-iaas-vm-to-an-event-hub</link>
      <pubDate>Fri, 14 Jul 2017 01:26:31 GMT</pubDate>
      <dc:creator><![CDATA[Greg Oliver (CSE)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/golive/?p=565</guid>
      <description><![CDATA[Use this article as a backgrounder on this topic. It deals primarily with monitoring Cloud Services...]]></description>
      <content:encoded><![CDATA[<p>Use this <a href="https://docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/azure-diagnostics-streaming-event-hubs" target="_blank"><span style="color:#337ab7">article</span></a> as a backgrounder on this topic. It deals primarily with monitoring Cloud Services VMs, but there is much in common between them and IaaS VMs where monitoring is concerned.<span style="font-size:10pt">
		</span></p><p>These are the things that must be put into place in order to see telemetry from your Windows VM going into an Event Hub:<span style="font-size:10pt">
		</span></p><ol><li>Create and configure an event hub
</li><li>Write the public and private configuration files
</li><li>Install the diagnostics agent along with this configuration into the VM
</li></ol><p>For #1, please refer to this article: <a href="https://docs.microsoft.com/en-us/azure/event-hubs/event-hubs-create" target="_blank"><span style="color:#337ab7">Create an Event Hubs namespace and an event hub using the Azure portal</span></a>
	</p><p>For #2, let's start with a trivial configuration file. It doesn't do anything but install correctly and demonstrate the structure of the file. Copy the text and save to a local file. Edit a few of the values to match your configuration: myEHNamespace, myEHHubName, mystorageaccountname, the storage account key, the EH shared access policy name and value.
[js]
{
    &quot;PublicConfig&quot;: {
        &quot;WadCfg&quot;: {
            &quot;DiagnosticMonitorConfiguration&quot;: {
                &quot;overallQuotaInMB&quot;: 4096,
                &quot;sinks&quot;: &quot;HotPath&quot;
            },
            &quot;SinksConfig&quot;: {
                &quot;Sink&quot;: [
                    {
                        &quot;name&quot;: &quot;HotPath&quot;,
                        &quot;EventHub&quot;: {
                            &quot;Url&quot;: &quot;https://myEHNamespace.servicebus.windows.net/myEHHubName&quot;,
                            &quot;SharedAccessKeyName&quot;: &quot;RootManageSharedAccessKey&quot;
                        }
                    }
                ]
            }
        },
        &quot;storageAccount&quot;: &quot;mystorageaccountname&quot;
    },
    &quot;PrivateConfig&quot;: {
        &quot;storageAccountName&quot;: &quot;mystorageaccountname&quot;,
        &quot;storageAccountKey&quot;: &quot;NotReallyMyStorageAccountKey==&quot;,
        &quot;storageAccountEndPoint&quot;: &quot;https://core.windows.net/&quot;,
        &quot;EventHub&quot;: {
            &quot;Url&quot;: &quot;https://myEHNamespace.servicebus.windows.net/myEHHubName&quot;,
            &quot;SharedAccessKeyName&quot;: &quot;RootManageSharedAccessKey&quot;,
            &quot;SharedAccessKey&quot;: &quot;Jf9JhNotReallyMyKeyCC/ZCSl6h5pq4lnBDtsUoXYZ=&quot;
        }
    }
}
[/js]
</p><p>For #3, let's start with PowerShell as the installation tool. The file format shown above is suitable for use with Set-AzureRmVmDiagnosticsExtension, one of the Azure PowerShell cmdlets. To get Azure PowerShell, go <a href="https://azure.microsoft.com/en-us/downloads/">here</a>. Find <strong>PowerShell</strong> near the bottom of the page in the <strong>Command-line Tools</strong> section.
</p><p>Use this command line to run the cmdlet:</p>
[code lang="ps"]
Set-AzureRmVMDiagnosticsExtension -ResourceGroupName YOURRESOURCEGROUP -VMName YOURVM -DiagnosticsConfigurationPath C:\temp\trivialConfigurationAsShownAbove.json
[/code]
<p>When this runs you should see feedback similar to this:</p>
[code lang="text"]
RequestId IsSuccessStatusCode StatusCode ReasonPhrase
--------- ------------------- ---------- ------------
                         True         OK OK          
[/code]
<p>Last thing, let's add some configuration that will cause some output to the event hub. Insert these lines after line 6 and re-run the command line above:</p>
[code lang="js"]
&quot;DiagnosticInfrastructureLogs&quot;: {
    &quot;scheduledTransferLogLevelFilter&quot;: &quot;Verbose&quot;,
    &quot;scheduledTransferPeriod&quot;: &quot;PT1M&quot;
},
&quot;Metrics&quot;: {
    &quot;MetricAggregation&quot;: [],
    &quot;resourceId&quot;: &quot;/subscriptions/YOURSUBSCRIPTIONID/resourceGroups/YOURRESOURCEGROUP/providers/Microsoft.Compute/virtualMachines/YOURVM&quot;
}
[/code]
<p>If you now go to your event hub blade you should see the graph start to register incoming messages. I'll add to this blog shortly with information on how to do the same thing with the Azure CLI.</p>

<p>Cheers!</p>
]]></content:encoded>
    </item>
    <item>
      <title>Send Telemetry to Splunk Enterprise from Azure Resources via Azure Monitor, Part 5</title>
      <link>https://docs.microsoft.com/archive/blogs/golive/send-telemetry-to-splunk-enterprise-from-azure-resources-via-azure-monitor-part-5</link>
      <pubDate>Sat, 08 Jul 2017 19:32:04 GMT</pubDate>
      <dc:creator><![CDATA[Greg Oliver (CSE)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/golive/?p=537</guid>
      <description><![CDATA[For Part 1 of this blog series, which contains overview material, please click here. &nbsp;There are...]]></description>
      <content:encoded><![CDATA[<p><font size="3">For Part 1 of this blog series, which contains overview material, please click <a href="https://blogs.msdn.microsoft.com/golive/2017/04/17/send-telemetry-to-splunk-enterprise-from-azure-resources-via-azure-monitor/" target="_blank">here</a>.</font></p> <p><font size="3"></font>&nbsp;<font size="3">There are several scenarios that must be addressed when thinking about getting telemetry from Azure resources to Splunk. What if Splunk is on premises? What if you’re using Splunk Cloud? You could be using a private network connection to Azure, or not. The Splunk add-on approach isn’t suited to all of these. In this blog and others in this series, I’ll introduce some new architectural elements and go into detail on each. </font></p> <p><font size="3"></font>&nbsp;<font size="3">In this article, “the add-on” refers to <a href="https://splunkbase.splunk.com/app/3534/" target="_blank">this</a>.</font></p> <p><font size="3"></font>&nbsp;<font size="3">These specific scenarios will be dealt with:</font></p> <ul> <li><font size="3">Cloud-based Splunk, using the add-on (<a href="https://blogs.msdn.microsoft.com/golive/2017/07/08/send-telemetry-to-splunk-enterprise-from-azure-resources-via-azure-monitor-part-2/" target="_blank">Part 2</a>)</font>&nbsp; <li><font size="3">Cloud-based Splunk, using the HTTP Event Collector (<a href="https://blogs.msdn.microsoft.com/golive/2017/07/08/send-telemetry-to-splunk-enterprise-from-azure-resources-via-azure-monitor-part-3/" target="_blank">Part 3</a>)</font>&nbsp; <li><font size="3">Premises-based Splunk, using private network (<a href="https://blogs.msdn.microsoft.com/golive/2017/07/08/send-telemetry-to-splunk-enterprise-from-azure-resources-via-azure-monitor-part-4/" target="_blank">Part 4</a>)</font>&nbsp; <li><font size="3">Premises-based Splunk, via the internet (this article)</font></li></ul> <p><font size="3"></font>&nbsp;<font size="3">In this, Part 5, I’ll go into Premises-based Splunk via the internet.</font></p> <p><font size="3"></font>&nbsp;</p> <p><a href="https://msdnshared.blob.core.windows.net/media/2017/07/AzureFunctionPlusRelay.png"><img width="1150" height="491" title="AzureFunctionPlusRelay" style="border: 0px currentcolor;padding-top: 0px;padding-right: 0px;padding-left: 0px" alt="AzureFunctionPlusRelay" src="https://msdnshared.blob.core.windows.net/media/2017/07/AzureFunctionPlusRelay_thumb.png" border="0"></a></p> <p><br></p> <p><font size="3">In this configuration, Splunk is on prem, behind a firewall and no private network, but no proxy server so the Splunk server can see to resolve names over the internet through port 443.</font></p> <p><font size="3">The solution is another Azure service: Azure Relay. With Azure Relay, the Splunk server takes the “listener” role and establishes an “open phone line” in the cloud via a call over port 443. The “sender” role is played by an Azure Function which can see that open phone line and establish a channel for communications over it.</font></p> <p><font size="3">The components that you need to get going with this are:</font></p> <ul> <li><font size="3">Azure Function for Splunk, located <a href="https://github.com/sebastus/AzureFunctionForSplunk" target="_blank">here</a>.</font></li> <li><font size="3">A Splunk add-on that knows how to work with Azure Relay. That’s <a href="https://github.com/sebastus/AzureRelayHCAddonForSplunk" target="_blank">here</a>.</font></li></ul> <p><font size="3">In this case, the Azure Function should be configured to run with the Relay output binding. The installation instructions in the README.md covers those details.</font></p>]]></content:encoded>
    </item>
    <item>
      <title>Send Telemetry to Splunk Enterprise from Azure Resources via Azure Monitor, Part 4</title>
      <link>https://docs.microsoft.com/archive/blogs/golive/send-telemetry-to-splunk-enterprise-from-azure-resources-via-azure-monitor-part-4</link>
      <pubDate>Sat, 08 Jul 2017 19:31:22 GMT</pubDate>
      <dc:creator><![CDATA[Greg Oliver (CSE)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/golive/?p=515</guid>
      <description><![CDATA[For Part 1 of this blog series, which contains overview material, please click here. &nbsp;There are...]]></description>
      <content:encoded><![CDATA[<p><font size="3">For Part 1 of this blog series, which contains overview material, please click <a href="https://blogs.msdn.microsoft.com/golive/2017/04/17/send-telemetry-to-splunk-enterprise-from-azure-resources-via-azure-monitor/" target="_blank">here</a>.</font></p> <p><font size="3"></font>&nbsp;<font size="3">There are several scenarios that must be addressed when thinking about getting telemetry from Azure resources to Splunk. What if Splunk is on premises? What if you’re using Splunk Cloud? You could be using a private network connection to Azure, or not. The Splunk add-on approach isn’t suited to all of these. In this blog and others in this series, I’ll introduce some new architectural elements and go into detail on each. </font></p> <p><font size="3"></font>&nbsp;<font size="3">In this article, “the add-on” refers to <a href="https://splunkbase.splunk.com/app/3534/" target="_blank">this</a>.</font></p> <p><font size="3"></font>&nbsp;<font size="3">These specific scenarios will be dealt with:</font></p> <ul> <li><font size="3">Cloud-based Splunk, using the add-on (<a href="https://blogs.msdn.microsoft.com/golive/2017/07/08/send-telemetry-to-splunk-enterprise-from-azure-resources-via-azure-monitor-part-2/" target="_blank">Part 2</a>)</font>&nbsp; <li><font size="3">Cloud-based Splunk, using the HTTP Event Collector (<a href="https://blogs.msdn.microsoft.com/golive/2017/07/08/send-telemetry-to-splunk-enterprise-from-azure-resources-via-azure-monitor-part-3/" target="_blank">Part 3</a>)</font>&nbsp; <li><font size="3">Premises-based Splunk, using private network (this article)</font>&nbsp; <li><font size="3">Premises-based Splunk, via the internet (<a href="https://blogs.msdn.microsoft.com/golive/2017/07/08/send-telemetry-to-splunk-enterprise-from-azure-resources-via-azure-monitor-part-5/" target="_blank">Part 5</a>)</font></li></ul> <p><font size="3"></font>&nbsp;<font size="3">In this, Part 4, I’ll go into Premises-based Splunk using a private network. There are a couple of variations. </font></p><p><font size="3">This is the only configuration that supports the use of an on prem proxy server.&nbsp; </font>&nbsp;</p> <p><a href="https://msdnshared.blob.core.windows.net/media/2017/07/AzureAddonPremisesBasedSplunk.png"><img width="1150" height="324" title="AzureAddonPremisesBasedSplunk" style="border: 0px currentcolor;padding-top: 0px;padding-right: 0px;padding-left: 0px" alt="AzureAddonPremisesBasedSplunk" src="https://msdnshared.blob.core.windows.net/media/2017/07/AzureAddonPremisesBasedSplunk_thumb.png" border="0"></a></p> <p><br></p> <p><font size="3">In the first variation, the Splunk Forwarder VM is just Splunk Enterprise with some features switched off. It receives and indexes the incoming events then passes them along to the centralized indexer (VM or cluster). With ExpressRoute (or a site-to-site VPN) configured to encapsulate the VNET where the Splunk VM resides, there is a clear channel to the Splunk Enterprise box on prem. So this configuration is really exactly the same as the one in Part 2 of this series, with the added Splunk instance on prem.</font></p><p><font size="3">The Express Route isn’t an absolute requirement in this variation since the Splunk Forwarder VM could be a single instance with a static IP. The proxy server could be programmed to allow the Splunk server on prem to talk to it directly.</font></p><p><font size="3"><a href="https://msdnshared.blob.core.windows.net/media/2017/07/AzureFunctionPremisesHEC.png"><img width="855" height="249" title="AzureFunctionPremisesHEC" alt="AzureFunctionPremisesHEC" src="https://msdnshared.blob.core.windows.net/media/2017/07/AzureFunctionPremisesHEC_thumb.png" border="0"></a></font></p><p><font size="3">In the second variation, the on prem Splunk server can see the Azure Function via the private network. In this case, the Azure Function must exist in the context of an App Service Environment in order to have control over its network configuration. </font></p>]]></content:encoded>
    </item>
    <item>
      <title>Send Telemetry to Splunk Enterprise from Azure Resources via Azure Monitor, Part 3</title>
      <link>https://docs.microsoft.com/archive/blogs/golive/send-telemetry-to-splunk-enterprise-from-azure-resources-via-azure-monitor-part-3</link>
      <pubDate>Sat, 08 Jul 2017 19:30:39 GMT</pubDate>
      <dc:creator><![CDATA[Greg Oliver (CSE)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/golive/?p=495</guid>
      <description><![CDATA[For Part 1 of this blog series, which contains overview material, please click here. &nbsp;There are...]]></description>
      <content:encoded><![CDATA[<p><font size="3">For Part 1 of this blog series, which contains overview material, please click <a href="https://blogs.msdn.microsoft.com/golive/2017/04/17/send-telemetry-to-splunk-enterprise-from-azure-resources-via-azure-monitor/" target="_blank">here</a>.</font></p> <p><font size="3"></font>&nbsp;<font size="3">There are several scenarios that must be addressed when thinking about getting telemetry from Azure resources to Splunk. What if Splunk is on premises? What if you’re using Splunk Cloud? You could be using a private network connection to Azure, or not. The Splunk add-on approach isn’t suited to all of these. In this blog and others in this series, I’ll introduce some new architectural elements and go into detail on each. </font></p> <p><font size="3"></font>&nbsp;<font size="3">In this article, “the add-on” refers to <a href="https://splunkbase.splunk.com/app/3534/" target="_blank">this</a>.</font></p> <p><font size="3"></font>&nbsp;<font size="3">These specific scenarios will be dealt with:</font></p> <ul> <li><font size="3">Cloud-based Splunk, using the add-on (<a href="https://blogs.msdn.microsoft.com/golive/2017/07/08/send-telemetry-to-splunk-enterprise-from-azure-resources-via-azure-monitor-part-2/" target="_blank">Part 2</a>)</font>&nbsp; <li><font size="3">Cloud-based Splunk, using the HTTP Event Collector (this article)</font>&nbsp; <li><font size="3">Premises-based Splunk, using private network (<a href="https://blogs.msdn.microsoft.com/golive/2017/07/08/send-telemetry-to-splunk-enterprise-from-azure-resources-via-azure-monitor-part-4/" target="_blank">Part 4</a>)</font>&nbsp; <li><font size="3">Premises-based Splunk, via the internet (<a href="https://blogs.msdn.microsoft.com/golive/2017/07/08/send-telemetry-to-splunk-enterprise-from-azure-resources-via-azure-monitor-part-5/" target="_blank">Part 5</a>)</font></li></ul> <p><font size="3"></font>&nbsp;<font size="3">In this, Part 3, I’ll go into Cloud-based Splunk using the <font size="3">HTTP Event Collector (HEC)</font>.</font></p> <p><font size="3"></font>&nbsp;</p> <p><a href="https://msdnshared.blob.core.windows.net/media/2017/07/AzureFunctionPlusHEC.png"><img title="AzureFunctionPlusHEC" style="border-top: 0px;border-right: 0px;border-bottom: 0px;padding-top: 0px;padding-left: 0px;border-left: 0px;padding-right: 0px" border="0" alt="AzureFunctionPlusHEC" src="https://msdnshared.blob.core.windows.net/media/2017/07/AzureFunctionPlusHEC_thumb.png" width="1150" height="324"></a></p> <p>&nbsp;</p> <p><font size="3">Splunk HEC is a “fast and efficient way to <a href="https://dev.splunk.com/view/event-collector/SP-CAAAE7G" target="_blank">send data to Splunk Enterprise and Splunk Cloud</a>.” Here is an <a href="https://dev.splunk.com/view/event-collector/SP-CAAAE6M" target="_blank">Introduction to Splunk HTTP Event Collector</a>. For the purposes of this article, think of HEC as an authenticated Splunk endpoint to which we can send events for indexing.</font></p> <p><font size="3">There are a couple of reasons that I know of that you might want to use HEC:</font></p> <ul> <li><font size="3">You use Splunk Cloud. The add-on won’t install there.</font></li> <li><font size="3">You don’t want to install the add-on into your Splunk Enterprise system for whatever reason.</font></li></ul> <p><font size="3">To satisfy these requirements we need another mechanism to get the data from event hubs and send it along to Splunk. An Azure Function is a great solution for that. The function that has been built for this purpose is <a href="https://github.com/sebastus/AzureFunctionForSplunk" target="_blank">here</a>. Use it with the HEC output binding.</font></p> <p><font size="3">Azure Monitor metrics are available via event hub, the same as diagnostic and activity logs. If the volume of messages increases (or decreases), the Azure Function App will autoscale to meet demand.</font></p> <p><font size="3">While I said initially “Cloud-based Splunk”, that’s just the typical scenario. In reality, as long as the HEC endpoint is reachable by the Azure Function, it’s a perfectly good approach. For example, you have an ExpressRoute connection from Azure to your premises and your Function App leverages an App Service Environment, this connectivity becomes an option. See this <a href="https://docs.microsoft.com/en-us/azure/app-service-web/app-service-app-service-environment-network-configuration-expressroute" target="_blank">article</a> for some of the details.</font></p>]]></content:encoded>
    </item>
    <item>
      <title>Send Telemetry to Splunk Enterprise from Azure Resources via Azure Monitor, Part 2</title>
      <link>https://docs.microsoft.com/archive/blogs/golive/send-telemetry-to-splunk-enterprise-from-azure-resources-via-azure-monitor-part-2</link>
      <pubDate>Sat, 08 Jul 2017 19:27:10 GMT</pubDate>
      <dc:creator><![CDATA[Greg Oliver (CSE)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/golive/?p=475</guid>
      <description><![CDATA[&nbsp;For Part 1 of this blog series, which contains overview material, please click here.&nbsp;...]]></description>
      <content:encoded><![CDATA[<p><font size="3"></font>&nbsp;<font size="3">For Part 1 of this blog series, which contains overview material, please click <a href="https://blogs.msdn.microsoft.com/golive/2017/04/17/send-telemetry-to-splunk-enterprise-from-azure-resources-via-azure-monitor/" target="_blank">here</a>.</font>&nbsp;</p> <p><font size="3">There are several scenarios that must be addressed when thinking about getting telemetry from Azure resources to Splunk. What if Splunk is on premises? What if you’re using Splunk Cloud? You could be using a private network connection to Azure, or not. The Splunk add-on approach isn’t suited to all of these. In this blog and others in this series, I’ll introduce some new architectural elements and go into detail on each. </font>&nbsp;</p> <p><font size="3">In this article, “the add-on” refers to <a href="https://splunkbase.splunk.com/app/3534/" target="_blank">this</a>.</font>&nbsp;</p> <p><font size="3">These specific scenarios will be dealt with:</font>&nbsp;</p> <ul> <li><font size="3">Cloud-based Splunk, using the add-on (this article)</font>  <li><font size="3">Cloud-based Splunk, using the HTTP Event Collector (<a href="https://blogs.msdn.microsoft.com/golive/2017/07/08/send-telemetry-to-splunk-enterprise-from-azure-resources-via-azure-monitor-part-3/" target="_blank">Part 3</a>)</font>&nbsp; <li><font size="3">Premises-based Splunk, using private network (<a href="https://blogs.msdn.microsoft.com/golive/2017/07/08/send-telemetry-to-splunk-enterprise-from-azure-resources-via-azure-monitor-part-4/" target="_blank">Part 4</a>)</font>&nbsp; <li><font size="3">Premises-based Splunk, via the internet (<a href="https://blogs.msdn.microsoft.com/golive/2017/07/08/send-telemetry-to-splunk-enterprise-from-azure-resources-via-azure-monitor-part-5/" target="_blank">Part 5</a>)</font></li></ul> <p><font size="3"></font>&nbsp;<font size="3">In this, Part 2, I’ll go into the already familiar Cloud-based Splunk using the add-on.</font></p> <p><font size="3"></font>&nbsp;</p> <p><a href="https://msdnshared.blob.core.windows.net/media/2017/07/AzureAddonCloudBasedSplunk.png"><img title="AzureAddonCloudBasedSplunk" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="AzureAddonCloudBasedSplunk" src="https://msdnshared.blob.core.windows.net/media/2017/07/AzureAddonCloudBasedSplunk_thumb.png" width="1150" height="329"></a></p> <p>&nbsp;</p> <p><font size="3">In this scenario, all resources reside in Azure. The Splunk VM is Splunk Enterprise and may be a cluster rather than a single box. Setting up the VM’s firewall and the network’s Network Security Group to allow outbound traffic on 443 is sufficient. </font>&nbsp;</p> <p><font size="3">The simplest implementation has all monitored resources and monitoring resources in the same subscription and region, but this is seldom the case. Much more typical is many subscriptions with assets in multiple regions. While there is normally just one Splunk indexer (whether single VM or cluster), you may ingest all telemetry directly into that instance from multiple regional Event Hubs and REST APIs. Alternatively, you may use a Splunk Heavy Forwarder in the remote regions, each with the add-on loaded and configured to ingest that region’s data. Each of the forwarders send the aggregated data along to the main index. In either case, the data never leaves Microsoft’s network.</font>&nbsp;</p> <p><font size="3">The decision to use a Heavy Forwarder in the regions vs sending raw data to the indexer isn’t trivial. Here’s an <a href="https://www.splunk.com/blog/2016/12/12/universal-or-heavy-that-is-the-question.html" target="_blank">article</a> by a Splunk consultant on the topic.</font>&nbsp;</p> <p><font size="3">Another consideration is the Azure AD tenant. For various reasons, it’s important that the resources being monitored and the monitoring resources (event hubs, service principal, etc) all be in the same AAD tenant.</font></p>]]></content:encoded>
    </item>
  </channel>
</rss>