Filtering App Insights Server-side Trace messages

Previously I posted about using a Log4Net Appender to record Sitecore logs to Application Insights. That code will write Trace Messages to App Insights. I’m already filtering the messages to WARN or above using standard Log4Net <filter>s – but what if I need to filter more particular messages. Well, I wrote a telemetry processor to do this, just like Requests and Dependencies.

Continue reading “Filtering App Insights Server-side Trace messages”
Filtering App Insights Server-side Trace messages

Writing Sitecore Logs to Azure Application Insights in IAAS/On Prem

Sitecore’s installer for Azure app services installs a neat feature; a Log4Net appender that writes Sitecore log entries to Application Insights as TRACE messages. Nifty! However, for reasons I cannot comprehend, this is not included in the normal installer. That’s a terrible shame, as App Insights is still useful for Sitecore running on actual tin or in a VM.

Continue reading “Writing Sitecore Logs to Azure Application Insights in IAAS/On Prem”
Writing Sitecore Logs to Azure Application Insights in IAAS/On Prem

Filtering App Insights Server-side Dependency messages

So, previously I’ve written about filtering out all the successful Dependency messages going to App Insights. What about unsuccessful ones, though?

My Sitecore instance seems have a failing dependency that is clogging up my logs. It’s the same as mentioned in this StackExchange question. It doesn’t seem to cause any issue, though… and it isn’t every environment either. Anyway, I’d like to block it. Telemetry processors to the rescue…

Continue reading “Filtering App Insights Server-side Dependency messages”
Filtering App Insights Server-side Dependency messages

Filtering App Insights server-side Health Check requests

So, again, I’m trying to tame Application Insights. My logs are filling up with various requests for different health-check URLs. These get requested, over and over, day after day, and all are recorded in App Insights as Requests. However, I don’t care about these requests if they’re successful. In fact, I only care about if they fail. Can I exclude them?

Yes, I can. I’ll build a telemetry processor to filter them out.

Continue reading “Filtering App Insights server-side Health Check requests”
Filtering App Insights server-side Health Check requests

Filtering App Insights Successful server-side dependencies

Application Insights can record the performance of your dependencies – so things like requests to SQL server, MongoDB, etc.. That’s great – but it can become VERY verbose. I find frequently that most of my allocation of data is spent tracking every damn SQL statement run – and there could be hundreds in a single page load.

You can just turn on Dependency tracking completely – but that seems a bit of nuclear option. What if there IS a problem? I want to know about it!

Well, you can create your own Telemetry filter instead:

public class SuccessfulDependencyFilter : ITelemetryProcessor
{
	private readonly ITelemetryProcessor _nextProcessor;

	public SuccessfulDependencyFilter(ITelemetryProcessor nextProcessor)
	{
		_nextProcessor = nextProcessor;
	}

	public void Process(ITelemetry telemetry)
	{
		DependencyTelemetry dependencyTelemetry = telemetry as DependencyTelemetry;
		if (dependencyTelemetry != null)
		{
			if (dependencyTelemetry.Success == true )
			{
				return;					
			}
		}

		_nextProcessor.Process(telemetry);
	}
}

This ITelemetryProcessor will check if the telemetry is a successful Dependency, and if it is, end processing (i.e. don’t write anything to App Insights).

To use it, add it to the ApplicationInsights.config in the TelemetryProcessors section:

Obviously, this means that if you have problems like a slow dependency that is still eventually successful then you won’t have any telemetry to show you that – but it VASTLY reduces the data being captured.

Filtering App Insights Successful server-side dependencies

Filtering App Insights Client-Side successful dependencies

So, I found that our client JavaScript was recording quite a lot of successful dependency messages for loading 3rd party scripts:

These are all analytics tools, and to be honest, I don’t care about them. Sure, it can be useful to know how long they take to load, but these are loaded after the page is ready, so even if they are slow they shouldn’t impact performance. And I don’t really think I need to know every time a user loads these analytics tools.

Therefore, I wrote a telemetry filter to block sending them. I could just use sampling – but I’d prefer to have none.

onInit: function (sdk) {
	/*	Once the application insights instance has loaded and initialized this method will be called 
	    This filter will block successful remote dependency requests being logged. */
	sdk.addTelemetryInitializer(function(envelope) {
		if (envelope.baseType === 'RemoteDependencyData')
		{
			if (envelope.baseData.success)
			{
				return false;
			}
		}
	});
},

From my testing, if the user blocks loading of a remote dependency I don’t see any kind of message being returned – even a failure, which is good.

Filtering App Insights Client-Side successful dependencies

Filtering App Insights Client Exceptions from 3rd party JavaScript

So, we are using App Insights, and when we moved the client side script for recording JavaScript errors to our integration test instance we started to get a lot of errors of the form:

Script error: The browser’s same-origin policy prevents us from getting the details of this exception. Consider using the ‘crossorigin’ attribute.

There were a lot of these errors:

… and investigating them showed that the problems came from 3rd party JavaScript. All of these are inserted by Google Tag Manager, and aren’t in the site, or local development.

Well, I’m not going to be able to fix JavaScript written by 2 third-parties, and that isn’t even loaded directly by my page – so instead I’m going to ignore that error…

Continue reading “Filtering App Insights Client Exceptions from 3rd party JavaScript”
Filtering App Insights Client Exceptions from 3rd party JavaScript

Keeping the size of of Sitecore Azure Backups under control

I’ve written before about Azure Backup fails due to Content Testing Screenshots not clearing and the resulting problems with backup size.

That’s not the whole problem though.

Sitecore made some effort to configure some directories to be outside the home folder of the app services, and therefore not subject to backup – but there’s still a lot that shouldn’t be in the backup. Continue reading “Keeping the size of of Sitecore Azure Backups under control”

Keeping the size of of Sitecore Azure Backups under control

Application Initialization for Azure Service Apps (and Sitecore)

We have been having a problem with Sitecore in Azure PAAS – it appears that when auto-scaling scales out, App Services are being put into rotation before they have started up. This is causing all sorts of weirdness.

Sitecore support recommended making sure that we had Application Initialization configured. That seems a good idea. I’m not sure why the guys who set up this instance didn’t; perhaps they were unaware of it (and to be fair, it’s something I’ve not looked at before).

Continue reading “Application Initialization for Azure Service Apps (and Sitecore)”

Application Initialization for Azure Service Apps (and Sitecore)

Azure Backup fails due to Content Testing Screenshots not clearing

We had a problem with Sitecore 9.0.2 in a PAAS environment. Our Azure App Service backups started failing. This was due to the backup size:Failed Backups

Above 10GB you have to use an Azure Storage Account to store your backup, apparently. However, we wondered why our backups had grown so large – they had been a few GB – and why they seemed to be growing. Continue reading “Azure Backup fails due to Content Testing Screenshots not clearing”

Azure Backup fails due to Content Testing Screenshots not clearing