Skip to main content

2. Connect Your First Source

The second step of the Quickstart: choose one real data source, connect it, and leave the platform actively collecting from it. This page is for the administrator doing the initial setup.

It uses Microsoft 365 as its worked example, connected with the Office365-Audit application template. That template exercises every part of the process in one pass (a credential you create in an external service, an application installed from a template, three data lake indexes, and a pipeline that appears on the platform's pipeline diagram), and it finishes in one sitting rather than waiting on someone else's approval.

The setup has two halves:

  1. In Microsoft Entra ID: register an application, add nine read-only permissions across two Microsoft APIs, grant admin consent, and create a client secret. This produces three values: a Tenant ID, a Client ID, and a Client Secret. About 15 minutes.
  2. In Fluency: install the Office365-Audit template and paste those three values into its form. About 5 minutes.

Before You Begin​

  • You can sign in to the portal (step 1) with an account that can install applications.
  • You hold, or can borrow, an Entra identity that can both register an application and grant tenant-wide admin consent: Global Administrator, or Privileged Role Administrator combined with Application Administrator or Cloud Application Administrator.
  • Unified audit logging is on in the Microsoft 365 tenant. Nothing reaches the Office 365 API until it is, and turning it on is not retroactive. Office 365 Audit → Before you begin has the PowerShell check.
Sign-in logs need a premium Entra licence

The Entra directory audit works on every tier. The sign-in log is premium-only: without Microsoft Entra ID P1 or P2, the AzureSigninLogs index stays empty and the rest of the integration is unaffected. That is expected, not a fault.

If you are not using Microsoft 365​

The shape of this page is the same for every source: prepare the source side, install a template, look at the pipeline it built. Only the vendor-side half changes. Find your source in the Integration Matrix, then follow its own guide for the first half and rejoin this page at Step 3. If your source is a firewall, a server, or anything else on your own network, start at How Data Gets In instead; those arrive by syslog, HEC, or a collector rather than by API.

Step 1: Choose a Source​

Criteria for a good first source​

Prefer a source you fully control, that produces steady volume, and whose data you can recognize when you see it. Resist starting with your highest-volume production firewall: a first connection is for learning the mechanics, and a noisy source makes every subsequent step harder to read.

Why this page uses Microsoft 365​

  • It is entirely cloud-side. Nothing is installed on any machine you own.
  • The credential is one you create yourself and can rotate on your own schedule, so the setup finishes in one sitting. The alternative Microsoft templates use administrator consent, which puts a decision in someone else's inbox and leaves the application reporting healthy and collecting nothing until they act on it.
  • One application covers three feeds (the unified audit log, the Entra directory audit, and Entra sign-ins) instead of three applications with three separate consent grants.
  • The data is well understood by the rest of the platform: the search page already ships facet configurations for it, and sign-in activity is exactly the kind of thing behavior rules score, so step 5 has something to show.

What arrives​

IndexSourceContents
Office365Office 365 Management Activity APIThe unified audit log: mail, file, site, Teams, admin, and DLP activity across every Microsoft 365 workload, plus service-health messages.
MSEntraMicrosoft GraphDirectory changes: users and groups created or modified, role assignments, application and consent grants, password resets.
AzureSigninLogsMicrosoft GraphInteractive sign-ins with the client IP, device, application, conditional-access result, and risk state.

AzureAudit is the legacy name of the directory-audit index: older deployments write the directory audit to AzureAudit rather than MSEntra, and keep doing so.

Alongside those, the application reads the directory itself (users, groups, devices, applications, policies), which is what lets Fluency resolve an object GUID in an audit record to a name.

Step 2: Prepare the Source Side​

Everything in this step happens in the Microsoft Entra admin center, or in the Azure portal under Microsoft Entra ID. Office 365 Audit is the full version of this half, including an Azure CLI and PowerShell script that does the same thing unattended; what follows is the shortest path through the portal.

2.1 Register the application​

Go to App registrations → New registration.

Fluency Corp App registrations page with the New registration button in the command bar

  • Name: anything recognisable. ingext-azureaudit is a good default.
  • Supported account types: Accounts in this organizational directory only (single tenant).
  • Redirect URI: leave blank. This application never signs a user in.

Register an application form with a name entered and Single tenant only selected

Click Register.

Register the app; do not create an enterprise application

App registrations → New registration is the right path. Enterprise applications → New application looks similar and produces a service principal, but gives you nowhere to add API permissions or a client secret. If you find yourself on a page headed Browse Microsoft Entra App Gallery, you are in the wrong place.

2.2 Add the Microsoft Graph permissions​

On the new application, go to API permissions → Add a permission. On the Microsoft APIs tab choose Microsoft Graph, then Application permissions: the app-only path, for an application that runs without a signed-in user.

Microsoft Graph permission dialog with Delegated permissions and Application permissions, Application permissions selected

Search for and tick these six:

  • AuditLog.Read.All
  • Directory.Read.All
  • Policy.Read.All
  • Reports.Read.All
  • UserAuthenticationMethod.Read.All
  • MailboxSettings.Read

Take the .Read variant in each case, never .ReadWrite: the picker lists both next to each other, and the read-write permission is a strictly wider grant this integration has no use for. Click Add permissions.

2.3 Add the Office 365 Management API permissions​

The unified audit log does not come from Graph. It comes from a separate API with its own service principal, so this is a second trip through Add a permission: Microsoft APIs → Office 365 Management APIs → Application permissions, then tick all three:

  • ActivityFeed.Read
  • ActivityFeed.ReadDlp
  • ServiceHealth.Read

Office 365 Management APIs permission dialog with ActivityFeed.Read, ActivityFeed.ReadDlp and ServiceHealth.Read ticked

Click Add permissions. All nine should now be listed under Configured permissions as Microsoft Graph (6) and Office 365 Management APIs (3), every row with Type Application and Status Not granted.

If Office 365 Management APIs is not offered, the tenant has never had its service principal provisioned; Office 365 Audit has the one-line fix.

Application permissions do nothing until an administrator consents on the tenant's behalf. On the same API permissions page, click Grant admin consent for <tenant> and confirm.

Configured permissions with all nine rows showing Granted

All nine rows must then read a green Granted for <tenant>. If the button is greyed out, the account you are signed in as does not hold consent rights; the application and its permissions are already saved, so ask an administrator who does to open the same page and click it.

Consent applies to whatever is listed at the time you click. A permission added later but never consented to returns 403 while the others keep working, which reads as "the integration works, but SharePoint events are missing" rather than as an error.

2.5 Create a client secret​

Go to Certificates & secrets → Client secrets → New client secret. Give it a description you will recognise in two years, choose an expiry, and click Add.

Add a client secret panel with a description and a 730 days (24 months) expiry

The drop-down opens on Recommended: 180 days (6 months) and the portal caps it at 24 months. Pick whatever your rotation policy allows, and write the expiry date down: when the secret expires, collection stops with no warning on the Fluency side.

Copy the Value now, and copy the Value, not the Secret ID

The new secret appears with its Value shown in full, exactly once. Navigate away and it is masked forever; the secret cannot be recovered, only replaced.

Client secrets list with the new secret&#39;s value visible in the Value column

The Secret ID in the next column is not the secret. It stays fully readable, which is exactly why it gets copied by mistake, and pasting it into Fluency is the single most common cause of an application that installs and then immediately aborts.

2.6 Record the Tenant ID and Client ID​

Go to the application's Overview page and copy two values from Essentials.

App registration Overview page with the Application (client) ID, Object ID and Directory (tenant) ID fields

What to have in hand before leaving Microsoft​

Three values, and only three. All of them go into the same form in step 3; nothing here is entered anywhere else.

Fluency fieldWhere it comes fromSensitive?
Azure Tenant IDOverview → Directory (tenant) IDNo: readable from the portal at any time
Azure ClientIDOverview → Application (client) IDNo: readable from the portal at any time
Azure ClientSecretCertificates & secrets → the secret's ValueYes: shown once, unrecoverable

Ignore Object ID. It identifies the application object in the directory and is not used here.

Step 3: Install the Application​

  1. In the navigation rail, open Applications and click Install Application. The Application Catalog opens, with a Search applications… field and an All categories drop-down above the template cards. Each card shows the template's icon, its name, and a one-line description, in rows of up to four under the category headings: AWS Services, Cloud Infrastructure (IaaS), Cloud-based Business Softwares, Email Audit and Protection, Endpoint Management, Office Software (SaaS) and IAM, On-Premise IT, and System Components, holding 72 templates between them.

    Application Catalog with a search field and an All categories drop-down above template cards grouped under AWS Services, Cloud Infrastructure (IaaS), Cloud-based Business Softwares, Email Audit and Protection, and Endpoint Management

  2. Find the Office365-Audit card under the Office Software (SaaS) and IAM category: pick the category from the drop-down, or type Office365 in the search field. Its description reads Combined Office365 Audit Event, AzureAD Audit and Azure AD Resource Integrations.

  3. Click the card. The Install Office365-Audit form opens, with a Back to Catalog link above its title.

  4. Leave Instance name and Display name, in the Application section, at default / Default for a first install. Change both when you add a second instance of the same template (collecting from two Microsoft 365 tenants, for example) so you can tell them apart on the applications list.

  5. Fill in the Configuration section. Every field is required:

    FieldWhat to enter
    Azure Tenant IDThe Directory (tenant) ID from step 2.6.
    Azure ClientIDThe Application (client) ID from step 2.6.
    Azure ClientSecretThe secret Value from step 2.5, not the Secret ID. Masked once the application is installed.
    datalake index name for Entra ID (AzureAudit) eventsPre-filled MSEntra. Receives the directory audit.
  6. Leave Advanced configuration collapsed. The collapsed section below Configuration holds two more fields: datalake, pre-filled managed for the platform-managed lake, and datalake index name, pre-filled Office365 for the unified audit log. Both defaults are right for a first install, which is why they are tucked away; click the heading to open the section only to send this application somewhere other than the managed lake, or to dodge the index-name collision described below.

  7. Click Dry run. The platform checks the configuration and the three credentials against Microsoft without installing anything (the button reads Checking… for up to 45 seconds) and then shows Dry run passed or Dry run failed above the buttons, with a table of the checks it made. A wrong tenant, client ID, or secret shows up here rather than as an application in error later.

  8. Click Install Application. There is no separate save-then-start step. The Applications page opens with the notice Default is launching., and the new application is listed with its status badge.

Install Office365-Audit form with the Application section&#39;s Instance name and Display name fields, the Configuration section&#39;s Azure Tenant ID, Azure ClientID, Azure ClientSecret and datalake index name for Entra ID (AzureAudit) events fields, and Advanced configuration expanded to datalake and datalake index name, above Cancel, Dry run and Install Application

Every template's form has the same shape; only the Configuration section changes, and it is absent entirely on templates that take no settings.

  • Application: Instance name and Display name, both required, pre-filled with default and Default.
  • Configuration: the template's own fields.
  • Advanced configuration: a collapsed section holding datalake and datalake index name, on the templates that let you choose where the events land.

Required fields carry an asterisk after the label. Cancel, Dry run, and Install Application sit at the bottom right; Cancel returns to the catalog without installing. After a failed dry run, Install Application becomes Install anyway, greyed out until you tick the box confirming you want to install despite the failed checks. Every other template's form, field by field, is in the Application Catalog.

Two index names means two chances to collide

Two applications writing to the same index name in the same lake collide, and the second one aborts. Office365 is also the default for the separate Office365 template, and MSEntra is also the default for Azure Directory Audit and Azure Directory Audit (Event Hub), so this template cannot run alongside any of those at their defaults. Either change the names here, or uninstall the separate application first; to uninstall, click Uninstall at the top right of the application's details page (v1: the red Uninstall button at the foot of its details panel on Platform → Applications). Azure Directory Audit also collects the same Entra feed into the same table indexes, so run one or the other in any case. Note that the two names live in different places on the form: the directory-audit index name is in Configuration (v1: Parameters), while the Office365 one is the datalake index name inside Advanced configuration (v1: Advanced Configurations).

The sign-in stream lands in a third index, AzureSigninLogs, which the install creates and which is not exposed as a parameter, so it cannot be renamed to dodge a collision.

About Integrations​

Some templates take their credentials from a stored integration rather than from the install form, which is worth doing when several applications share one credential. The AWS templates have their own version of this. A role registered on Configuration → AWS Roles (v1: Settings → Advanced → AWS Roles) appears in their Pre-defined AWS Role drop-down, so one role serves every application that reads from that AWS account. See Connecting to AWS.

The Microsoft templates are not one of those. Office365-Audit takes its tenant ID, client ID, and secret directly on the form, and you do not need to visit the Integrations page at all for this quickstart.

You will still see your new connection listed on the Integrations page, one of the cards on Configuration, once it is running. The page is subtitled A list of active integrations and integration types, with a + Create Integration button on the right, and shows the account's integrations as cards grouped under category headings. Each card shows the service icon, the integration's name (a long one cut short with an ellipsis) and its type, and some add a Status line such as Status: running. Integrations waiting on a consent invitation are grouped under Invitations.

Integrations page with the Create Integration button and two integration cards, AzureAuditEventHub-default under Cloud Infrastructure (IaaS) and GSuite-default with Status: running under Invitations

The example above holds an AzureAuditEventHub-default card, of type Azure EventHubs, under Cloud Infrastructure (IaaS). An Office365-Audit install named default adds one card per integration it creates: Office365Audit-default (type Office365), Office365Audit-default-ResourceWatch (ResourceWatch) and Office365Audit-default-AzureAudit (Azure AD Audit).

What the application creates for you​

Installing an application stands up the source, the processors, and the sinks as a unit. That is why the next step's pipeline diagram suddenly has more in it than it did five minutes ago: an Office365-Audit install produces three plugin data sources, one per collection path, feeding two routers, which fan out to the data lake sinks and to two management queues, and it creates the three indexes in the managed lake as a side effect. That last detail is why a name that is already taken aborts the whole application rather than just one stream.

Step 4: Look at the Pipeline It Built​

  1. In the navigation rail, open Platform.
  2. Find the new sources, routers, and sinks.
  3. Trace the path a record will take, left to right.

The purpose of this step is comprehension, not configuration; do not change anything yet.

Platform page showing the pipeline diagram with a column of sources on the left, routers with their pipes in the middle, and sinks on the right, joined by connection lines, with Add Source, Add Router, and Add Sink buttons at the foot of the columns

The page is titled Platform, subtitled The configuration and status of the platform., with a Refresh button on the right that reloads the diagram. It draws the pipeline as three columns read in the direction data flows: Sources, Routers, and Sinks. Each column ends with a dashed button (Add Source +, Add Router +, Add Sink +) for creating a new node of that type.

  • A source card shows a type icon, the source name, and a label for the transport feeding it. An API-polled feed like this one appears as Plugin Data Source; other transports appear as Mgmt Queue or Cloud Syslog.
  • A router card lists the pipes it runs, each row showing the pipe name and its processor count, for example (1 procs).
  • A sink card shows the sink name and its type label, such as Data Lake or Mgmt Queue.

Nodes that are actively moving data are outlined in green, with a small green graph of their recent volume above the card's upper-right corner; idle nodes have a grey outline and no graph. Small circular ports sit on the edges of each card, and the lines between them trace the path an event takes: solid green where a connection is carrying data, solid grey from an idle node. Every card opens a panel with that component's settings, state, and event metrics; see Platform.

Immediately after an install the new nodes will be grey. Green means data has moved, and that is step 3.

How to Tell It Worked​

  • The application is listed on Applications as Office365-Audit, with its display name beneath it and a green Running badge.
  • Its details page, opened by clicking its row, shows the values you entered under Parameters with the secret masked, and an Actions list of the setup steps the install carried out.
  • New sources, routers, and sinks are visible on the Platform diagram.
  • In Entra, all nine permissions read Granted for <tenant> and the client secret has not expired.
Seeing events in search is not the check for this step

That is step 3, and it can lag by hours: up to 12 for the Office 365 unified audit log on a brand-new subscription. An application that reports Running with an empty index on the afternoon of the install has not failed.

If It Did Not Work​

SymptomLikely causeWhat to do
Error (v1: Aborted) immediately after install, with an index name in the error messageThat index name is already taken in the lakeUninstall the conflicting application, or reinstall this one with different index names.
Error (v1: Aborted), and no index is named in the errorThe Secret ID was pasted instead of the secret Value, or the secret has expiredUninstall, then reinstall with the secret's Value. If it was never captured, create a new secret; the old value is unrecoverable.
Running, but the Office365 index stays emptyUnified audit logging is off in the tenant, or the subscription is still inside its first-content windowCheck UnifiedAuditLogIngestionEnabled. If it is True, wait out the 12 hours before investigating further.
MSEntra fills but AzureSigninLogs stays emptyThe tenant has no Entra ID P1 or P2 licenceExpected. The sign-in API is premium-only; the rest of the integration is unaffected.
Some calls return 403 Forbidden while others workAdmin consent was granted before all nine permissions were addedReturn to API permissions and Grant admin consent again. Every row must read Granted.
Collection worked, then stopped months laterThe client secret expired; 180 days is the portal's defaultRotate the secret.

To uninstall, click Uninstall at the top right of the application's details page (v1: the red Uninstall button at the foot of its details panel on Platform → Applications). In the v2 interface, running Dry run before Install Application catches a wrong or expired secret before anything is installed.

The full symptom table, including the AF10001 and AF20022 API error codes, is on Office 365 Audit → Troubleshooting.

Next Step​

3. Confirm Data Is Arriving: verify ingress in three independent places.