[SQL-Migration] Improve log migrations telemetry (#22927)

- Bucketized errors to track top errors
- Created separate login migration specific error to improve monitoring

---------

Co-authored-by: Akshay Mata <akma@microsoft.com>
This commit is contained in:
AkshayMata
2023-05-03 10:35:44 -07:00
committed by GitHub
parent 2c07c09d0d
commit a8a88ccbeb
6 changed files with 73 additions and 10 deletions

View File

@@ -14,6 +14,7 @@ import { IconPathHelper } from '../constants/iconPathHelper';
import { LoginMigrationStatusCodes } from '../constants/helper';
import { MultiStepStatusDialog } from '../dialog/generic/multiStepStatusDialog';
import { getTelemetryProps, logError, sendSqlMigrationActionEvent, TelemetryAction, TelemetryViews } from '../telemetry';
import { InternalServerError } from '../models/loginMigrationModel';
export class LoginMigrationStatusPage extends MigrationWizardPage {
private _view!: azdata.ModelView;
@@ -93,7 +94,17 @@ export class LoginMigrationStatusPage extends MigrationWizardPage {
};
this._progressLoader.loading = false;
logError(TelemetryViews.LoginMigrationWizard, 'LoginMigrationFailed', 'Login Migrations Internal Server Error');
logError(TelemetryViews.LoginMigrationWizard, 'LoginMigrationFailed', InternalServerError);
sendSqlMigrationActionEvent(
TelemetryViews.LoginMigrationStatusPage,
TelemetryAction.LoginMigrationError,
{
...getTelemetryProps(this.migrationStateModel),
'errorMessage': InternalServerError,
},
{}
);
}
this._logMigrationResult();
@@ -450,9 +461,10 @@ export class LoginMigrationStatusPage extends MigrationWizardPage {
'numberLoginsFailingPerStep': JSON.stringify(Array.from(this.migrationStateModel._loginMigrationModel.errorCountMap)),
'durationPerStepTimestamp': JSON.stringify(Array.from(this.migrationStateModel._loginMigrationModel.durationPerStep)),
'hasSystemError': JSON.stringify(this.migrationStateModel._loginMigrationModel.hasSystemError),
// AKMA TODO: add error code string count map
},
{}
{
'numberLogins': this.migrationStateModel._loginMigrationModel.loginsForMigration.length,
}
);
}
}

View File

@@ -18,6 +18,7 @@ import { AzureSqlDatabaseServer, getVMInstanceView, SqlVMServer } from '../api/a
import { collectSourceLogins, collectTargetLogins, getSourceConnectionId, getSourceConnectionProfile, isSourceConnectionSysAdmin, LoginTableInfo } from '../api/sqlUtils';
import { NetworkInterfaceModel } from '../api/dataModels/azure/networkInterfaceModel';
import { getTelemetryProps, logError, sendSqlMigrationActionEvent, TelemetryAction, TelemetryViews } from '../telemetry';
import { ConnectingToTargetFailed, } from '../models/loginMigrationModel';
export class LoginMigrationTargetSelectionPage extends MigrationWizardPage {
private _view!: azdata.ModelView;
@@ -636,7 +637,16 @@ export class LoginMigrationTargetSelectionPage extends MigrationWizardPage {
loginsOnTarget,
constants.AZURE_SQL_TARGET_CONNECTION_ERROR_TITLE);
logError(TelemetryViews.LoginMigrationTargetSelectionPage, 'ConnectingToTargetFailed', error);
logError(TelemetryViews.LoginMigrationTargetSelectionPage, ConnectingToTargetFailed, error);
sendSqlMigrationActionEvent(
TelemetryViews.LoginMigrationTargetSelectionPage,
TelemetryAction.LoginMigrationError,
{
...getTelemetryProps(this.migrationStateModel),
'errorMessage': ConnectingToTargetFailed,
},
{}
);
connectionSuccessful = false;
}
finally {

View File

@@ -13,7 +13,8 @@ import * as styles from '../constants/styles';
import { collectSourceLogins, collectTargetLogins, getSourceConnectionId, LoginTableInfo } from '../api/sqlUtils';
import { IconPathHelper } from '../constants/iconPathHelper';
import * as utils from '../api/utils';
import { logError, TelemetryViews } from '../telemetry';
import { getTelemetryProps, logError, sendSqlMigrationActionEvent, TelemetryAction, TelemetryViews } from '../telemetry';
import { CollectingSourceLoginsFailed, CollectingTargetLoginsFailed } from '../models/loginMigrationModel';
export class LoginSelectorPage extends MigrationWizardPage {
@@ -367,7 +368,17 @@ export class LoginSelectorPage extends MigrationWizardPage {
description: constants.LOGIN_MIGRATIONS_GET_LOGINS_ERROR(error.message),
};
logError(TelemetryViews.LoginMigrationWizard, 'CollectingSourceLoginsFailed', error);
logError(TelemetryViews.LoginMigrationWizard, CollectingSourceLoginsFailed, error);
sendSqlMigrationActionEvent(
TelemetryViews.LoginMigrationSelectorPage,
TelemetryAction.LoginMigrationError,
{
...getTelemetryProps(this.migrationStateModel),
'errorMessage': CollectingSourceLoginsFailed,
},
{}
);
}
}
@@ -400,7 +411,17 @@ export class LoginSelectorPage extends MigrationWizardPage {
description: constants.LOGIN_MIGRATIONS_GET_LOGINS_ERROR(error.message),
};
logError(TelemetryViews.LoginMigrationWizard, 'CollectingTargetLoginsFailed', error);
logError(TelemetryViews.LoginMigrationWizard, CollectingTargetLoginsFailed, error);
sendSqlMigrationActionEvent(
TelemetryViews.LoginMigrationSelectorPage,
TelemetryAction.LoginMigrationError,
{
...getTelemetryProps(this.migrationStateModel),
'errorMessage': CollectingTargetLoginsFailed,
},
{}
);
}
}