diff --git a/pkg/tsdb/azuremonitor/applicationinsights-datasource.go b/pkg/tsdb/azuremonitor/applicationinsights-datasource.go index 59643c9e027..20c1c3a2bb2 100644 --- a/pkg/tsdb/azuremonitor/applicationinsights-datasource.go +++ b/pkg/tsdb/azuremonitor/applicationinsights-datasource.go @@ -20,7 +20,9 @@ import ( ) // ApplicationInsightsDatasource calls the application insights query API. -type ApplicationInsightsDatasource struct{} +type ApplicationInsightsDatasource struct { + proxy serviceProxy +} // ApplicationInsightsQuery is the model that holds the information // needed to make a metrics query to Application Insights, and the information @@ -41,8 +43,12 @@ type ApplicationInsightsQuery struct { aggregation string } +func (e *ApplicationInsightsDatasource) resourceRequest(rw http.ResponseWriter, req *http.Request, cli *http.Client) { + e.proxy.Do(rw, req, cli) +} + func (e *ApplicationInsightsDatasource) executeTimeSeriesQuery(ctx context.Context, - originalQueries []backend.DataQuery, dsInfo datasourceInfo) (*backend.QueryDataResponse, error) { + originalQueries []backend.DataQuery, dsInfo datasourceInfo, client *http.Client, url string) (*backend.QueryDataResponse, error) { result := backend.NewQueryDataResponse() queries, err := e.buildQueries(originalQueries) @@ -51,7 +57,7 @@ func (e *ApplicationInsightsDatasource) executeTimeSeriesQuery(ctx context.Conte } for _, query := range queries { - queryRes, err := e.executeQuery(ctx, query, dsInfo) + queryRes, err := e.executeQuery(ctx, query, dsInfo, client, url) if err != nil { return nil, err } @@ -122,11 +128,11 @@ func (e *ApplicationInsightsDatasource) buildQueries(queries []backend.DataQuery return applicationInsightsQueries, nil } -func (e *ApplicationInsightsDatasource) executeQuery(ctx context.Context, query *ApplicationInsightsQuery, dsInfo datasourceInfo) ( +func (e *ApplicationInsightsDatasource) executeQuery(ctx context.Context, query *ApplicationInsightsQuery, dsInfo datasourceInfo, client *http.Client, url string) ( backend.DataResponse, error) { dataResponse := backend.DataResponse{} - req, err := e.createRequest(ctx, dsInfo) + req, err := e.createRequest(ctx, dsInfo, url) if err != nil { dataResponse.Error = err return dataResponse, nil @@ -154,7 +160,7 @@ func (e *ApplicationInsightsDatasource) executeQuery(ctx context.Context, query } azlog.Debug("ApplicationInsights", "Request URL", req.URL.String()) - res, err := ctxhttp.Do(ctx, dsInfo.Services[appInsights].HTTPClient, req) + res, err := ctxhttp.Do(ctx, client, req) if err != nil { dataResponse.Error = err return dataResponse, nil @@ -193,16 +199,14 @@ func (e *ApplicationInsightsDatasource) executeQuery(ctx context.Context, query return dataResponse, nil } -func (e *ApplicationInsightsDatasource) createRequest(ctx context.Context, dsInfo datasourceInfo) (*http.Request, error) { +func (e *ApplicationInsightsDatasource) createRequest(ctx context.Context, dsInfo datasourceInfo, url string) (*http.Request, error) { appInsightsAppID := dsInfo.Settings.AppInsightsAppId - req, err := http.NewRequest(http.MethodGet, dsInfo.Services[appInsights].URL, nil) + req, err := http.NewRequest(http.MethodGet, url, nil) if err != nil { azlog.Debug("Failed to create request", "error", err) return nil, errutil.Wrap("Failed to create request", err) } - req.Header.Set("X-API-Key", dsInfo.DecryptedSecureJSONData["appInsightsApiKey"]) - req.URL.Path = fmt.Sprintf("/v1/apps/%s", appInsightsAppID) return req, nil diff --git a/pkg/tsdb/azuremonitor/applicationinsights-datasource_test.go b/pkg/tsdb/azuremonitor/applicationinsights-datasource_test.go index cd3d221891e..69d8a80ab65 100644 --- a/pkg/tsdb/azuremonitor/applicationinsights-datasource_test.go +++ b/pkg/tsdb/azuremonitor/applicationinsights-datasource_test.go @@ -3,11 +3,9 @@ package azuremonitor import ( "context" "encoding/json" - "net/http" "testing" "time" - "github.com/google/go-cmp/cmp" "github.com/grafana/grafana-plugin-sdk-go/backend" "github.com/stretchr/testify/require" @@ -207,43 +205,34 @@ func TestInsightsDimensionsUnmarshalJSON(t *testing.T) { func TestAppInsightsCreateRequest(t *testing.T) { ctx := context.Background() + url := "http://ds" dsInfo := datasourceInfo{ Settings: azureMonitorSettings{AppInsightsAppId: "foo"}, - Services: map[string]datasourceService{ - appInsights: {URL: "http://ds"}, - }, DecryptedSecureJSONData: map[string]string{ "appInsightsApiKey": "key", }, } tests := []struct { - name string - expectedURL string - expectedHeaders http.Header - Err require.ErrorAssertionFunc + name string + expectedURL string + Err require.ErrorAssertionFunc }{ { name: "creates a request", expectedURL: "http://ds/v1/apps/foo", - expectedHeaders: http.Header{ - "X-Api-Key": []string{"key"}, - }, - Err: require.NoError, + Err: require.NoError, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { ds := ApplicationInsightsDatasource{} - req, err := ds.createRequest(ctx, dsInfo) + req, err := ds.createRequest(ctx, dsInfo, url) tt.Err(t, err) if req.URL.String() != tt.expectedURL { t.Errorf("Expecting %s, got %s", tt.expectedURL, req.URL.String()) } - if !cmp.Equal(req.Header, tt.expectedHeaders) { - t.Errorf("Unexpected HTTP headers: %v", cmp.Diff(req.Header, tt.expectedHeaders)) - } }) } } diff --git a/pkg/tsdb/azuremonitor/azure-log-analytics-datasource.go b/pkg/tsdb/azuremonitor/azure-log-analytics-datasource.go index 93ad841773c..84c22371ae9 100644 --- a/pkg/tsdb/azuremonitor/azure-log-analytics-datasource.go +++ b/pkg/tsdb/azuremonitor/azure-log-analytics-datasource.go @@ -22,7 +22,9 @@ import ( ) // AzureLogAnalyticsDatasource calls the Azure Log Analytics API's -type AzureLogAnalyticsDatasource struct{} +type AzureLogAnalyticsDatasource struct { + proxy serviceProxy +} // AzureLogAnalyticsQuery is the query request that is built from the saved values for // from the UI @@ -36,11 +38,15 @@ type AzureLogAnalyticsQuery struct { TimeRange backend.TimeRange } +func (e *AzureLogAnalyticsDatasource) resourceRequest(rw http.ResponseWriter, req *http.Request, cli *http.Client) { + e.proxy.Do(rw, req, cli) +} + // executeTimeSeriesQuery does the following: // 1. build the AzureMonitor url and querystring for each query // 2. executes each query by calling the Azure Monitor API // 3. parses the responses for each query into data frames -func (e *AzureLogAnalyticsDatasource) executeTimeSeriesQuery(ctx context.Context, originalQueries []backend.DataQuery, dsInfo datasourceInfo) (*backend.QueryDataResponse, error) { +func (e *AzureLogAnalyticsDatasource) executeTimeSeriesQuery(ctx context.Context, originalQueries []backend.DataQuery, dsInfo datasourceInfo, client *http.Client, url string) (*backend.QueryDataResponse, error) { result := backend.NewQueryDataResponse() queries, err := e.buildQueries(originalQueries, dsInfo) @@ -49,7 +55,7 @@ func (e *AzureLogAnalyticsDatasource) executeTimeSeriesQuery(ctx context.Context } for _, query := range queries { - result.Responses[query.RefID] = e.executeQuery(ctx, query, dsInfo) + result.Responses[query.RefID] = e.executeQuery(ctx, query, dsInfo, client, url) } return result, nil @@ -119,7 +125,7 @@ func (e *AzureLogAnalyticsDatasource) buildQueries(queries []backend.DataQuery, return azureLogAnalyticsQueries, nil } -func (e *AzureLogAnalyticsDatasource) executeQuery(ctx context.Context, query *AzureLogAnalyticsQuery, dsInfo datasourceInfo) backend.DataResponse { +func (e *AzureLogAnalyticsDatasource) executeQuery(ctx context.Context, query *AzureLogAnalyticsQuery, dsInfo datasourceInfo, client *http.Client, url string) backend.DataResponse { dataResponse := backend.DataResponse{} dataResponseErrorWithExecuted := func(err error) backend.DataResponse { @@ -140,8 +146,7 @@ func (e *AzureLogAnalyticsDatasource) executeQuery(ctx context.Context, query *A return dataResponseErrorWithExecuted(fmt.Errorf("Log Analytics credentials are no longer supported. Go to the data source configuration to update Azure Monitor credentials")) //nolint:golint,stylecheck } - req, err := e.createRequest(ctx, dsInfo) - + req, err := e.createRequest(ctx, dsInfo, url) if err != nil { dataResponse.Error = err return dataResponse @@ -167,7 +172,7 @@ func (e *AzureLogAnalyticsDatasource) executeQuery(ctx context.Context, query *A } azlog.Debug("AzureLogAnalytics", "Request ApiURL", req.URL.String()) - res, err := ctxhttp.Do(ctx, dsInfo.Services[azureLogAnalytics].HTTPClient, req) + res, err := ctxhttp.Do(ctx, client, req) if err != nil { return dataResponseErrorWithExecuted(err) } @@ -217,8 +222,8 @@ func (e *AzureLogAnalyticsDatasource) executeQuery(ctx context.Context, query *A return dataResponse } -func (e *AzureLogAnalyticsDatasource) createRequest(ctx context.Context, dsInfo datasourceInfo) (*http.Request, error) { - req, err := http.NewRequest(http.MethodGet, dsInfo.Services[azureLogAnalytics].URL, nil) +func (e *AzureLogAnalyticsDatasource) createRequest(ctx context.Context, dsInfo datasourceInfo, url string) (*http.Request, error) { + req, err := http.NewRequest(http.MethodGet, url, nil) if err != nil { azlog.Debug("Failed to create request", "error", err) return nil, errutil.Wrap("failed to create request", err) diff --git a/pkg/tsdb/azuremonitor/azure-log-analytics-datasource_test.go b/pkg/tsdb/azuremonitor/azure-log-analytics-datasource_test.go index a9718dd1892..6323ef16bf7 100644 --- a/pkg/tsdb/azuremonitor/azure-log-analytics-datasource_test.go +++ b/pkg/tsdb/azuremonitor/azure-log-analytics-datasource_test.go @@ -181,11 +181,8 @@ func TestBuildingAzureLogAnalyticsQueries(t *testing.T) { func TestLogAnalyticsCreateRequest(t *testing.T) { ctx := context.Background() - dsInfo := datasourceInfo{ - Services: map[string]datasourceService{ - azureLogAnalytics: {URL: "http://ds"}, - }, - } + url := "http://ds" + dsInfo := datasourceInfo{} tests := []struct { name string @@ -204,7 +201,7 @@ func TestLogAnalyticsCreateRequest(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { ds := AzureLogAnalyticsDatasource{} - req, err := ds.createRequest(ctx, dsInfo) + req, err := ds.createRequest(ctx, dsInfo, url) tt.Err(t, err) if req.URL.String() != tt.expectedURL { t.Errorf("Expecting %s, got %s", tt.expectedURL, req.URL.String()) @@ -231,7 +228,7 @@ func Test_executeQueryErrorWithDifferentLogAnalyticsCreds(t *testing.T) { Params: url.Values{}, TimeRange: backend.TimeRange{}, } - res := ds.executeQuery(ctx, query, dsInfo) + res := ds.executeQuery(ctx, query, dsInfo, &http.Client{}, dsInfo.Services[azureLogAnalytics].URL) if res.Error == nil { t.Fatal("expecting an error") } diff --git a/pkg/tsdb/azuremonitor/azure-resource-graph-datasource.go b/pkg/tsdb/azuremonitor/azure-resource-graph-datasource.go index 1ea76783bf0..09fe0a788d8 100644 --- a/pkg/tsdb/azuremonitor/azure-resource-graph-datasource.go +++ b/pkg/tsdb/azuremonitor/azure-resource-graph-datasource.go @@ -22,7 +22,9 @@ import ( ) // AzureResourceGraphDatasource calls the Azure Resource Graph API's -type AzureResourceGraphDatasource struct{} +type AzureResourceGraphDatasource struct { + proxy serviceProxy +} // AzureResourceGraphQuery is the query request that is built from the saved values for // from the UI @@ -38,11 +40,15 @@ type AzureResourceGraphQuery struct { const argAPIVersion = "2021-03-01" const argQueryProviderName = "/providers/Microsoft.ResourceGraph/resources" +func (e *AzureResourceGraphDatasource) resourceRequest(rw http.ResponseWriter, req *http.Request, cli *http.Client) { + e.proxy.Do(rw, req, cli) +} + // executeTimeSeriesQuery does the following: // 1. builds the AzureMonitor url and querystring for each query // 2. executes each query by calling the Azure Monitor API // 3. parses the responses for each query into data frames -func (e *AzureResourceGraphDatasource) executeTimeSeriesQuery(ctx context.Context, originalQueries []backend.DataQuery, dsInfo datasourceInfo) (*backend.QueryDataResponse, error) { +func (e *AzureResourceGraphDatasource) executeTimeSeriesQuery(ctx context.Context, originalQueries []backend.DataQuery, dsInfo datasourceInfo, client *http.Client, url string) (*backend.QueryDataResponse, error) { result := &backend.QueryDataResponse{ Responses: map[string]backend.DataResponse{}, } @@ -53,7 +59,7 @@ func (e *AzureResourceGraphDatasource) executeTimeSeriesQuery(ctx context.Contex } for _, query := range queries { - result.Responses[query.RefID] = e.executeQuery(ctx, query, dsInfo) + result.Responses[query.RefID] = e.executeQuery(ctx, query, dsInfo, client, url) } return result, nil @@ -95,7 +101,7 @@ func (e *AzureResourceGraphDatasource) buildQueries(queries []backend.DataQuery, return azureResourceGraphQueries, nil } -func (e *AzureResourceGraphDatasource) executeQuery(ctx context.Context, query *AzureResourceGraphQuery, dsInfo datasourceInfo) backend.DataResponse { +func (e *AzureResourceGraphDatasource) executeQuery(ctx context.Context, query *AzureResourceGraphQuery, dsInfo datasourceInfo, client *http.Client, dsURL string) backend.DataResponse { dataResponse := backend.DataResponse{} params := url.Values{} @@ -132,7 +138,7 @@ func (e *AzureResourceGraphDatasource) executeQuery(ctx context.Context, query * return dataResponse } - req, err := e.createRequest(ctx, dsInfo, reqBody) + req, err := e.createRequest(ctx, dsInfo, reqBody, dsURL) if err != nil { dataResponse.Error = err @@ -159,7 +165,7 @@ func (e *AzureResourceGraphDatasource) executeQuery(ctx context.Context, query * } azlog.Debug("AzureResourceGraph", "Request ApiURL", req.URL.String()) - res, err := ctxhttp.Do(ctx, dsInfo.Services[azureResourceGraph].HTTPClient, req) + res, err := ctxhttp.Do(ctx, client, req) if err != nil { return dataResponseErrorWithExecuted(err) } @@ -182,8 +188,8 @@ func (e *AzureResourceGraphDatasource) executeQuery(ctx context.Context, query * return dataResponse } -func (e *AzureResourceGraphDatasource) createRequest(ctx context.Context, dsInfo datasourceInfo, reqBody []byte) (*http.Request, error) { - req, err := http.NewRequest(http.MethodPost, dsInfo.Services[azureResourceGraph].URL, bytes.NewBuffer(reqBody)) +func (e *AzureResourceGraphDatasource) createRequest(ctx context.Context, dsInfo datasourceInfo, reqBody []byte, url string) (*http.Request, error) { + req, err := http.NewRequest(http.MethodPost, url, bytes.NewBuffer(reqBody)) if err != nil { azlog.Debug("Failed to create request", "error", err) return nil, errutil.Wrap("failed to create request", err) diff --git a/pkg/tsdb/azuremonitor/azure-resource-graph-datasource_test.go b/pkg/tsdb/azuremonitor/azure-resource-graph-datasource_test.go index cefd2068a03..b939cd5cb3a 100644 --- a/pkg/tsdb/azuremonitor/azure-resource-graph-datasource_test.go +++ b/pkg/tsdb/azuremonitor/azure-resource-graph-datasource_test.go @@ -76,11 +76,8 @@ func TestBuildingAzureResourceGraphQueries(t *testing.T) { func TestAzureResourceGraphCreateRequest(t *testing.T) { ctx := context.Background() - dsInfo := datasourceInfo{ - Services: map[string]datasourceService{ - azureResourceGraph: {URL: "http://ds"}, - }, - } + url := "http://ds" + dsInfo := datasourceInfo{} tests := []struct { name string @@ -102,7 +99,7 @@ func TestAzureResourceGraphCreateRequest(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { ds := AzureResourceGraphDatasource{} - req, err := ds.createRequest(ctx, dsInfo, []byte{}) + req, err := ds.createRequest(ctx, dsInfo, []byte{}, url) tt.Err(t, err) if req.URL.String() != tt.expectedURL { t.Errorf("Expecting %s, got %s", tt.expectedURL, req.URL.String()) diff --git a/pkg/tsdb/azuremonitor/azuremonitor-datasource.go b/pkg/tsdb/azuremonitor/azuremonitor-datasource.go index 2efcd67ea39..f9480e05342 100644 --- a/pkg/tsdb/azuremonitor/azuremonitor-datasource.go +++ b/pkg/tsdb/azuremonitor/azuremonitor-datasource.go @@ -21,7 +21,9 @@ import ( ) // AzureMonitorDatasource calls the Azure Monitor API - one of the four API's supported -type AzureMonitorDatasource struct{} +type AzureMonitorDatasource struct { + proxy serviceProxy +} var ( // 1m, 5m, 15m, 30m, 1h, 6h, 12h, 1d in milliseconds @@ -30,11 +32,15 @@ var ( const azureMonitorAPIVersion = "2018-01-01" +func (e *AzureMonitorDatasource) resourceRequest(rw http.ResponseWriter, req *http.Request, cli *http.Client) { + e.proxy.Do(rw, req, cli) +} + // executeTimeSeriesQuery does the following: // 1. build the AzureMonitor url and querystring for each query // 2. executes each query by calling the Azure Monitor API // 3. parses the responses for each query into data frames -func (e *AzureMonitorDatasource) executeTimeSeriesQuery(ctx context.Context, originalQueries []backend.DataQuery, dsInfo datasourceInfo) (*backend.QueryDataResponse, error) { +func (e *AzureMonitorDatasource) executeTimeSeriesQuery(ctx context.Context, originalQueries []backend.DataQuery, dsInfo datasourceInfo, client *http.Client, url string) (*backend.QueryDataResponse, error) { result := backend.NewQueryDataResponse() queries, err := e.buildQueries(originalQueries, dsInfo) @@ -43,7 +49,7 @@ func (e *AzureMonitorDatasource) executeTimeSeriesQuery(ctx context.Context, ori } for _, query := range queries { - queryRes, resp, err := e.executeQuery(ctx, query, dsInfo) + queryRes, resp, err := e.executeQuery(ctx, query, dsInfo, client, url) if err != nil { return nil, err } @@ -149,10 +155,10 @@ func (e *AzureMonitorDatasource) buildQueries(queries []backend.DataQuery, dsInf return azureMonitorQueries, nil } -func (e *AzureMonitorDatasource) executeQuery(ctx context.Context, query *AzureMonitorQuery, dsInfo datasourceInfo) (backend.DataResponse, AzureMonitorResponse, error) { +func (e *AzureMonitorDatasource) executeQuery(ctx context.Context, query *AzureMonitorQuery, dsInfo datasourceInfo, cli *http.Client, url string) (backend.DataResponse, AzureMonitorResponse, error) { dataResponse := backend.DataResponse{} - req, err := e.createRequest(ctx, dsInfo) + req, err := e.createRequest(ctx, dsInfo, url) if err != nil { dataResponse.Error = err return dataResponse, AzureMonitorResponse{}, nil @@ -180,7 +186,7 @@ func (e *AzureMonitorDatasource) executeQuery(ctx context.Context, query *AzureM azlog.Debug("AzureMonitor", "Request ApiURL", req.URL.String()) azlog.Debug("AzureMonitor", "Target", query.Target) - res, err := ctxhttp.Do(ctx, dsInfo.Services[azureMonitor].HTTPClient, req) + res, err := ctxhttp.Do(ctx, cli, req) if err != nil { dataResponse.Error = err return dataResponse, AzureMonitorResponse{}, nil @@ -200,8 +206,8 @@ func (e *AzureMonitorDatasource) executeQuery(ctx context.Context, query *AzureM return dataResponse, data, nil } -func (e *AzureMonitorDatasource) createRequest(ctx context.Context, dsInfo datasourceInfo) (*http.Request, error) { - req, err := http.NewRequest(http.MethodGet, dsInfo.Services[azureMonitor].URL, nil) +func (e *AzureMonitorDatasource) createRequest(ctx context.Context, dsInfo datasourceInfo, url string) (*http.Request, error) { + req, err := http.NewRequest(http.MethodGet, url, nil) if err != nil { azlog.Debug("Failed to create request", "error", err) return nil, errutil.Wrap("Failed to create request", err) diff --git a/pkg/tsdb/azuremonitor/azuremonitor-datasource_test.go b/pkg/tsdb/azuremonitor/azuremonitor-datasource_test.go index 372f6c8a3f7..48c8009623c 100644 --- a/pkg/tsdb/azuremonitor/azuremonitor-datasource_test.go +++ b/pkg/tsdb/azuremonitor/azuremonitor-datasource_test.go @@ -514,11 +514,8 @@ func loadTestFile(t *testing.T, name string) AzureMonitorResponse { func TestAzureMonitorCreateRequest(t *testing.T) { ctx := context.Background() - dsInfo := datasourceInfo{ - Services: map[string]datasourceService{ - azureMonitor: {URL: "http://ds"}, - }, - } + dsInfo := datasourceInfo{} + url := "http://ds/" tests := []struct { name string @@ -539,7 +536,7 @@ func TestAzureMonitorCreateRequest(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { ds := AzureMonitorDatasource{} - req, err := ds.createRequest(ctx, dsInfo) + req, err := ds.createRequest(ctx, dsInfo, url) tt.Err(t, err) if req.URL.String() != tt.expectedURL { t.Errorf("Expecting %s, got %s", tt.expectedURL, req.URL.String()) diff --git a/pkg/tsdb/azuremonitor/azuremonitor-resource-handler.go b/pkg/tsdb/azuremonitor/azuremonitor-resource-handler.go new file mode 100644 index 00000000000..03e0532a822 --- /dev/null +++ b/pkg/tsdb/azuremonitor/azuremonitor-resource-handler.go @@ -0,0 +1,125 @@ +package azuremonitor + +import ( + "fmt" + "io/ioutil" + "net/http" + "net/url" + "strings" + + "github.com/grafana/grafana-plugin-sdk-go/backend/resource/httpadapter" +) + +func getTarget(original string) (target string, err error) { + splittedPath := strings.Split(original, "/") + if len(splittedPath) < 3 { + err = fmt.Errorf("the request should contain the service on its path") + return + } + target = fmt.Sprintf("/%s", strings.Join(splittedPath[2:], "/")) + return +} + +type httpServiceProxy struct{} + +func (s *httpServiceProxy) Do(rw http.ResponseWriter, req *http.Request, cli *http.Client) http.ResponseWriter { + res, err := cli.Do(req) + if err != nil { + rw.WriteHeader(http.StatusInternalServerError) + _, err = rw.Write([]byte(fmt.Sprintf("unexpected error %v", err))) + if err != nil { + azlog.Error("Unable to write HTTP response", "error", err) + } + return nil + } + defer func() { + if err := res.Body.Close(); err != nil { + azlog.Warn("Failed to close response body", "err", err) + } + }() + + body, err := ioutil.ReadAll(res.Body) + if err != nil { + rw.WriteHeader(http.StatusInternalServerError) + _, err = rw.Write([]byte(fmt.Sprintf("unexpected error %v", err))) + if err != nil { + azlog.Error("Unable to write HTTP response", "error", err) + } + return nil + } + rw.WriteHeader(res.StatusCode) + _, err = rw.Write(body) + if err != nil { + azlog.Error("Unable to write HTTP response", "error", err) + } + + for k, v := range res.Header { + rw.Header().Set(k, v[0]) + for _, v := range v[1:] { + rw.Header().Add(k, v) + } + } + // Returning the response write for testing purposes + return rw +} + +func (s *Service) getDataSourceFromHTTPReq(req *http.Request) (datasourceInfo, error) { + ctx := req.Context() + pluginContext := httpadapter.PluginConfigFromContext(ctx) + i, err := s.im.Get(pluginContext) + if err != nil { + return datasourceInfo{}, nil + } + ds, ok := i.(datasourceInfo) + if !ok { + return datasourceInfo{}, fmt.Errorf("unable to convert datasource from service instance") + } + return ds, nil +} + +func writeResponse(rw http.ResponseWriter, code int, msg string) { + rw.WriteHeader(http.StatusBadRequest) + _, err := rw.Write([]byte(msg)) + if err != nil { + azlog.Error("Unable to write HTTP response", "error", err) + } +} + +func (s *Service) resourceHandler(subDataSource string) func(rw http.ResponseWriter, req *http.Request) { + return func(rw http.ResponseWriter, req *http.Request) { + azlog.Debug("Received resource call", "url", req.URL.String(), "method", req.Method) + + newPath, err := getTarget(req.URL.Path) + if err != nil { + writeResponse(rw, http.StatusBadRequest, err.Error()) + return + } + + dsInfo, err := s.getDataSourceFromHTTPReq(req) + if err != nil { + writeResponse(rw, http.StatusInternalServerError, fmt.Sprintf("unexpected error %v", err)) + return + } + + service := dsInfo.Services[subDataSource] + serviceURL, err := url.Parse(service.URL) + if err != nil { + writeResponse(rw, http.StatusInternalServerError, fmt.Sprintf("unexpected error %v", err)) + return + } + req.URL.Path = newPath + req.URL.Host = serviceURL.Host + req.URL.Scheme = serviceURL.Scheme + + s.executors[subDataSource].resourceRequest(rw, req, service.HTTPClient) + } +} + +// Route definitions shared with the frontend. +// Check: /public/app/plugins/datasource/grafana-azure-monitor-datasource/utils/common.ts +func (s *Service) registerRoutes(mux *http.ServeMux) { + mux.HandleFunc("/azuremonitor/", s.resourceHandler(azureMonitor)) + mux.HandleFunc("/appinsights/", s.resourceHandler(appInsights)) + mux.HandleFunc("/loganalytics/", s.resourceHandler(azureLogAnalytics)) + mux.HandleFunc("/resourcegraph/", s.resourceHandler(azureResourceGraph)) +} diff --git a/pkg/tsdb/azuremonitor/azuremonitor-resource-handler_test.go b/pkg/tsdb/azuremonitor/azuremonitor-resource-handler_test.go new file mode 100644 index 00000000000..081d24fcbaf --- /dev/null +++ b/pkg/tsdb/azuremonitor/azuremonitor-resource-handler_test.go @@ -0,0 +1,122 @@ +package azuremonitor + +import ( + "io/ioutil" + "net/http" + "net/http/httptest" + "testing" + + "github.com/grafana/grafana/pkg/setting" + "github.com/stretchr/testify/require" +) + +func Test_parseResourcePath(t *testing.T) { + tests := []struct { + name string + original string + expectedTarget string + Err require.ErrorAssertionFunc + }{ + { + "Path with a subscription", + "/azuremonitor/subscriptions/44693801", + "/subscriptions/44693801", + require.NoError, + }, + { + "Malformed path", + "/subscriptions?44693801", + "", + require.Error, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + target, err := getTarget(tt.original) + if target != tt.expectedTarget { + t.Errorf("Unexpected target %s expecting %s", target, tt.expectedTarget) + } + tt.Err(t, err) + }) + } +} + +func Test_proxyRequest(t *testing.T) { + tests := []struct { + name string + }{ + {"forwards headers and body"}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Add("foo", "bar") + _, err := w.Write([]byte("result")) + if err != nil { + t.Fatal(err) + } + })) + req, err := http.NewRequest(http.MethodGet, srv.URL, nil) + if err != nil { + t.Error(err) + } + rw := httptest.NewRecorder() + proxy := httpServiceProxy{} + res := proxy.Do(rw, req, srv.Client()) + if res.Header().Get("foo") != "bar" { + t.Errorf("Unexpected headers: %v", res.Header()) + } + result := rw.Result() + body, err := ioutil.ReadAll(result.Body) + if err != nil { + t.Error(err) + } + err = result.Body.Close() + if err != nil { + t.Error(err) + } + if string(body) != "result" { + t.Errorf("Unexpected body: %v", string(body)) + } + }) + } +} + +type fakeProxy struct { + requestedURL string +} + +func (s *fakeProxy) Do(rw http.ResponseWriter, req *http.Request, cli *http.Client) http.ResponseWriter { + s.requestedURL = req.URL.String() + return nil +} + +func Test_resourceHandler(t *testing.T) { + proxy := &fakeProxy{} + s := Service{ + im: &fakeInstance{ + services: map[string]datasourceService{ + azureMonitor: { + URL: routes[setting.AzurePublic][azureMonitor].URL, + HTTPClient: &http.Client{}, + }, + }, + }, + Cfg: &setting.Cfg{}, + executors: map[string]azDatasourceExecutor{ + azureMonitor: &AzureMonitorDatasource{ + proxy: proxy, + }, + }, + } + rw := httptest.NewRecorder() + req, err := http.NewRequest(http.MethodGet, "http://foo/azuremonitor/subscriptions/44693801", nil) + if err != nil { + t.Fatalf("Unexpected error %v", err) + } + s.resourceHandler(azureMonitor)(rw, req) + expectedURL := "https://management.azure.com/subscriptions/44693801" + if proxy.requestedURL != expectedURL { + t.Errorf("Unexpected result URL. Got %s, expecting %s", proxy.requestedURL, expectedURL) + } +} diff --git a/pkg/tsdb/azuremonitor/azuremonitor.go b/pkg/tsdb/azuremonitor/azuremonitor.go index c698c456434..7065bed1d66 100644 --- a/pkg/tsdb/azuremonitor/azuremonitor.go +++ b/pkg/tsdb/azuremonitor/azuremonitor.go @@ -11,6 +11,7 @@ import ( "github.com/grafana/grafana-plugin-sdk-go/backend/datasource" "github.com/grafana/grafana-plugin-sdk-go/backend/httpclient" "github.com/grafana/grafana-plugin-sdk-go/backend/instancemgmt" + "github.com/grafana/grafana-plugin-sdk-go/backend/resource/httpadapter" "github.com/grafana/grafana/pkg/components/simplejson" "github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/plugins" @@ -39,10 +40,17 @@ func init() { }) } +type serviceProxy interface { + Do(rw http.ResponseWriter, req *http.Request, cli *http.Client) http.ResponseWriter +} + type Service struct { PluginManager plugins.Manager `inject:""` Cfg *setting.Cfg `inject:""` BackendPluginManager backendplugin.Manager `inject:""` + HTTPClientProvider *httpclient.Provider `inject:""` + im instancemgmt.InstanceManager + executors map[string]azDatasourceExecutor } type azureMonitorSettings struct { @@ -55,9 +63,8 @@ type datasourceInfo struct { Cloud string Credentials azcredentials.AzureCredentials Settings azureMonitorSettings - Services map[string]datasourceService Routes map[string]azRoute - HTTPCliOpts httpclient.Options + Services map[string]datasourceService JSONData map[string]interface{} DecryptedSecureJSONData map[string]string @@ -70,7 +77,19 @@ type datasourceService struct { HTTPClient *http.Client } -func NewInstanceSettings(cfg *setting.Cfg) datasource.InstanceFactoryFunc { +func getDatasourceService(cfg *setting.Cfg, clientProvider httpclient.Provider, dsInfo datasourceInfo, routeName string) (datasourceService, error) { + route := dsInfo.Routes[routeName] + client, err := newHTTPClient(route, dsInfo, cfg, clientProvider) + if err != nil { + return datasourceService{}, err + } + return datasourceService{ + URL: dsInfo.Routes[routeName].URL, + HTTPClient: client, + }, nil +} + +func NewInstanceSettings(cfg *setting.Cfg, clientProvider httpclient.Provider, executors map[string]azDatasourceExecutor) datasource.InstanceFactoryFunc { return func(settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) { jsonData, err := simplejson.NewJson(settings.JSONData) if err != nil { @@ -99,11 +118,6 @@ func NewInstanceSettings(cfg *setting.Cfg) datasource.InstanceFactoryFunc { return nil, fmt.Errorf("error getting credentials: %w", err) } - httpCliOpts, err := settings.HTTPClientOptions() - if err != nil { - return nil, fmt.Errorf("error getting http options: %w", err) - } - model := datasourceInfo{ Cloud: cloud, Credentials: credentials, @@ -111,9 +125,16 @@ func NewInstanceSettings(cfg *setting.Cfg) datasource.InstanceFactoryFunc { JSONData: jsonDataObj, DecryptedSecureJSONData: settings.DecryptedSecureJSONData, DatasourceID: settings.ID, - Services: map[string]datasourceService{}, Routes: routes[cloud], - HTTPCliOpts: httpCliOpts, + Services: map[string]datasourceService{}, + } + + for routeName := range executors { + service, err := getDatasourceService(cfg, clientProvider, model, routeName) + if err != nil { + return nil, err + } + model.Services[routeName] = service } return model, nil @@ -121,51 +142,60 @@ func NewInstanceSettings(cfg *setting.Cfg) datasource.InstanceFactoryFunc { } type azDatasourceExecutor interface { - executeTimeSeriesQuery(ctx context.Context, originalQueries []backend.DataQuery, dsInfo datasourceInfo) (*backend.QueryDataResponse, error) + executeTimeSeriesQuery(ctx context.Context, originalQueries []backend.DataQuery, dsInfo datasourceInfo, client *http.Client, url string) (*backend.QueryDataResponse, error) + resourceRequest(rw http.ResponseWriter, req *http.Request, cli *http.Client) } -func newExecutor(im instancemgmt.InstanceManager, cfg *setting.Cfg, executors map[string]azDatasourceExecutor) *datasource.QueryTypeMux { +func (s *Service) getDataSourceFromPluginReq(req *backend.QueryDataRequest) (datasourceInfo, error) { + i, err := s.im.Get(req.PluginContext) + if err != nil { + return datasourceInfo{}, err + } + dsInfo, ok := i.(datasourceInfo) + if !ok { + return datasourceInfo{}, fmt.Errorf("unable to convert datasource from service instance") + } + dsInfo.OrgID = req.PluginContext.OrgID + return dsInfo, nil +} + +func (s *Service) newMux() *datasource.QueryTypeMux { mux := datasource.NewQueryTypeMux() - for dsType := range executors { + for dsType := range s.executors { // Make a copy of the string to keep the reference after the iterator dst := dsType mux.HandleFunc(dsType, func(ctx context.Context, req *backend.QueryDataRequest) (*backend.QueryDataResponse, error) { - i, err := im.Get(req.PluginContext) + executor := s.executors[dst] + dsInfo, err := s.getDataSourceFromPluginReq(req) if err != nil { return nil, err } - dsInfo := i.(datasourceInfo) - dsInfo.OrgID = req.PluginContext.OrgID - ds := executors[dst] - if _, ok := dsInfo.Services[dst]; !ok { - // Create an HTTP Client if it has not been created before - route := dsInfo.Routes[dst] - client, err := newHTTPClient(route, dsInfo, cfg) - if err != nil { - return nil, err - } - dsInfo.Services[dst] = datasourceService{ - URL: dsInfo.Routes[dst].URL, - HTTPClient: client, - } + service, ok := dsInfo.Services[dst] + if !ok { + return nil, fmt.Errorf("missing service for %s", dst) } - return ds.executeTimeSeriesQuery(ctx, req.Queries, dsInfo) + return executor.executeTimeSeriesQuery(ctx, req.Queries, dsInfo, service.HTTPClient, service.URL) }) } return mux } func (s *Service) Init() error { - im := datasource.NewInstanceManager(NewInstanceSettings(s.Cfg)) - executors := map[string]azDatasourceExecutor{ - azureMonitor: &AzureMonitorDatasource{}, - appInsights: &ApplicationInsightsDatasource{}, - azureLogAnalytics: &AzureLogAnalyticsDatasource{}, - insightsAnalytics: &InsightsAnalyticsDatasource{}, - azureResourceGraph: &AzureResourceGraphDatasource{}, + proxy := &httpServiceProxy{} + s.executors = map[string]azDatasourceExecutor{ + azureMonitor: &AzureMonitorDatasource{proxy: proxy}, + appInsights: &ApplicationInsightsDatasource{proxy: proxy}, + azureLogAnalytics: &AzureLogAnalyticsDatasource{proxy: proxy}, + insightsAnalytics: &InsightsAnalyticsDatasource{proxy: proxy}, + azureResourceGraph: &AzureResourceGraphDatasource{proxy: proxy}, } + s.im = datasource.NewInstanceManager(NewInstanceSettings(s.Cfg, *s.HTTPClientProvider, s.executors)) + mux := s.newMux() + resourceMux := http.NewServeMux() + s.registerRoutes(resourceMux) factory := coreplugin.New(backend.ServeOpts{ - QueryDataHandler: newExecutor(im, s.Cfg, executors), + QueryDataHandler: mux, + CallResourceHandler: httpadapter.New(resourceMux), }) if err := s.BackendPluginManager.Register(dsName, factory); err != nil { diff --git a/pkg/tsdb/azuremonitor/azuremonitor_test.go b/pkg/tsdb/azuremonitor/azuremonitor_test.go index 93470b1c191..db50b7d1320 100644 --- a/pkg/tsdb/azuremonitor/azuremonitor_test.go +++ b/pkg/tsdb/azuremonitor/azuremonitor_test.go @@ -2,11 +2,12 @@ package azuremonitor import ( "context" + "net/http" "testing" "github.com/google/go-cmp/cmp" - "github.com/google/go-cmp/cmp/cmpopts" "github.com/grafana/grafana-plugin-sdk-go/backend" + "github.com/grafana/grafana-plugin-sdk-go/backend/httpclient" "github.com/grafana/grafana-plugin-sdk-go/backend/instancemgmt" "github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/tsdb/azuremonitor/azcredentials" @@ -35,6 +36,7 @@ func TestNewInstanceSettings(t *testing.T) { JSONData: map[string]interface{}{"azureAuthType": "msi"}, DatasourceID: 40, DecryptedSecureJSONData: map[string]string{"key": "value"}, + Services: map[string]datasourceService{}, }, Err: require.NoError, }, @@ -48,22 +50,25 @@ func TestNewInstanceSettings(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - factory := NewInstanceSettings(cfg) + factory := NewInstanceSettings(cfg, httpclient.Provider{}, map[string]azDatasourceExecutor{}) instance, err := factory(tt.settings) tt.Err(t, err) - if !cmp.Equal(instance, tt.expectedModel, cmpopts.IgnoreFields(datasourceInfo{}, "Services", "HTTPCliOpts")) { + if !cmp.Equal(instance, tt.expectedModel) { t.Errorf("Unexpected instance: %v", cmp.Diff(instance, tt.expectedModel)) } }) } } -type fakeInstance struct{} +type fakeInstance struct { + routes map[string]azRoute + services map[string]datasourceService +} func (f *fakeInstance) Get(pluginContext backend.PluginContext) (instancemgmt.Instance, error) { return datasourceInfo{ - Services: map[string]datasourceService{}, - Routes: routes[azureMonitorPublic], + Routes: f.routes, + Services: f.services, }, nil } @@ -77,19 +82,24 @@ type fakeExecutor struct { expectedURL string } -func (f *fakeExecutor) executeTimeSeriesQuery(ctx context.Context, originalQueries []backend.DataQuery, dsInfo datasourceInfo) (*backend.QueryDataResponse, error) { - if s, ok := dsInfo.Services[f.queryType]; !ok { +func (f *fakeExecutor) resourceRequest(rw http.ResponseWriter, req *http.Request, cli *http.Client) { +} + +func (f *fakeExecutor) executeTimeSeriesQuery(ctx context.Context, originalQueries []backend.DataQuery, dsInfo datasourceInfo, client *http.Client, url string) (*backend.QueryDataResponse, error) { + if client == nil { f.t.Errorf("The HTTP client for %s is missing", f.queryType) } else { - if s.URL != f.expectedURL { - f.t.Errorf("Unexpected URL %s wanted %s", s.URL, f.expectedURL) + if url != f.expectedURL { + f.t.Errorf("Unexpected URL %s wanted %s", url, f.expectedURL) } } return &backend.QueryDataResponse{}, nil } -func Test_newExecutor(t *testing.T) { - cfg := &setting.Cfg{} +func Test_newMux(t *testing.T) { + cfg := &setting.Cfg{ + Azure: setting.AzureSettings{}, + } tests := []struct { name string @@ -113,13 +123,26 @@ func Test_newExecutor(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - mux := newExecutor(&fakeInstance{}, cfg, map[string]azDatasourceExecutor{ - tt.queryType: &fakeExecutor{ - t: t, - queryType: tt.queryType, - expectedURL: tt.expectedURL, + s := &Service{ + Cfg: cfg, + im: &fakeInstance{ + routes: routes[azureMonitorPublic], + services: map[string]datasourceService{ + tt.queryType: { + URL: routes[azureMonitorPublic][tt.queryType].URL, + HTTPClient: &http.Client{}, + }, + }, }, - }) + executors: map[string]azDatasourceExecutor{ + tt.queryType: &fakeExecutor{ + t: t, + queryType: tt.queryType, + expectedURL: tt.expectedURL, + }, + }, + } + mux := s.newMux() res, err := mux.QueryData(context.TODO(), &backend.QueryDataRequest{ PluginContext: backend.PluginContext{}, Queries: []backend.DataQuery{ diff --git a/pkg/tsdb/azuremonitor/httpclient.go b/pkg/tsdb/azuremonitor/httpclient.go index 1d4035f20e1..af615680ae5 100644 --- a/pkg/tsdb/azuremonitor/httpclient.go +++ b/pkg/tsdb/azuremonitor/httpclient.go @@ -8,34 +8,39 @@ import ( "github.com/grafana/grafana/pkg/tsdb/azuremonitor/aztokenprovider" ) -func httpClientProvider(route azRoute, model datasourceInfo, cfg *setting.Cfg) (*httpclient.Provider, error) { - var clientProvider *httpclient.Provider +func getMiddlewares(route azRoute, model datasourceInfo, cfg *setting.Cfg) ([]httpclient.Middleware, error) { + middlewares := []httpclient.Middleware{} if len(route.Scopes) > 0 { tokenProvider, err := aztokenprovider.NewAzureAccessTokenProvider(cfg, model.Credentials) if err != nil { return nil, err } - - clientProvider = httpclient.NewProvider(httpclient.ProviderOptions{ - Middlewares: []httpclient.Middleware{ - aztokenprovider.AuthMiddleware(tokenProvider, route.Scopes), - }, - }) - } else { - clientProvider = httpclient.NewProvider() + middlewares = append(middlewares, aztokenprovider.AuthMiddleware(tokenProvider, route.Scopes)) } - return clientProvider, nil + if _, ok := model.DecryptedSecureJSONData["appInsightsApiKey"]; ok && (route.URL == azAppInsights.URL || route.URL == azChinaAppInsights.URL) { + // Inject API-Key for AppInsights + apiKeyMiddleware := httpclient.MiddlewareFunc(func(opts httpclient.Options, next http.RoundTripper) http.RoundTripper { + return httpclient.RoundTripperFunc(func(req *http.Request) (*http.Response, error) { + req.Header.Set("X-API-Key", model.DecryptedSecureJSONData["appInsightsApiKey"]) + return next.RoundTrip(req) + }) + }) + middlewares = append(middlewares, apiKeyMiddleware) + } + + return middlewares, nil } -func newHTTPClient(route azRoute, model datasourceInfo, cfg *setting.Cfg) (*http.Client, error) { - model.HTTPCliOpts.Headers = route.Headers - - clientProvider, err := httpClientProvider(route, model, cfg) +func newHTTPClient(route azRoute, model datasourceInfo, cfg *setting.Cfg, clientProvider httpclient.Provider) (*http.Client, error) { + m, err := getMiddlewares(route, model, cfg) if err != nil { return nil, err } - return clientProvider.New(model.HTTPCliOpts) + return clientProvider.New(httpclient.Options{ + Headers: route.Headers, + Middlewares: m, + }) } diff --git a/pkg/tsdb/azuremonitor/httpclient_test.go b/pkg/tsdb/azuremonitor/httpclient_test.go index 4add39aa855..895d2fd7722 100644 --- a/pkg/tsdb/azuremonitor/httpclient_test.go +++ b/pkg/tsdb/azuremonitor/httpclient_test.go @@ -10,21 +10,37 @@ import ( func Test_httpCliProvider(t *testing.T) { cfg := &setting.Cfg{} - model := datasourceInfo{ - Credentials: &azcredentials.AzureClientSecretCredentials{}, - } tests := []struct { name string route azRoute + model datasourceInfo expectedMiddlewares int Err require.ErrorAssertionFunc }{ { - name: "creates an HTTP client with a middleware", + name: "creates an HTTP client with a middleware due to the scope", route: azRoute{ URL: "http://route", Scopes: []string{"http://route/.default"}, }, + model: datasourceInfo{ + Credentials: &azcredentials.AzureClientSecretCredentials{}, + }, + expectedMiddlewares: 1, + Err: require.NoError, + }, + { + name: "creates an HTTP client with a middleware due to an app key", + route: azRoute{ + URL: azAppInsights.URL, + Scopes: []string{}, + }, + model: datasourceInfo{ + Credentials: &azcredentials.AzureClientSecretCredentials{}, + DecryptedSecureJSONData: map[string]string{ + "appInsightsApiKey": "foo", + }, + }, expectedMiddlewares: 1, Err: require.NoError, }, @@ -34,20 +50,22 @@ func Test_httpCliProvider(t *testing.T) { URL: "http://route", Scopes: []string{}, }, - // httpclient.NewProvider returns a client with 2 middlewares by default - expectedMiddlewares: 2, + model: datasourceInfo{ + Credentials: &azcredentials.AzureClientSecretCredentials{}, + }, + expectedMiddlewares: 0, Err: require.NoError, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - cli, err := httpClientProvider(tt.route, model, cfg) + m, err := getMiddlewares(tt.route, tt.model, cfg) require.NoError(t, err) // Cannot test that the cli middleware works properly since the azcore sdk // rejects the TLS certs (if provided) - if len(cli.Opts.Middlewares) != tt.expectedMiddlewares { - t.Errorf("Unexpected middlewares: %v", cli.Opts.Middlewares) + if len(m) != tt.expectedMiddlewares { + t.Errorf("Unexpected middlewares: %v", m) } }) } diff --git a/pkg/tsdb/azuremonitor/insights-analytics-datasource.go b/pkg/tsdb/azuremonitor/insights-analytics-datasource.go index 87e109e527d..fa3a165104f 100644 --- a/pkg/tsdb/azuremonitor/insights-analytics-datasource.go +++ b/pkg/tsdb/azuremonitor/insights-analytics-datasource.go @@ -17,7 +17,9 @@ import ( "golang.org/x/net/context/ctxhttp" ) -type InsightsAnalyticsDatasource struct{} +type InsightsAnalyticsDatasource struct { + proxy serviceProxy +} type InsightsAnalyticsQuery struct { RefID string @@ -31,8 +33,12 @@ type InsightsAnalyticsQuery struct { Target string } +func (e *InsightsAnalyticsDatasource) resourceRequest(rw http.ResponseWriter, req *http.Request, cli *http.Client) { + e.proxy.Do(rw, req, cli) +} + func (e *InsightsAnalyticsDatasource) executeTimeSeriesQuery(ctx context.Context, - originalQueries []backend.DataQuery, dsInfo datasourceInfo) (*backend.QueryDataResponse, error) { + originalQueries []backend.DataQuery, dsInfo datasourceInfo, client *http.Client, url string) (*backend.QueryDataResponse, error) { result := backend.NewQueryDataResponse() queries, err := e.buildQueries(originalQueries, dsInfo) @@ -41,7 +47,7 @@ func (e *InsightsAnalyticsDatasource) executeTimeSeriesQuery(ctx context.Context } for _, query := range queries { - result.Responses[query.RefID] = e.executeQuery(ctx, query, dsInfo) + result.Responses[query.RefID] = e.executeQuery(ctx, query, dsInfo, client, url) } return result, nil @@ -80,7 +86,7 @@ func (e *InsightsAnalyticsDatasource) buildQueries(queries []backend.DataQuery, return iaQueries, nil } -func (e *InsightsAnalyticsDatasource) executeQuery(ctx context.Context, query *InsightsAnalyticsQuery, dsInfo datasourceInfo) backend.DataResponse { +func (e *InsightsAnalyticsDatasource) executeQuery(ctx context.Context, query *InsightsAnalyticsQuery, dsInfo datasourceInfo, client *http.Client, url string) backend.DataResponse { dataResponse := backend.DataResponse{} dataResponseError := func(err error) backend.DataResponse { @@ -88,7 +94,7 @@ func (e *InsightsAnalyticsDatasource) executeQuery(ctx context.Context, query *I return dataResponse } - req, err := e.createRequest(ctx, dsInfo) + req, err := e.createRequest(ctx, dsInfo, url) if err != nil { return dataResponseError(err) } @@ -112,7 +118,7 @@ func (e *InsightsAnalyticsDatasource) executeQuery(ctx context.Context, query *I } azlog.Debug("ApplicationInsights", "Request URL", req.URL.String()) - res, err := ctxhttp.Do(ctx, dsInfo.Services[appInsights].HTTPClient, req) + res, err := ctxhttp.Do(ctx, client, req) if err != nil { return dataResponseError(err) } @@ -168,15 +174,14 @@ func (e *InsightsAnalyticsDatasource) executeQuery(ctx context.Context, query *I return dataResponse } -func (e *InsightsAnalyticsDatasource) createRequest(ctx context.Context, dsInfo datasourceInfo) (*http.Request, error) { +func (e *InsightsAnalyticsDatasource) createRequest(ctx context.Context, dsInfo datasourceInfo, url string) (*http.Request, error) { appInsightsAppID := dsInfo.Settings.AppInsightsAppId - req, err := http.NewRequest(http.MethodGet, dsInfo.Services[insightsAnalytics].URL, nil) + req, err := http.NewRequest(http.MethodGet, url, nil) if err != nil { azlog.Debug("Failed to create request", "error", err) return nil, errutil.Wrap("Failed to create request", err) } - req.Header.Set("X-API-Key", dsInfo.DecryptedSecureJSONData["appInsightsApiKey"]) req.URL.Path = fmt.Sprintf("/v1/apps/%s", appInsightsAppID) return req, nil } diff --git a/pkg/tsdb/azuremonitor/insights-analytics-datasource_test.go b/pkg/tsdb/azuremonitor/insights-analytics-datasource_test.go index 90566ed7b72..8b0e118e987 100644 --- a/pkg/tsdb/azuremonitor/insights-analytics-datasource_test.go +++ b/pkg/tsdb/azuremonitor/insights-analytics-datasource_test.go @@ -5,17 +5,14 @@ import ( "net/http" "testing" - "github.com/google/go-cmp/cmp" "github.com/stretchr/testify/require" ) func TestInsightsAnalyticsCreateRequest(t *testing.T) { ctx := context.Background() + url := "http://ds" dsInfo := datasourceInfo{ Settings: azureMonitorSettings{AppInsightsAppId: "foo"}, - Services: map[string]datasourceService{ - insightsAnalytics: {URL: "http://ds"}, - }, DecryptedSecureJSONData: map[string]string{ "appInsightsApiKey": "key", }, @@ -30,24 +27,18 @@ func TestInsightsAnalyticsCreateRequest(t *testing.T) { { name: "creates a request", expectedURL: "http://ds/v1/apps/foo", - expectedHeaders: http.Header{ - "X-Api-Key": []string{"key"}, - }, - Err: require.NoError, + Err: require.NoError, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { ds := InsightsAnalyticsDatasource{} - req, err := ds.createRequest(ctx, dsInfo) + req, err := ds.createRequest(ctx, dsInfo, url) tt.Err(t, err) if req.URL.String() != tt.expectedURL { t.Errorf("Expecting %s, got %s", tt.expectedURL, req.URL.String()) } - if !cmp.Equal(req.Header, tt.expectedHeaders) { - t.Errorf("Unexpected HTTP headers: %v", cmp.Diff(req.Header, tt.expectedHeaders)) - } }) } } diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/api/routes.ts b/public/app/plugins/datasource/grafana-azure-monitor-datasource/api/routes.ts deleted file mode 100644 index 7a1cfa23c19..00000000000 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/api/routes.ts +++ /dev/null @@ -1,38 +0,0 @@ -export function getManagementApiRoute(azureCloud: string): string { - switch (azureCloud) { - case 'azuremonitor': - return 'azuremonitor'; - case 'chinaazuremonitor': - return 'chinaazuremonitor'; - case 'govazuremonitor': - return 'govazuremonitor'; - case 'germanyazuremonitor': - return 'germanyazuremonitor'; - default: - throw new Error('The cloud not supported.'); - } -} - -export function getLogAnalyticsApiRoute(azureCloud: string): string { - switch (azureCloud) { - case 'azuremonitor': - return 'loganalyticsazure'; - case 'chinaazuremonitor': - return 'chinaloganalyticsazure'; - case 'govazuremonitor': - return 'govloganalyticsazure'; - default: - throw new Error('The cloud not supported.'); - } -} - -export function getAppInsightsApiRoute(azureCloud: string): string { - switch (azureCloud) { - case 'azuremonitor': - return 'appinsights'; - case 'chinaazuremonitor': - return 'chinaappinsights'; - default: - throw new Error('The cloud not supported.'); - } -} diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/app_insights/app_insights_datasource.test.ts b/public/app/plugins/datasource/grafana-azure-monitor-datasource/app_insights/app_insights_datasource.test.ts index 02608d1b976..78731f57f3f 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/app_insights/app_insights_datasource.test.ts +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/app_insights/app_insights_datasource.test.ts @@ -15,7 +15,6 @@ jest.mock('@grafana/runtime', () => ({ })); describe('AppInsightsDatasource', () => { - const datasourceRequestMock = jest.spyOn(backendSrv, 'datasourceRequest'); const fetchMock = jest.spyOn(backendSrv, 'fetch'); const ctx: any = {}; @@ -53,8 +52,8 @@ describe('AppInsightsDatasource', () => { }; beforeEach(() => { - datasourceRequestMock.mockImplementation(() => { - return Promise.resolve({ data: response, status: 200 }); + ctx.ds.getResource = jest.fn().mockImplementation(() => { + return Promise.resolve(response); }); }); @@ -78,7 +77,7 @@ describe('AppInsightsDatasource', () => { }; beforeEach(() => { - datasourceRequestMock.mockImplementation(() => { + ctx.ds.getResource = jest.fn().mockImplementation(() => { return Promise.reject(error); }); }); @@ -106,7 +105,7 @@ describe('AppInsightsDatasource', () => { }; beforeEach(() => { - datasourceRequestMock.mockImplementation(() => { + ctx.ds.getResource = jest.fn().mockImplementation(() => { return Promise.reject(error); }); }); @@ -419,9 +418,9 @@ describe('AppInsightsDatasource', () => { }; beforeEach(() => { - datasourceRequestMock.mockImplementation((options: { url: string }) => { - expect(options.url).toContain('/metrics/metadata'); - return Promise.resolve({ data: response, status: 200 }); + ctx.ds.getResource = jest.fn().mockImplementation((path) => { + expect(path).toContain('/metrics/metadata'); + return Promise.resolve(response); }); }); @@ -457,9 +456,9 @@ describe('AppInsightsDatasource', () => { }; beforeEach(() => { - datasourceRequestMock.mockImplementation((options: { url: string }) => { - expect(options.url).toContain('/metrics/metadata'); - return Promise.resolve({ data: response, status: 200 }); + ctx.ds.getResource = jest.fn().mockImplementation((path) => { + expect(path).toContain('/metrics/metadata'); + return Promise.resolve(response); }); }); @@ -485,8 +484,8 @@ describe('AppInsightsDatasource', () => { }; beforeEach(() => { - datasourceRequestMock.mockImplementation((options: { url: string }) => { - expect(options.url).toContain('/metrics/metadata'); + ctx.ds.getResource = jest.fn().mockImplementation((path) => { + expect(path).toContain('/metrics/metadata'); return Promise.resolve({ data: response, status: 200 }); }); }); @@ -523,8 +522,8 @@ describe('AppInsightsDatasource', () => { }; beforeEach(() => { - datasourceRequestMock.mockImplementation((options: { url: string }) => { - expect(options.url).toContain('/metrics/metadata'); + ctx.ds.getResource = jest.fn().mockImplementation((path) => { + expect(path).toContain('/metrics/metadata'); return Promise.resolve({ data: response, status: 200 }); }); }); diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/app_insights/app_insights_datasource.ts b/public/app/plugins/datasource/grafana-azure-monitor-datasource/app_insights/app_insights_datasource.ts index 78798241160..dfa016fa19b 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/app_insights/app_insights_datasource.ts +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/app_insights/app_insights_datasource.ts @@ -1,12 +1,11 @@ import { DataQueryRequest, DataSourceInstanceSettings, ScopedVars, MetricFindValue } from '@grafana/data'; -import { getBackendSrv, getTemplateSrv, DataSourceWithBackend } from '@grafana/runtime'; +import { getTemplateSrv, DataSourceWithBackend } from '@grafana/runtime'; import { isString } from 'lodash'; import TimegrainConverter from '../time_grain_converter'; import { AzureDataSourceJsonData, AzureMonitorQuery, AzureQueryType, DatasourceValidationResult } from '../types'; +import { routeNames } from '../utils/common'; import ResponseParser from './response_parser'; -import { getAzureCloud } from '../credentials'; -import { getAppInsightsApiRoute } from '../api/routes'; export interface LogAnalyticsColumn { text: string; @@ -14,8 +13,7 @@ export interface LogAnalyticsColumn { } export default class AppInsightsDatasource extends DataSourceWithBackend { - url: string; - baseUrl: string; + resourcePath: string; version = 'beta'; applicationId: string; logAnalyticsColumns: { [key: string]: LogAnalyticsColumn[] } = {}; @@ -24,11 +22,7 @@ export default class AppInsightsDatasource extends DataSourceWithBackend { - const url = `${this.baseUrl}/metrics/metadata`; - return this.doRequest(url) + const path = `${this.resourcePath}/metrics/metadata`; + return this.getResource(path) .then((response: any) => { - if (response.status === 200) { - return { - status: 'success', - message: 'Successfully queried the Application Insights service.', - title: 'Success', - }; - } - return { - status: 'error', - message: 'Application Insights: Returned http status code ' + response.status, + status: 'success', + message: 'Successfully queried the Application Insights service.', + title: 'Success', }; }) .catch((error: any) => { @@ -169,29 +156,14 @@ export default class AppInsightsDatasource extends DataSourceWithBackend { - return getBackendSrv() - .datasourceRequest({ - url: this.url + url, - method: 'GET', - }) - .catch((error: any) => { - if (maxRetries > 0) { - return this.doRequest(url, maxRetries - 1); - } - - throw error; - }); - } - getMetricNames() { - const url = `${this.baseUrl}/metrics/metadata`; - return this.doRequest(url).then(ResponseParser.parseMetricNames); + const path = `${this.resourcePath}/metrics/metadata`; + return this.getResource(path).then(ResponseParser.parseMetricNames); } getMetricMetadata(metricName: string) { - const url = `${this.baseUrl}/metrics/metadata`; - return this.doRequest(url).then((result: any) => { + const path = `${this.resourcePath}/metrics/metadata`; + return this.getResource(path).then((result: any) => { return new ResponseParser(result).parseMetadata(metricName); }); } @@ -203,8 +175,8 @@ export default class AppInsightsDatasource extends DataSourceWithBackend { + const path = `${this.resourcePath}/query/schema`; + return this.getResource(path).then((result: any) => { const schema = new ResponseParser(result).parseQuerySchema(); // console.log(schema); return schema; diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/app_insights/response_parser.ts b/public/app/plugins/datasource/grafana-azure-monitor-datasource/app_insights/response_parser.ts index 309bd2a2d16..fbf8349c05a 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/app_insights/response_parser.ts +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/app_insights/response_parser.ts @@ -12,11 +12,11 @@ export default class ResponseParser { const xaxis = this.results[i].query.xaxis; const yaxises = this.results[i].query.yaxis; const spliton = this.results[i].query.spliton; - columns = this.results[i].result.data.Tables[0].Columns; - const rows = this.results[i].result.data.Tables[0].Rows; + columns = this.results[i].result.Tables[0].Columns; + const rows = this.results[i].result.Tables[0].Rows; data = concat(data, this.parseRawQueryResultRow(this.results[i].query, columns, rows, xaxis, yaxises, spliton)); } else { - const value = this.results[i].result.data.value; + const value = this.results[i].result.value; const alias = this.results[i].query.alias; data = concat(data, this.parseQueryResultRow(this.results[i].query, value, alias)); } @@ -174,14 +174,14 @@ export default class ResponseParser { return dateTime(dateTimeValue).valueOf(); } - static parseMetricNames(result: { data: { metrics: any } }) { - const keys = _keys(result.data.metrics); + static parseMetricNames(result: { metrics: any }) { + const keys = _keys(result.metrics); return ResponseParser.toTextValueList(keys); } parseMetadata(metricName: string) { - const metric = this.results.data.metrics[metricName]; + const metric = this.results.metrics[metricName]; if (!metric) { throw Error('No data found for metric: ' + metricName); @@ -203,9 +203,9 @@ export default class ResponseParser { Type: 'AppInsights', Tables: {}, }; - if (this.results && this.results.data && this.results.data.Tables) { - for (let i = 0; i < this.results.data.Tables[0].Rows.length; i++) { - const column = this.results.data.Tables[0].Rows[i]; + if (this.results && this.results && this.results.Tables) { + for (let i = 0; i < this.results.Tables[0].Rows.length; i++) { + const column = this.results.Tables[0].Rows[i]; const columnTable = column[0]; const columnName = column[1]; const columnType = column[2]; diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_log_analytics/azure_log_analytics_datasource.test.ts b/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_log_analytics/azure_log_analytics_datasource.test.ts index 11db877acd1..50bbddc00bf 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_log_analytics/azure_log_analytics_datasource.test.ts +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_log_analytics/azure_log_analytics_datasource.test.ts @@ -3,14 +3,12 @@ import FakeSchemaData from './__mocks__/schema'; import { TemplateSrv } from 'app/features/templating/template_srv'; import { AzureLogsVariable, DatasourceValidationResult } from '../types'; import { toUtc } from '@grafana/data'; -import { backendSrv } from 'app/core/services/backend_srv'; const templateSrv = new TemplateSrv(); jest.mock('app/core/services/backend_srv'); jest.mock('@grafana/runtime', () => ({ ...((jest.requireActual('@grafana/runtime') as unknown) as object), - getBackendSrv: () => backendSrv, getTemplateSrv: () => templateSrv, })); @@ -22,13 +20,6 @@ const makeResourceURI = ( `/subscriptions/${subscriptionID}/resourceGroups/${resourceGroup}/providers/Microsoft.OperationalInsights/workspaces/${resourceName}`; describe('AzureLogAnalyticsDatasource', () => { - const datasourceRequestMock = jest.spyOn(backendSrv, 'datasourceRequest'); - - beforeEach(() => { - jest.clearAllMocks(); - datasourceRequestMock.mockImplementation(jest.fn()); - }); - const ctx: any = {}; beforeEach(() => { @@ -40,64 +31,6 @@ describe('AzureLogAnalyticsDatasource', () => { ctx.ds = new AzureMonitorDatasource(ctx.instanceSettings); }); - describe('When the config option "Same as Azure Monitor" has been chosen', () => { - const tableResponseWithOneColumn = { - tables: [ - { - name: 'PrimaryResult', - columns: [ - { - name: 'Category', - type: 'string', - }, - ], - rows: [['Administrative'], ['Policy']], - }, - ], - }; - - const workspaceResponse = { - value: [ - { - name: 'aworkspace', - id: makeResourceURI('a-workspace'), - properties: { - source: 'Azure', - customerId: 'abc1b44e-3e57-4410-b027-6cc0ae6dee67', - }, - }, - ], - }; - - let workspacesUrl: string; - let azureLogAnalyticsUrl: string; - - beforeEach(async () => { - ctx.instanceSettings.jsonData.subscriptionId = 'xxx'; - ctx.instanceSettings.jsonData.tenantId = 'xxx'; - ctx.instanceSettings.jsonData.clientId = 'xxx'; - ctx.instanceSettings.jsonData.azureLogAnalyticsSameAs = true; - ctx.ds = new AzureMonitorDatasource(ctx.instanceSettings); - - datasourceRequestMock.mockImplementation((options: { url: string }) => { - if (options.url.indexOf('Microsoft.OperationalInsights/workspaces?api-version') > -1) { - workspacesUrl = options.url; - return Promise.resolve({ data: workspaceResponse, status: 200 }); - } else { - azureLogAnalyticsUrl = options.url; - return Promise.resolve({ data: tableResponseWithOneColumn, status: 200 }); - } - }); - }); - - it('should use the loganalyticsazure plugin route', async () => { - await ctx.ds.metricFindQuery('workspace("aworkspace").AzureActivity | distinct Category'); - - expect(workspacesUrl).toContain('azuremonitor'); - expect(azureLogAnalyticsUrl).toContain('loganalyticsazure'); - }); - }); - describe('When performing testDatasource', () => { describe('and an error is returned', () => { const error = { @@ -113,7 +46,7 @@ describe('AzureLogAnalyticsDatasource', () => { beforeEach(() => { ctx.instanceSettings.jsonData.azureAuthType = 'msi'; - datasourceRequestMock.mockImplementation(() => Promise.reject(error)); + ctx.ds.azureLogAnalyticsDatasource.getResource = jest.fn().mockRejectedValue(error); }); it('should return error status and a detailed error message', () => { @@ -129,9 +62,9 @@ describe('AzureLogAnalyticsDatasource', () => { describe('When performing getSchema', () => { beforeEach(() => { - datasourceRequestMock.mockImplementation((options: { url: string }) => { - expect(options.url).toContain('metadata'); - return Promise.resolve({ data: FakeSchemaData.getlogAnalyticsFakeMetadata(), status: 200, ok: true }); + ctx.ds.azureLogAnalyticsDatasource.getResource = jest.fn().mockImplementation((path: string) => { + expect(path).toContain('metadata'); + return Promise.resolve(FakeSchemaData.getlogAnalyticsFakeMetadata()); }); }); @@ -191,9 +124,9 @@ describe('AzureLogAnalyticsDatasource', () => { describe('and is the workspaces() macro', () => { beforeEach(async () => { - datasourceRequestMock.mockImplementation((options: { url: string }) => { - expect(options.url).toContain('xxx'); - return Promise.resolve({ data: workspacesResponse, status: 200 }); + ctx.ds.azureLogAnalyticsDatasource.getResource = jest.fn().mockImplementation((path: string) => { + expect(path).toContain('xxx'); + return Promise.resolve(workspacesResponse); }); queryResults = await ctx.ds.metricFindQuery('workspaces()'); @@ -209,9 +142,9 @@ describe('AzureLogAnalyticsDatasource', () => { describe('and is the workspaces() macro with the subscription parameter', () => { beforeEach(async () => { - datasourceRequestMock.mockImplementation((options: { url: string }) => { - expect(options.url).toContain('11112222-eeee-4949-9b2d-9106972f9123'); - return Promise.resolve({ data: workspacesResponse, status: 200 }); + ctx.ds.azureLogAnalyticsDatasource.getResource = jest.fn().mockImplementation((path: string) => { + expect(path).toContain('11112222-eeee-4949-9b2d-9106972f9123'); + return Promise.resolve(workspacesResponse); }); queryResults = await ctx.ds.metricFindQuery('workspaces(11112222-eeee-4949-9b2d-9106972f9123)'); @@ -227,9 +160,9 @@ describe('AzureLogAnalyticsDatasource', () => { describe('and is the workspaces() macro with the subscription parameter quoted', () => { beforeEach(async () => { - datasourceRequestMock.mockImplementation((options: { url: string }) => { - expect(options.url).toContain('11112222-eeee-4949-9b2d-9106972f9123'); - return Promise.resolve({ data: workspacesResponse, status: 200 }); + ctx.ds.azureLogAnalyticsDatasource.getResource = jest.fn().mockImplementation((path: string) => { + expect(path).toContain('11112222-eeee-4949-9b2d-9106972f9123'); + return Promise.resolve(workspacesResponse); }); queryResults = await ctx.ds.metricFindQuery('workspaces("11112222-eeee-4949-9b2d-9106972f9123")'); @@ -273,11 +206,11 @@ describe('AzureLogAnalyticsDatasource', () => { }; beforeEach(async () => { - datasourceRequestMock.mockImplementation((options: { url: string }) => { - if (options.url.indexOf('OperationalInsights/workspaces?api-version=') > -1) { - return Promise.resolve({ data: workspaceResponse, status: 200 }); + ctx.ds.azureLogAnalyticsDatasource.getResource = jest.fn().mockImplementation((path: string) => { + if (path.indexOf('OperationalInsights/workspaces?api-version=') > -1) { + return Promise.resolve(workspaceResponse); } else { - return Promise.resolve({ data: tableResponseWithOneColumn, status: 200 }); + return Promise.resolve(tableResponseWithOneColumn); } }); }); @@ -337,11 +270,11 @@ describe('AzureLogAnalyticsDatasource', () => { let annotationResults: any[]; beforeEach(async () => { - datasourceRequestMock.mockImplementation((options: { url: string }) => { - if (options.url.indexOf('Microsoft.OperationalInsights/workspaces') > -1) { - return Promise.resolve({ data: workspaceResponse, status: 200 }); + ctx.ds.azureLogAnalyticsDatasource.getResource = jest.fn().mockImplementation((path: string) => { + if (path.indexOf('Microsoft.OperationalInsights/workspaces') > -1) { + return Promise.resolve(workspaceResponse); } else { - return Promise.resolve({ data: tableResponse, status: 200 }); + return Promise.resolve(tableResponse); } }); diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_log_analytics/azure_log_analytics_datasource.ts b/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_log_analytics/azure_log_analytics_datasource.ts index 104d450c95f..d82e967b24f 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_log_analytics/azure_log_analytics_datasource.ts +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_log_analytics/azure_log_analytics_datasource.ts @@ -15,17 +15,16 @@ import { DataSourceInstanceSettings, MetricFindValue, } from '@grafana/data'; -import { getBackendSrv, getTemplateSrv, DataSourceWithBackend, FetchResponse } from '@grafana/runtime'; +import { getTemplateSrv, DataSourceWithBackend } from '@grafana/runtime'; import { Observable, from } from 'rxjs'; import { mergeMap } from 'rxjs/operators'; import { getAuthType, getAzureCloud, getAzurePortalUrl } from '../credentials'; -import { getLogAnalyticsApiRoute, getManagementApiRoute } from '../api/routes'; -import { AzureLogAnalyticsMetadata } from '../types/logAnalyticsMetadata'; import { isGUIDish } from '../components/ResourcePicker/utils'; +import { routeNames } from '../utils/common'; interface AdhocQuery { datasourceId: number; - url: string; + path: string; resultFormat: string; } @@ -33,14 +32,13 @@ export default class AzureLogAnalyticsDatasource extends DataSourceWithBackend< AzureMonitorQuery, AzureDataSourceJsonData > { - url: string; - baseUrl: string; + resourcePath: string; azurePortalUrl: string; applicationId: string; defaultSubscriptionId?: string; - azureMonitorUrl: string; + azureMonitorPath: string; defaultOrFirstWorkspace: string; cache: Map; @@ -48,15 +46,11 @@ export default class AzureLogAnalyticsDatasource extends DataSourceWithBackend< super(instanceSettings); this.cache = new Map(); + this.resourcePath = `${routeNames.logAnalytics}`; + this.azureMonitorPath = `${routeNames.azureMonitor}/subscriptions`; const cloud = getAzureCloud(instanceSettings); - const logAnalyticsRoute = getLogAnalyticsApiRoute(cloud); - this.baseUrl = `/${logAnalyticsRoute}`; this.azurePortalUrl = getAzurePortalUrl(cloud); - const managementRoute = getManagementApiRoute(cloud); - this.azureMonitorUrl = `/${managementRoute}/subscriptions`; - - this.url = instanceSettings.url || ''; this.defaultSubscriptionId = this.instanceSettings.jsonData.subscriptionId || ''; this.defaultOrFirstWorkspace = this.instanceSettings.jsonData.logAnalyticsDefaultWorkspace || ''; } @@ -71,8 +65,8 @@ export default class AzureLogAnalyticsDatasource extends DataSourceWithBackend< return []; } - const url = `${this.azureMonitorUrl}?api-version=2019-03-01`; - return await this.doRequest(url).then((result: any) => { + const path = `${this.azureMonitorPath}?api-version=2019-03-01`; + return await this.getResource(path).then((result: any) => { return ResponseParser.parseSubscriptions(result); }); } @@ -81,7 +75,7 @@ export default class AzureLogAnalyticsDatasource extends DataSourceWithBackend< const response = await this.getWorkspaceList(subscription); return ( - map(response.data.value, (val: any) => { + map(response.value, (val: any) => { return { text: val.name, value: val.id }; }) || [] ); @@ -91,20 +85,16 @@ export default class AzureLogAnalyticsDatasource extends DataSourceWithBackend< const subscriptionId = getTemplateSrv().replace(subscription || this.defaultSubscriptionId); const workspaceListUrl = - this.azureMonitorUrl + + this.azureMonitorPath + `/${subscriptionId}/providers/Microsoft.OperationalInsights/workspaces?api-version=2017-04-26-preview`; - return this.doRequest(workspaceListUrl, true); + return this.getResource(workspaceListUrl); } async getMetadata(resourceUri: string) { - const url = `${this.baseUrl}/v1${resourceUri}/metadata`; + const path = `${this.resourcePath}/v1${resourceUri}/metadata`; - const resp = await this.doRequest(url); - if (!resp.ok) { - throw new Error('Unable to get metadata for workspace'); - } - - return resp.data; + const resp = await this.getResource(path); + return resp; } async getKustoSchema(resourceUri: string) { @@ -202,7 +192,7 @@ export default class AzureLogAnalyticsDatasource extends DataSourceWithBackend< } const response = await this.getWorkspaceList(this.defaultSubscriptionId); - const details = response.data.value.find((o: any) => { + const details = response.value.find((o: any) => { return o.properties.customerId === workspaceId; }); @@ -286,14 +276,14 @@ export default class AzureLogAnalyticsDatasource extends DataSourceWithBackend< ); const querystring = querystringBuilder.generate().uriString; - const url = isGUIDish(workspace) - ? `${this.baseUrl}/v1/workspaces/${workspace}/query?${querystring}` - : `${this.baseUrl}/v1${workspace}/query?${querystring}`; + const path = isGUIDish(workspace) + ? `${this.resourcePath}/v1/workspaces/${workspace}/query?${querystring}` + : `${this.resourcePath}/v1${workspace}/query?${querystring}`; const queries = [ { datasourceId: this.id, - url: url, + path: path, resultFormat: 'table', }, ]; @@ -370,7 +360,7 @@ export default class AzureLogAnalyticsDatasource extends DataSourceWithBackend< doQueries(queries: AdhocQuery[]) { return map(queries, (query) => { - return this.doRequest(query.url) + return this.getResource(query.path) .then((result: any) => { return { result: result, @@ -386,32 +376,6 @@ export default class AzureLogAnalyticsDatasource extends DataSourceWithBackend< }); } - async doRequest(url: string, useCache = false, maxRetries = 1): Promise> { - try { - if (useCache && this.cache.has(url)) { - return this.cache.get(url); - } - - const res = await getBackendSrv().datasourceRequest({ - url: this.url + url, - method: 'GET', - }); - - if (useCache) { - this.cache.set(url, res); - } - - return res; - } catch (error) { - if (maxRetries > 0) { - return this.doRequest(url, useCache, maxRetries - 1); - } - - throw error; - } - } - - // TODO: update to be completely resource-centric async testDatasource(): Promise { const validationError = this.validateDatasource(); if (validationError) { @@ -437,22 +401,15 @@ export default class AzureLogAnalyticsDatasource extends DataSourceWithBackend< } try { - const url = isGUIDish(resourceOrWorkspace) - ? `${this.baseUrl}/v1/workspaces/${resourceOrWorkspace}/metadata` - : `${this.baseUrl}/v1${resourceOrWorkspace}/metadata`; - - return await this.doRequest(url).then((response: any) => { - if (response.status === 200) { - return { - status: 'success', - message: 'Successfully queried the Azure Log Analytics service.', - title: 'Success', - }; - } + const path = isGUIDish(resourceOrWorkspace) + ? `${this.resourcePath}/v1/workspaces/${resourceOrWorkspace}/metadata` + : `${this.resourcePath}/v1/${resourceOrWorkspace}/metadata`; + return await this.getResource(path).then((response: any) => { return { - status: 'error', - message: 'Returned http status code ' + response.status, + status: 'success', + message: 'Successfully queried the Azure Log Analytics service.', + title: 'Success', }; }); } catch (e) { diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_log_analytics/response_parser.ts b/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_log_analytics/response_parser.ts index 190dd4d9114..e25159d9efe 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_log_analytics/response_parser.ts +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_log_analytics/response_parser.ts @@ -11,11 +11,11 @@ export default class ResponseParser { let data: any[] = []; let columns: any[] = []; for (let i = 0; i < this.results.length; i++) { - if (this.results[i].result.data.tables.length === 0) { + if (this.results[i].result.tables.length === 0) { continue; } - columns = this.results[i].result.data.tables[0].columns; - const rows = this.results[i].result.data.tables[0].rows; + columns = this.results[i].result.tables[0].columns; + const rows = this.results[i].result.tables[0].rows; if (this.results[i].query.resultFormat === 'time_series') { data = concat(data, this.parseTimeSeriesResult(this.results[i].query, columns, rows)); @@ -157,11 +157,11 @@ export default class ResponseParser { const valueFieldName = 'subscriptionId'; const textFieldName = 'displayName'; - for (let i = 0; i < result.data.value.length; i++) { - if (!find(list, ['value', get(result.data.value[i], valueFieldName)])) { + for (let i = 0; i < result.value.length; i++) { + if (!find(list, ['value', get(result.value[i], valueFieldName)])) { list.push({ - text: `${get(result.data.value[i], textFieldName)}`, - value: get(result.data.value[i], valueFieldName), + text: `${get(result.value[i], textFieldName)}`, + value: get(result.value[i], valueFieldName), }); } } diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_monitor/azure_monitor_datasource.test.ts b/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_monitor/azure_monitor_datasource.test.ts index 44159defc5f..de2b5be890b 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_monitor/azure_monitor_datasource.test.ts +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_monitor/azure_monitor_datasource.test.ts @@ -2,14 +2,12 @@ import AzureMonitorDatasource from '../datasource'; import { TemplateSrv } from 'app/features/templating/template_srv'; import { DataSourceInstanceSettings } from '@grafana/data'; -import { backendSrv } from 'app/core/services/backend_srv'; // will use the version in __mocks__ import { AzureDataSourceJsonData, DatasourceValidationResult } from '../types'; const templateSrv = new TemplateSrv(); jest.mock('@grafana/runtime', () => ({ ...((jest.requireActual('@grafana/runtime') as unknown) as object), - getBackendSrv: () => backendSrv, getTemplateSrv: () => templateSrv, })); @@ -20,15 +18,13 @@ interface TestContext { describe('AzureMonitorDatasource', () => { const ctx: TestContext = {} as TestContext; - const datasourceRequestMock = jest.spyOn(backendSrv, 'datasourceRequest'); beforeEach(() => { jest.clearAllMocks(); ctx.instanceSettings = ({ name: 'test', url: 'http://azuremonitor.com', - jsonData: { subscriptionId: '9935389e-9122-4ef9-95f9-1513dd24753f' }, - cloudName: 'azuremonitor', + jsonData: { subscriptionId: '9935389e-9122-4ef9-95f9-1513dd24753f', cloudName: 'azuremonitor' }, } as unknown) as DataSourceInstanceSettings; ctx.ds = new AzureMonitorDatasource(ctx.instanceSettings); }); @@ -48,7 +44,7 @@ describe('AzureMonitorDatasource', () => { beforeEach(() => { ctx.instanceSettings.jsonData.azureAuthType = 'msi'; - datasourceRequestMock.mockImplementation(() => Promise.reject(error)); + ctx.ds.azureMonitorDatasource.getResource = jest.fn().mockRejectedValue(error); }); it('should return error status and a detailed error message', () => { @@ -61,17 +57,13 @@ describe('AzureMonitorDatasource', () => { describe('and a list of resource groups is returned', () => { const response = { - data: { - value: [{ name: 'grp1' }, { name: 'grp2' }], - }, - status: 200, - statusText: 'OK', + value: [{ name: 'grp1' }, { name: 'grp2' }], }; beforeEach(() => { ctx.instanceSettings.jsonData.tenantId = 'xxx'; ctx.instanceSettings.jsonData.clientId = 'xxx'; - datasourceRequestMock.mockImplementation(() => Promise.resolve({ data: response, status: 200 })); + ctx.ds.azureMonitorDatasource.getResource = jest.fn().mockResolvedValue({ data: response, status: 200 }); }); it('should return success status', () => { @@ -85,19 +77,15 @@ describe('AzureMonitorDatasource', () => { describe('When performing metricFindQuery', () => { describe('with a subscriptions query', () => { const response = { - data: { - value: [ - { displayName: 'Primary', subscriptionId: 'sub1' }, - { displayName: 'Secondary', subscriptionId: 'sub2' }, - ], - }, - status: 200, - statusText: 'OK', + value: [ + { displayName: 'Primary', subscriptionId: 'sub1' }, + { displayName: 'Secondary', subscriptionId: 'sub2' }, + ], }; beforeEach(() => { ctx.instanceSettings.jsonData.azureAuthType = 'msi'; - datasourceRequestMock.mockImplementation(() => Promise.resolve(response)); + ctx.ds.azureMonitorDatasource.getResource = jest.fn().mockResolvedValue(response); }); it('should return a list of subscriptions', async () => { @@ -112,15 +100,11 @@ describe('AzureMonitorDatasource', () => { describe('with a resource groups query', () => { const response = { - data: { - value: [{ name: 'grp1' }, { name: 'grp2' }], - }, - status: 200, - statusText: 'OK', + value: [{ name: 'grp1' }, { name: 'grp2' }], }; beforeEach(() => { - datasourceRequestMock.mockImplementation(() => Promise.resolve(response)); + ctx.ds.azureMonitorDatasource.getResource = jest.fn().mockResolvedValue(response); }); it('should return a list of resource groups', async () => { @@ -135,16 +119,12 @@ describe('AzureMonitorDatasource', () => { describe('with a resource groups query that specifies a subscription id', () => { const response = { - data: { - value: [{ name: 'grp1' }, { name: 'grp2' }], - }, - status: 200, - statusText: 'OK', + value: [{ name: 'grp1' }, { name: 'grp2' }], }; beforeEach(() => { - datasourceRequestMock.mockImplementation((options: { url: string }) => { - expect(options.url).toContain('11112222-eeee-4949-9b2d-9106972f9123'); + ctx.ds.azureMonitorDatasource.getResource = jest.fn().mockImplementation((path: string) => { + expect(path).toContain('11112222-eeee-4949-9b2d-9106972f9123'); return Promise.resolve(response); }); }); @@ -161,23 +141,18 @@ describe('AzureMonitorDatasource', () => { describe('with namespaces query', () => { const response = { - data: { - value: [ - { - name: 'test', - type: 'Microsoft.Network/networkInterfaces', - }, - ], - }, - status: 200, - statusText: 'OK', + value: [ + { + name: 'test', + type: 'Microsoft.Network/networkInterfaces', + }, + ], }; beforeEach(() => { - datasourceRequestMock.mockImplementation((options: { url: string }) => { - const baseUrl = - 'http://azuremonitor.com/azuremonitor/subscriptions/9935389e-9122-4ef9-95f9-1513dd24753f/resourceGroups'; - expect(options.url).toBe(baseUrl + '/nodesapp/resources?api-version=2018-01-01'); + ctx.ds.azureMonitorDatasource.getResource = jest.fn().mockImplementation((path: string) => { + const basePath = 'azuremonitor/subscriptions/9935389e-9122-4ef9-95f9-1513dd24753f/resourceGroups'; + expect(path).toBe(basePath + '/nodesapp/resources?api-version=2018-01-01'); return Promise.resolve(response); }); }); @@ -192,23 +167,18 @@ describe('AzureMonitorDatasource', () => { describe('with namespaces query that specifies a subscription id', () => { const response = { - data: { - value: [ - { - name: 'test', - type: 'Microsoft.Network/networkInterfaces', - }, - ], - }, - status: 200, - statusText: 'OK', + value: [ + { + name: 'test', + type: 'Microsoft.Network/networkInterfaces', + }, + ], }; beforeEach(() => { - datasourceRequestMock.mockImplementation((options: { url: string }) => { - const baseUrl = - 'http://azuremonitor.com/azuremonitor/subscriptions/11112222-eeee-4949-9b2d-9106972f9123/resourceGroups'; - expect(options.url).toBe(baseUrl + '/nodesapp/resources?api-version=2018-01-01'); + ctx.ds.azureMonitorDatasource.getResource = jest.fn().mockImplementation((path: string) => { + const basePath = 'azuremonitor/subscriptions/11112222-eeee-4949-9b2d-9106972f9123/resourceGroups'; + expect(path).toBe(basePath + '/nodesapp/resources?api-version=2018-01-01'); return Promise.resolve(response); }); }); @@ -223,27 +193,22 @@ describe('AzureMonitorDatasource', () => { describe('with resource names query', () => { const response = { - data: { - value: [ - { - name: 'Failure Anomalies - nodeapp', - type: 'microsoft.insights/alertrules', - }, - { - name: 'nodeapp', - type: 'microsoft.insights/components', - }, - ], - }, - status: 200, - statusText: 'OK', + value: [ + { + name: 'Failure Anomalies - nodeapp', + type: 'microsoft.insights/alertrules', + }, + { + name: 'nodeapp', + type: 'microsoft.insights/components', + }, + ], }; beforeEach(() => { - datasourceRequestMock.mockImplementation((options: { url: string }) => { - const baseUrl = - 'http://azuremonitor.com/azuremonitor/subscriptions/9935389e-9122-4ef9-95f9-1513dd24753f/resourceGroups'; - expect(options.url).toBe(baseUrl + '/nodeapp/resources?api-version=2018-01-01'); + ctx.ds.azureMonitorDatasource.getResource = jest.fn().mockImplementation((path: string) => { + const basePath = 'azuremonitor/subscriptions/9935389e-9122-4ef9-95f9-1513dd24753f/resourceGroups'; + expect(path).toBe(basePath + '/nodeapp/resources?api-version=2018-01-01'); return Promise.resolve(response); }); }); @@ -258,27 +223,22 @@ describe('AzureMonitorDatasource', () => { describe('with resource names query and that specifies a subscription id', () => { const response = { - data: { - value: [ - { - name: 'Failure Anomalies - nodeapp', - type: 'microsoft.insights/alertrules', - }, - { - name: 'nodeapp', - type: 'microsoft.insights/components', - }, - ], - }, - status: 200, - statusText: 'OK', + value: [ + { + name: 'Failure Anomalies - nodeapp', + type: 'microsoft.insights/alertrules', + }, + { + name: 'nodeapp', + type: 'microsoft.insights/components', + }, + ], }; beforeEach(() => { - datasourceRequestMock.mockImplementation((options: { url: string }) => { - const baseUrl = - 'http://azuremonitor.com/azuremonitor/subscriptions/11112222-eeee-4949-9b2d-9106972f9123/resourceGroups'; - expect(options.url).toBe(baseUrl + '/nodeapp/resources?api-version=2018-01-01'); + ctx.ds.azureMonitorDatasource.getResource = jest.fn().mockImplementation((path: string) => { + const basePath = 'azuremonitor/subscriptions/11112222-eeee-4949-9b2d-9106972f9123/resourceGroups'; + expect(path).toBe(basePath + '/nodeapp/resources?api-version=2018-01-01'); return Promise.resolve(response); }); }); @@ -298,32 +258,27 @@ describe('AzureMonitorDatasource', () => { describe('with metric names query', () => { const response = { - data: { - value: [ - { - name: { - value: 'Percentage CPU', - localizedValue: 'Percentage CPU', - }, + value: [ + { + name: { + value: 'Percentage CPU', + localizedValue: 'Percentage CPU', }, - { - name: { - value: 'UsedCapacity', - localizedValue: 'Used capacity', - }, + }, + { + name: { + value: 'UsedCapacity', + localizedValue: 'Used capacity', }, - ], - }, - status: 200, - statusText: 'OK', + }, + ], }; beforeEach(() => { - datasourceRequestMock.mockImplementation((options: { url: string }) => { - const baseUrl = - 'http://azuremonitor.com/azuremonitor/subscriptions/9935389e-9122-4ef9-95f9-1513dd24753f/resourceGroups'; - expect(options.url).toBe( - baseUrl + + ctx.ds.azureMonitorDatasource.getResource = jest.fn().mockImplementation((path: string) => { + const basePath = 'azuremonitor/subscriptions/9935389e-9122-4ef9-95f9-1513dd24753f/resourceGroups'; + expect(path).toBe( + basePath + '/nodeapp/providers/microsoft.insights/components/rn/providers/microsoft.insights/' + 'metricdefinitions?api-version=2018-01-01&metricnamespace=default' ); @@ -346,32 +301,27 @@ describe('AzureMonitorDatasource', () => { describe('with metric names query and specifies a subscription id', () => { const response = { - data: { - value: [ - { - name: { - value: 'Percentage CPU', - localizedValue: 'Percentage CPU', - }, + value: [ + { + name: { + value: 'Percentage CPU', + localizedValue: 'Percentage CPU', }, - { - name: { - value: 'UsedCapacity', - localizedValue: 'Used capacity', - }, + }, + { + name: { + value: 'UsedCapacity', + localizedValue: 'Used capacity', }, - ], - }, - status: 200, - statusText: 'OK', + }, + ], }; beforeEach(() => { - datasourceRequestMock.mockImplementation((options: { url: string }) => { - const baseUrl = - 'http://azuremonitor.com/azuremonitor/subscriptions/11112222-eeee-4949-9b2d-9106972f9123/resourceGroups'; - expect(options.url).toBe( - baseUrl + + ctx.ds.azureMonitorDatasource.getResource = jest.fn().mockImplementation((path: string) => { + const basePath = 'azuremonitor/subscriptions/11112222-eeee-4949-9b2d-9106972f9123/resourceGroups'; + expect(path).toBe( + basePath + '/nodeapp/providers/microsoft.insights/components/rn/providers/microsoft.insights/' + 'metricdefinitions?api-version=2018-01-01&metricnamespace=default' ); @@ -394,32 +344,27 @@ describe('AzureMonitorDatasource', () => { describe('with metric namespace query', () => { const response = { - data: { - value: [ - { - name: 'Microsoft.Compute-virtualMachines', - properties: { - metricNamespaceName: 'Microsoft.Compute/virtualMachines', - }, + value: [ + { + name: 'Microsoft.Compute-virtualMachines', + properties: { + metricNamespaceName: 'Microsoft.Compute/virtualMachines', }, - { - name: 'Telegraf-mem', - properties: { - metricNamespaceName: 'Telegraf/mem', - }, + }, + { + name: 'Telegraf-mem', + properties: { + metricNamespaceName: 'Telegraf/mem', }, - ], - }, - status: 200, - statusText: 'OK', + }, + ], }; beforeEach(() => { - datasourceRequestMock.mockImplementation((options: { url: string }) => { - const baseUrl = - 'http://azuremonitor.com/azuremonitor/subscriptions/9935389e-9122-4ef9-95f9-1513dd24753f/resourceGroups'; - expect(options.url).toBe( - baseUrl + + ctx.ds.azureMonitorDatasource.getResource = jest.fn().mockImplementation((path: string) => { + const basePath = 'azuremonitor/subscriptions/9935389e-9122-4ef9-95f9-1513dd24753f/resourceGroups'; + expect(path).toBe( + basePath + '/nodeapp/providers/Microsoft.Compute/virtualMachines/rn/providers/microsoft.insights/metricNamespaces?api-version=2017-12-01-preview' ); return Promise.resolve(response); @@ -439,32 +384,27 @@ describe('AzureMonitorDatasource', () => { describe('with metric namespace query and specifies a subscription id', () => { const response = { - data: { - value: [ - { - name: 'Microsoft.Compute-virtualMachines', - properties: { - metricNamespaceName: 'Microsoft.Compute/virtualMachines', - }, + value: [ + { + name: 'Microsoft.Compute-virtualMachines', + properties: { + metricNamespaceName: 'Microsoft.Compute/virtualMachines', }, - { - name: 'Telegraf-mem', - properties: { - metricNamespaceName: 'Telegraf/mem', - }, + }, + { + name: 'Telegraf-mem', + properties: { + metricNamespaceName: 'Telegraf/mem', }, - ], - }, - status: 200, - statusText: 'OK', + }, + ], }; beforeEach(() => { - datasourceRequestMock.mockImplementation((options: { url: string }) => { - const baseUrl = - 'http://azuremonitor.com/azuremonitor/subscriptions/11112222-eeee-4949-9b2d-9106972f9123/resourceGroups'; - expect(options.url).toBe( - baseUrl + + ctx.ds.azureMonitorDatasource.getResource = jest.fn().mockImplementation((path: string) => { + const basePath = 'azuremonitor/subscriptions/11112222-eeee-4949-9b2d-9106972f9123/resourceGroups'; + expect(path).toBe( + basePath + '/nodeapp/providers/Microsoft.Compute/virtualMachines/rn/providers/microsoft.insights/metricNamespaces?api-version=2017-12-01-preview' ); return Promise.resolve(response); @@ -487,34 +427,30 @@ describe('AzureMonitorDatasource', () => { describe('When performing getSubscriptions', () => { const response = { - data: { - value: [ - { - id: '/subscriptions/99999999-cccc-bbbb-aaaa-9106972f9572', - subscriptionId: '99999999-cccc-bbbb-aaaa-9106972f9572', - tenantId: '99999999-aaaa-bbbb-cccc-51c4f982ec48', - displayName: 'Primary Subscription', - state: 'Enabled', - subscriptionPolicies: { - locationPlacementId: 'Public_2014-09-01', - quotaId: 'PayAsYouGo_2014-09-01', - spendingLimit: 'Off', - }, - authorizationSource: 'RoleBased', + value: [ + { + id: '/subscriptions/99999999-cccc-bbbb-aaaa-9106972f9572', + subscriptionId: '99999999-cccc-bbbb-aaaa-9106972f9572', + tenantId: '99999999-aaaa-bbbb-cccc-51c4f982ec48', + displayName: 'Primary Subscription', + state: 'Enabled', + subscriptionPolicies: { + locationPlacementId: 'Public_2014-09-01', + quotaId: 'PayAsYouGo_2014-09-01', + spendingLimit: 'Off', }, - ], - count: { - type: 'Total', - value: 1, + authorizationSource: 'RoleBased', }, + ], + count: { + type: 'Total', + value: 1, }, - status: 200, - statusText: 'OK', }; beforeEach(() => { ctx.instanceSettings.jsonData.azureAuthType = 'msi'; - datasourceRequestMock.mockImplementation(() => Promise.resolve(response)); + ctx.ds.azureMonitorDatasource.getResource = jest.fn().mockResolvedValue(response); }); it('should return list of subscriptions', () => { @@ -528,15 +464,11 @@ describe('AzureMonitorDatasource', () => { describe('When performing getResourceGroups', () => { const response = { - data: { - value: [{ name: 'grp1' }, { name: 'grp2' }], - }, - status: 200, - statusText: 'OK', + value: [{ name: 'grp1' }, { name: 'grp2' }], }; beforeEach(() => { - datasourceRequestMock.mockImplementation(() => Promise.resolve(response)); + ctx.ds.azureMonitorDatasource.getResource = jest.fn().mockResolvedValue(response); }); it('should return list of Resource Groups', () => { @@ -552,41 +484,36 @@ describe('AzureMonitorDatasource', () => { describe('When performing getMetricDefinitions', () => { const response = { - data: { - value: [ - { - name: 'test', - type: 'Microsoft.Network/networkInterfaces', - }, - { - location: 'northeurope', - name: 'northeur', - type: 'Microsoft.Compute/virtualMachines', - }, - { - location: 'westcentralus', - name: 'us', - type: 'Microsoft.Compute/virtualMachines', - }, - { - name: 'IHaveNoMetrics', - type: 'IShouldBeFilteredOut', - }, - { - name: 'storageTest', - type: 'Microsoft.Storage/storageAccounts', - }, - ], - }, - status: 200, - statusText: 'OK', + value: [ + { + name: 'test', + type: 'Microsoft.Network/networkInterfaces', + }, + { + location: 'northeurope', + name: 'northeur', + type: 'Microsoft.Compute/virtualMachines', + }, + { + location: 'westcentralus', + name: 'us', + type: 'Microsoft.Compute/virtualMachines', + }, + { + name: 'IHaveNoMetrics', + type: 'IShouldBeFilteredOut', + }, + { + name: 'storageTest', + type: 'Microsoft.Storage/storageAccounts', + }, + ], }; beforeEach(() => { - datasourceRequestMock.mockImplementation((options: { url: string }) => { - const baseUrl = - 'http://azuremonitor.com/azuremonitor/subscriptions/9935389e-9122-4ef9-95f9-1513dd24753f/resourceGroups'; - expect(options.url).toBe(baseUrl + '/nodesapp/resources?api-version=2018-01-01'); + ctx.ds.azureMonitorDatasource.getResource = jest.fn().mockImplementation((path: string) => { + const basePath = 'azuremonitor/subscriptions/9935389e-9122-4ef9-95f9-1513dd24753f/resourceGroups'; + expect(path).toBe(basePath + '/nodesapp/resources?api-version=2018-01-01'); return Promise.resolve(response); }); }); @@ -617,27 +544,22 @@ describe('AzureMonitorDatasource', () => { describe('When performing getResourceNames', () => { describe('and there are no special cases', () => { const response = { - data: { - value: [ - { - name: 'Failure Anomalies - nodeapp', - type: 'microsoft.insights/alertrules', - }, - { - name: 'nodeapp', - type: 'microsoft.insights/components', - }, - ], - }, - status: 200, - statusText: 'OK', + value: [ + { + name: 'Failure Anomalies - nodeapp', + type: 'microsoft.insights/alertrules', + }, + { + name: 'nodeapp', + type: 'microsoft.insights/components', + }, + ], }; beforeEach(() => { - datasourceRequestMock.mockImplementation((options: { url: string }) => { - const baseUrl = - 'http://azuremonitor.com/azuremonitor/subscriptions/9935389e-9122-4ef9-95f9-1513dd24753f/resourceGroups'; - expect(options.url).toBe(baseUrl + '/nodeapp/resources?api-version=2018-01-01'); + ctx.ds.azureMonitorDatasource.getResource = jest.fn().mockImplementation((path: string) => { + const basePath = 'azuremonitor/subscriptions/9935389e-9122-4ef9-95f9-1513dd24753f/resourceGroups'; + expect(path).toBe(basePath + '/nodeapp/resources?api-version=2018-01-01'); return Promise.resolve(response); }); }); @@ -655,27 +577,22 @@ describe('AzureMonitorDatasource', () => { describe('and the metric definition is blobServices', () => { const response = { - data: { - value: [ - { - name: 'Failure Anomalies - nodeapp', - type: 'microsoft.insights/alertrules', - }, - { - name: 'storagetest', - type: 'Microsoft.Storage/storageAccounts', - }, - ], - }, - status: 200, - statusText: 'OK', + value: [ + { + name: 'Failure Anomalies - nodeapp', + type: 'microsoft.insights/alertrules', + }, + { + name: 'storagetest', + type: 'Microsoft.Storage/storageAccounts', + }, + ], }; beforeEach(() => { - datasourceRequestMock.mockImplementation((options: { url: string }) => { - const baseUrl = - 'http://azuremonitor.com/azuremonitor/subscriptions/9935389e-9122-4ef9-95f9-1513dd24753f/resourceGroups'; - expect(options.url).toBe(baseUrl + '/nodeapp/resources?api-version=2018-01-01'); + ctx.ds.azureMonitorDatasource.getResource = jest.fn().mockImplementation((path: string) => { + const basePath = 'azuremonitor/subscriptions/9935389e-9122-4ef9-95f9-1513dd24753f/resourceGroups'; + expect(path).toBe(basePath + '/nodeapp/resources?api-version=2018-01-01'); return Promise.resolve(response); }); }); @@ -698,53 +615,48 @@ describe('AzureMonitorDatasource', () => { describe('When performing getMetricNames', () => { const response = { - data: { - value: [ - { - name: { - value: 'UsedCapacity', - localizedValue: 'Used capacity', - }, - unit: 'CountPerSecond', - primaryAggregationType: 'Total', - supportedAggregationTypes: ['None', 'Average', 'Minimum', 'Maximum', 'Total', 'Count'], - metricAvailabilities: [ - { timeGrain: 'PT1H', retention: 'P93D' }, - { timeGrain: 'PT6H', retention: 'P93D' }, - { timeGrain: 'PT12H', retention: 'P93D' }, - { timeGrain: 'P1D', retention: 'P93D' }, - ], + value: [ + { + name: { + value: 'UsedCapacity', + localizedValue: 'Used capacity', }, - { - name: { - value: 'FreeCapacity', - localizedValue: 'Free capacity', - }, - unit: 'CountPerSecond', - primaryAggregationType: 'Average', - supportedAggregationTypes: ['None', 'Average'], - metricAvailabilities: [ - { timeGrain: 'PT1H', retention: 'P93D' }, - { timeGrain: 'PT6H', retention: 'P93D' }, - { timeGrain: 'PT12H', retention: 'P93D' }, - { timeGrain: 'P1D', retention: 'P93D' }, - ], + unit: 'CountPerSecond', + primaryAggregationType: 'Total', + supportedAggregationTypes: ['None', 'Average', 'Minimum', 'Maximum', 'Total', 'Count'], + metricAvailabilities: [ + { timeGrain: 'PT1H', retention: 'P93D' }, + { timeGrain: 'PT6H', retention: 'P93D' }, + { timeGrain: 'PT12H', retention: 'P93D' }, + { timeGrain: 'P1D', retention: 'P93D' }, + ], + }, + { + name: { + value: 'FreeCapacity', + localizedValue: 'Free capacity', }, - ], - }, - status: 200, - statusText: 'OK', + unit: 'CountPerSecond', + primaryAggregationType: 'Average', + supportedAggregationTypes: ['None', 'Average'], + metricAvailabilities: [ + { timeGrain: 'PT1H', retention: 'P93D' }, + { timeGrain: 'PT6H', retention: 'P93D' }, + { timeGrain: 'PT12H', retention: 'P93D' }, + { timeGrain: 'P1D', retention: 'P93D' }, + ], + }, + ], }; beforeEach(() => { - datasourceRequestMock.mockImplementation((options: { url: string }) => { - const baseUrl = - 'http://azuremonitor.com/azuremonitor/subscriptions/9935389e-9122-4ef9-95f9-1513dd24753f/resourceGroups/nodeapp'; + ctx.ds.azureMonitorDatasource.getResource = jest.fn().mockImplementation((path: string) => { + const basePath = 'azuremonitor/subscriptions/9935389e-9122-4ef9-95f9-1513dd24753f/resourceGroups/nodeapp'; const expected = - baseUrl + + basePath + '/providers/microsoft.insights/components/resource1' + '/providers/microsoft.insights/metricdefinitions?api-version=2018-01-01&metricnamespace=default'; - expect(options.url).toBe(expected); + expect(path).toBe(expected); return Promise.resolve(response); }); }); @@ -770,53 +682,48 @@ describe('AzureMonitorDatasource', () => { describe('When performing getMetricMetadata', () => { const response = { - data: { - value: [ - { - name: { - value: 'UsedCapacity', - localizedValue: 'Used capacity', - }, - unit: 'CountPerSecond', - primaryAggregationType: 'Total', - supportedAggregationTypes: ['None', 'Average', 'Minimum', 'Maximum', 'Total', 'Count'], - metricAvailabilities: [ - { timeGrain: 'PT1H', retention: 'P93D' }, - { timeGrain: 'PT6H', retention: 'P93D' }, - { timeGrain: 'PT12H', retention: 'P93D' }, - { timeGrain: 'P1D', retention: 'P93D' }, - ], + value: [ + { + name: { + value: 'UsedCapacity', + localizedValue: 'Used capacity', }, - { - name: { - value: 'FreeCapacity', - localizedValue: 'Free capacity', - }, - unit: 'CountPerSecond', - primaryAggregationType: 'Average', - supportedAggregationTypes: ['None', 'Average'], - metricAvailabilities: [ - { timeGrain: 'PT1H', retention: 'P93D' }, - { timeGrain: 'PT6H', retention: 'P93D' }, - { timeGrain: 'PT12H', retention: 'P93D' }, - { timeGrain: 'P1D', retention: 'P93D' }, - ], + unit: 'CountPerSecond', + primaryAggregationType: 'Total', + supportedAggregationTypes: ['None', 'Average', 'Minimum', 'Maximum', 'Total', 'Count'], + metricAvailabilities: [ + { timeGrain: 'PT1H', retention: 'P93D' }, + { timeGrain: 'PT6H', retention: 'P93D' }, + { timeGrain: 'PT12H', retention: 'P93D' }, + { timeGrain: 'P1D', retention: 'P93D' }, + ], + }, + { + name: { + value: 'FreeCapacity', + localizedValue: 'Free capacity', }, - ], - }, - status: 200, - statusText: 'OK', + unit: 'CountPerSecond', + primaryAggregationType: 'Average', + supportedAggregationTypes: ['None', 'Average'], + metricAvailabilities: [ + { timeGrain: 'PT1H', retention: 'P93D' }, + { timeGrain: 'PT6H', retention: 'P93D' }, + { timeGrain: 'PT12H', retention: 'P93D' }, + { timeGrain: 'P1D', retention: 'P93D' }, + ], + }, + ], }; beforeEach(() => { - datasourceRequestMock.mockImplementation((options: { url: string }) => { - const baseUrl = - 'http://azuremonitor.com/azuremonitor/subscriptions/9935389e-9122-4ef9-95f9-1513dd24753f/resourceGroups/nodeapp'; + ctx.ds.azureMonitorDatasource.getResource = jest.fn().mockImplementation((path: string) => { + const basePath = 'azuremonitor/subscriptions/9935389e-9122-4ef9-95f9-1513dd24753f/resourceGroups/nodeapp'; const expected = - baseUrl + + basePath + '/providers/microsoft.insights/components/resource1' + '/providers/microsoft.insights/metricdefinitions?api-version=2018-01-01&metricnamespace=default'; - expect(options.url).toBe(expected); + expect(path).toBe(expected); return Promise.resolve(response); }); }); @@ -841,56 +748,51 @@ describe('AzureMonitorDatasource', () => { describe('When performing getMetricMetadata on metrics with dimensions', () => { const response = { - data: { - value: [ - { - name: { - value: 'Transactions', - localizedValue: 'Transactions', - }, - unit: 'Count', - primaryAggregationType: 'Total', - supportedAggregationTypes: ['None', 'Average', 'Minimum', 'Maximum', 'Total', 'Count'], - isDimensionRequired: false, - dimensions: [ - { - value: 'ResponseType', - localizedValue: 'Response type', - }, - { - value: 'GeoType', - localizedValue: 'Geo type', - }, - { - value: 'ApiName', - localizedValue: 'API name', - }, - ], + value: [ + { + name: { + value: 'Transactions', + localizedValue: 'Transactions', }, - { - name: { - value: 'FreeCapacity', - localizedValue: 'Free capacity', + unit: 'Count', + primaryAggregationType: 'Total', + supportedAggregationTypes: ['None', 'Average', 'Minimum', 'Maximum', 'Total', 'Count'], + isDimensionRequired: false, + dimensions: [ + { + value: 'ResponseType', + localizedValue: 'Response type', }, - unit: 'CountPerSecond', - primaryAggregationType: 'Average', - supportedAggregationTypes: ['None', 'Average'], + { + value: 'GeoType', + localizedValue: 'Geo type', + }, + { + value: 'ApiName', + localizedValue: 'API name', + }, + ], + }, + { + name: { + value: 'FreeCapacity', + localizedValue: 'Free capacity', }, - ], - }, - status: 200, - statusText: 'OK', + unit: 'CountPerSecond', + primaryAggregationType: 'Average', + supportedAggregationTypes: ['None', 'Average'], + }, + ], }; beforeEach(() => { - datasourceRequestMock.mockImplementation((options: { url: string }) => { - const baseUrl = - 'http://azuremonitor.com/azuremonitor/subscriptions/9935389e-9122-4ef9-95f9-1513dd24753f/resourceGroups/nodeapp'; + ctx.ds.azureMonitorDatasource.getResource = jest.fn().mockImplementation((path: string) => { + const basePath = 'azuremonitor/subscriptions/9935389e-9122-4ef9-95f9-1513dd24753f/resourceGroups/nodeapp'; const expected = - baseUrl + + basePath + '/providers/microsoft.insights/components/resource1' + '/providers/microsoft.insights/metricdefinitions?api-version=2018-01-01&metricnamespace=default'; - expect(options.url).toBe(expected); + expect(path).toBe(expected); return Promise.resolve(response); }); }); diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_monitor/azure_monitor_datasource.ts b/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_monitor/azure_monitor_datasource.ts index ff5f1d44f22..2f0f3a53efb 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_monitor/azure_monitor_datasource.ts +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_monitor/azure_monitor_datasource.ts @@ -9,7 +9,6 @@ import { AzureMonitorMetricDefinitionsResponse, AzureMonitorResourceGroupsResponse, AzureQueryType, - AzureMonitorMetricsMetadataResponse, AzureMetricQuery, DatasourceValidationResult, } from '../types'; @@ -21,14 +20,14 @@ import { DataQueryRequest, TimeRange, } from '@grafana/data'; -import { getBackendSrv, DataSourceWithBackend, getTemplateSrv, FetchResponse } from '@grafana/runtime'; +import { DataSourceWithBackend, getTemplateSrv } from '@grafana/runtime'; import { from, Observable } from 'rxjs'; import { mergeMap } from 'rxjs/operators'; import { getTimeSrv, TimeSrv } from 'app/features/dashboard/services/TimeSrv'; import { getAuthType, getAzureCloud, getAzurePortalUrl } from '../credentials'; -import { getManagementApiRoute } from '../api/routes'; import { resourceTypeDisplayNames } from '../azureMetadata'; +import { routeNames } from '../utils/common'; const defaultDropdownValue = 'select'; @@ -46,11 +45,10 @@ export default class AzureMonitorDatasource extends DataSourceWithBackend { + return this.getResource(`${this.resourcePath}?api-version=2019-03-01`).then((result: any) => { return ResponseParser.parseSubscriptions(result); }); } getResourceGroups(subscriptionId: string) { - const url = `${this.baseUrl}/${subscriptionId}/resourceGroups?api-version=${this.apiVersion}`; - return this.doRequest(url).then((result: AzureMonitorResourceGroupsResponse) => { + return this.getResource( + `${this.resourcePath}/${subscriptionId}/resourceGroups?api-version=${this.apiVersion}` + ).then((result: AzureMonitorResourceGroupsResponse) => { return ResponseParser.parseResponseValues(result, 'name', 'name'); }); } getMetricDefinitions(subscriptionId: string, resourceGroup: string) { - const url = `${this.baseUrl}/${subscriptionId}/resourceGroups/${resourceGroup}/resources?api-version=${this.apiVersion}`; - return this.doRequest(url) + return this.getResource( + `${this.resourcePath}/${subscriptionId}/resourceGroups/${resourceGroup}/resources?api-version=${this.apiVersion}` + ) .then((result: AzureMonitorMetricDefinitionsResponse) => { return ResponseParser.parseResponseValues(result, 'type', 'type'); }) @@ -410,9 +406,9 @@ export default class AzureMonitorDatasource extends DataSourceWithBackend { + return this.getResource( + `${this.resourcePath}/${subscriptionId}/resourceGroups/${resourceGroup}/resources?api-version=${this.apiVersion}` + ).then((result: any) => { if (!startsWith(metricDefinition, 'Microsoft.Storage/storageAccounts/')) { return ResponseParser.parseResourceNames(result, metricDefinition); } @@ -429,7 +425,7 @@ export default class AzureMonitorDatasource extends DataSourceWithBackend { + return this.getResource(url).then((result: any) => { return ResponseParser.parseResponseValues(result, 'name', 'properties.metricNamespaceName'); }); } @@ -450,7 +446,7 @@ export default class AzureMonitorDatasource extends DataSourceWithBackend { + return this.getResource(url).then((result: any) => { return ResponseParser.parseResponseValues(result, 'name.localizedValue', 'name.value'); }); } @@ -473,7 +469,7 @@ export default class AzureMonitorDatasource extends DataSourceWithBackend(url).then((result) => { - return ResponseParser.parseMetadata(result.data, metricName); + return this.getResource(url).then((result: any) => { + return ResponseParser.parseMetadata(result, metricName); }); } @@ -494,20 +490,13 @@ export default class AzureMonitorDatasource extends DataSourceWithBackend((response: any) => { - if (response.status === 200) { - return { - status: 'success', - message: 'Successfully queried the Azure Monitor service.', - title: 'Success', - }; - } + const url = `${this.resourcePath}?api-version=2019-03-01`; + return await this.getResource(url).then((response: any) => { return { - status: 'error', - message: 'Returned http status code ' + response.status, + status: 'success', + message: 'Successfully queried the Azure Monitor service.', + title: 'Success', }; }); } catch (e) { @@ -555,19 +544,4 @@ export default class AzureMonitorDatasource extends DataSourceWithBackend 0; } - - doRequest(url: string, maxRetries = 1): Promise> { - return getBackendSrv() - .datasourceRequest({ - url: this.url + url, - method: 'GET', - }) - .catch((error: any) => { - if (maxRetries > 0) { - return this.doRequest(url, maxRetries - 1); - } - - throw error; - }); - } } diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_monitor/response_parser.ts b/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_monitor/response_parser.ts index dce85c3c533..126f8c69d1e 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_monitor/response_parser.ts +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/azure_monitor/response_parser.ts @@ -18,10 +18,10 @@ export default class ResponseParser { return list; } - for (let i = 0; i < result.data.value.length; i++) { - if (!find(list, ['value', get(result.data.value[i], valueFieldName)])) { - const value = get(result.data.value[i], valueFieldName); - const text = get(result.data.value[i], textFieldName, value); + for (let i = 0; i < result.value.length; i++) { + if (!find(list, ['value', get(result.value[i], valueFieldName)])) { + const value = get(result.value[i], valueFieldName); + const text = get(result.value[i], textFieldName, value); list.push({ text: text, @@ -39,11 +39,11 @@ export default class ResponseParser { return list; } - for (let i = 0; i < result.data.value.length; i++) { - if (result.data.value[i].type === metricDefinition) { + for (let i = 0; i < result.value.length; i++) { + if (result.value[i].type === metricDefinition) { list.push({ - text: result.data.value[i].name, - value: result.data.value[i].name, + text: result.value[i].name, + value: result.value[i].name, }); } } @@ -113,11 +113,11 @@ export default class ResponseParser { const valueFieldName = 'subscriptionId'; const textFieldName = 'displayName'; - for (let i = 0; i < result.data.value.length; i++) { - if (!find(list, ['value', get(result.data.value[i], valueFieldName)])) { + for (let i = 0; i < result.value.length; i++) { + if (!find(list, ['value', get(result.value[i], valueFieldName)])) { list.push({ - text: `${get(result.data.value[i], textFieldName)}`, - value: get(result.data.value[i], valueFieldName), + text: `${get(result.value[i], textFieldName)}`, + value: get(result.value[i], valueFieldName), }); } } diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/components/ConfigEditor.tsx b/public/app/plugins/datasource/grafana-azure-monitor-datasource/components/ConfigEditor.tsx index 163e8dc07a2..a28f6003668 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/components/ConfigEditor.tsx +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/components/ConfigEditor.tsx @@ -13,8 +13,8 @@ import { getBackendSrv, getTemplateSrv, TemplateSrv } from '@grafana/runtime'; import { InsightsConfig } from './InsightsConfig'; import ResponseParser from '../azure_monitor/response_parser'; import { AzureDataSourceJsonData, AzureDataSourceSecureJsonData, AzureDataSourceSettings } from '../types'; -import { getAzureCloud, isAppInsightsConfigured } from '../credentials'; -import { getManagementApiRoute } from '../api/routes'; +import { isAppInsightsConfigured } from '../credentials'; +import { routeNames } from '../utils/common'; export type Props = DataSourcePluginOptionsEditorProps; @@ -25,6 +25,7 @@ export interface State { export class ConfigEditor extends PureComponent { templateSrv: TemplateSrv = getTemplateSrv(); + baseURL: string; constructor(props: Props) { super(props); @@ -33,10 +34,7 @@ export class ConfigEditor extends PureComponent { unsaved: false, appInsightsInitiallyConfigured: isAppInsightsConfigured(props.options), }; - - if (this.props.options.id) { - updateDatasourcePluginOption(this.props, 'url', '/api/datasources/proxy/' + this.props.options.id); - } + this.baseURL = `/api/datasources/${this.props.options.id}/resources/${routeNames.azureMonitor}/subscriptions`; } private updateOptions = (optionsFunc: (options: AzureDataSourceSettings) => AzureDataSourceSettings): void => { @@ -61,12 +59,9 @@ export class ConfigEditor extends PureComponent { private getSubscriptions = async (): Promise>> => { await this.saveOptions(); - const cloud = getAzureCloud(this.props.options); - const route = getManagementApiRoute(cloud); - const url = `/${route}/subscriptions?api-version=2019-03-01`; - + const query = `?api-version=2019-03-01`; const result = await getBackendSrv().datasourceRequest({ - url: this.props.options.url + url, + url: this.baseURL + query, method: 'GET', }); @@ -76,12 +71,9 @@ export class ConfigEditor extends PureComponent { private getLogAnalyticsSubscriptions = async (): Promise>> => { await this.saveOptions(); - const cloud = getAzureCloud(this.props.options); - const route = getManagementApiRoute(cloud); - const url = `/${route}/subscriptions?api-version=2019-03-01`; - + const query = `?api-version=2019-03-01`; const result = await getBackendSrv().datasourceRequest({ - url: this.props.options.url + url, + url: this.baseURL + query, method: 'GET', }); @@ -91,12 +83,9 @@ export class ConfigEditor extends PureComponent { private getWorkspaces = async (subscriptionId: string): Promise>> => { await this.saveOptions(); - const cloud = getAzureCloud(this.props.options); - const route = getManagementApiRoute(cloud); - const url = `/${route}/subscriptions/${subscriptionId}/providers/Microsoft.OperationalInsights/workspaces?api-version=2017-04-26-preview`; - + const workspaceURL = `/${subscriptionId}/providers/Microsoft.OperationalInsights/workspaces?api-version=2017-04-26-preview`; const result = await getBackendSrv().datasourceRequest({ - url: this.props.options.url + url, + url: this.baseURL + workspaceURL, method: 'GET', }); diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/dashboards/adx.json b/public/app/plugins/datasource/grafana-azure-monitor-datasource/dashboards/adx.json index 14a2214d21a..decb6acaac1 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/dashboards/adx.json +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/dashboards/adx.json @@ -1,9117 +1,8488 @@ { - "__requires": [ - { - "type": "grafana", - "id": "grafana", - "name": "Grafana", - "version": "7.4.3" + "__requires": [ + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "7.4.3" + }, + { + "type": "datasource", + "id": "grafana-azure-monitor-datasource", + "name": "Azure Monitor", + "version": "0.3.0" + }, + { + "type": "panel", + "id": "graph", + "name": "Graph", + "version": "" + }, + { + "type": "panel", + "id": "stat", + "name": "Stat", + "version": "" + }, + { + "type": "panel", + "id": "table", + "name": "Table", + "version": "" + } + ], + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "id": null, + "iteration": 1622241391232, + "links": [], + "panels": [ + { + "collapsed": false, + "datasource": "$ds", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 }, - { - "type": "datasource", - "id": "grafana-azure-monitor-datasource", - "name": "Azure Monitor", - "version": "0.3.0" + "id": 6, + "panels": [], + "title": "Overview", + "type": "row" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": {}, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] }, - { - "type": "panel", - "id": "graph", - "name": "Graph", - "version": "" + "gridPos": { + "h": 5, + "w": 3, + "x": 0, + "y": 1 }, - { - "type": "panel", - "id": "stat", - "name": "Stat", - "version": "" + "id": 4, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" }, - { - "type": "panel", - "id": "table", - "name": "Table", - "version": "" + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n //the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Average"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "KeepAlive", + "metricNamespace": "Microsoft.Kusto/clusters", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Keep Alive (Avg)", + "type": "stat" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": {}, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 3, + "y": 1 + }, + "id": 12, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Average", "Maximum", "Minimum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "CPU", + "metricNamespace": "Microsoft.Kusto/clusters", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "CPU (Avg)", + "type": "stat" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": {}, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 6, + "y": 1 + }, + "id": 13, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Average", "Maximum", "Minimum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "IngestionUtilization", + "metricNamespace": "Microsoft.Kusto/clusters", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Ingestion Utilization (Avg) ", + "type": "stat" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": {}, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 9, + "y": 1 + }, + "id": 14, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Average", "Maximum", "Minimum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "IngestionLatencyInSeconds", + "metricNamespace": "Microsoft.Kusto/clusters", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Ingestion Latency (Avg) ", + "type": "stat" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": {}, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 12, + "y": 1 + }, + "id": 15, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Average", "Maximum", "Minimum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "CacheUtilization", + "metricNamespace": "Microsoft.Kusto/clusters", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Cache Utilization (Avg)", + "type": "stat" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": {}, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 15, + "y": 1 + }, + "id": 16, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Total"], + "aggregation": "Total", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Status", + "value": "IngestionResultDetails" + } + ], + "metricDefinition": "$ns", + "metricName": "IngestionResult", + "metricNamespace": "Microsoft.Kusto/clusters", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Succeeded Ingestions (#)", + "type": "stat" + }, + { + "datasource": "$ds", + "description": "The aggregated usage in the cluster, out of the total used CPU and memory. To see more details, go to the Usage tab.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": null, + "filterable": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 6 + }, + "id": 17, + "options": { + "showHeader": true + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "let system_databases = dynamic(['KustoMonitoringPersistentDatabase', '$systemdb']); \r\nlet system_users = dynamic(['AAD app id=b753584e-c468-4503-852a-374280ce7a62', 'KustoServiceBuiltInPrincipal']); // b753584e-c468-4503-852a-374280ce7a62 is KustoRunner\r\nlet system_cluster_management_applications = dynamic(['Kusto.WinSvc.CM.Svc']); // Kusto Cluster Management\r\nlet CommandTable = ADXCommand \r\n | where TimeGenerated > datetime(2020-09-09T09:30:00Z) \r\n | where LastUpdatedOn > ago(7d)\r\n | where DatabaseName !in (system_databases) and User !in (system_users) and ApplicationName !in (system_cluster_management_applications)\r\n | where ((false == \"false\" and ApplicationName != 'Kusto.WinSvc.DM.Svc') or false == \"true\")\r\n | extend MemoryPeak = tolong(ResourceUtilization.MemoryPeak) \r\n | parse _ResourceId with * \"providers/microsoft.kusto/clusters/\" cluster_name\r\n | project-away ResourceUtilization;\r\nlet QueryTable = ADXQuery\r\n | where LastUpdatedOn > ago(7d)\r\n | where DatabaseName !in (system_databases) and User !in (system_users) and ApplicationName !in (system_cluster_management_applications)\r\n | where ((false == \"false\" and ApplicationName != 'Kusto.WinSvc.DM.Svc') or false == \"true\")\r\n | extend MemoryPeak = tolong(MemoryPeak)\r\n | parse _ResourceId with * \"providers/microsoft.kusto/clusters/\" cluster_name\r\n | extend CommandType = 'Query';\r\nlet dataset_commands_queries = CommandTable\r\n | union (QueryTable)\r\n | project CommandType, DatabaseName, StartedOn, LastUpdatedOn, Duration, State, FailureReason, RootActivityId, User, ApplicationName, Principal, TotalCPU, MemoryPeak, CorrelationId, cluster_name;\r\nlet dataset = dataset_commands_queries\r\n | where cluster_name == 'mitulktest'\r\n //| where totimespan(TotalCPU) > totimespan(0)\r\n | summarize TotalCPU=max(TotalCPU) \r\n , MemoryPeak=max(MemoryPeak)\r\n by User, ApplicationName, CorrelationId \r\n;\r\nlet totalCPU = toscalar(dataset\r\n | summarize sum((totimespan(TotalCPU) / 1s)));\r\nlet totalMemory = toscalar(dataset\r\n | summarize sum(MemoryPeak));\r\nlet topMemory = \r\n dataset\r\n | top-nested 10000 of User with others=\"Others\" by sum(MemoryPeak), top-nested 10000 of ApplicationName with others=\"Others\" by sum(MemoryPeak)\r\n | extend PercentOfTotalClusterMemoryUsed = aggregated_ApplicationName / toreal(totalMemory)\r\n;\r\nlet topCpu = \r\n dataset\r\n | top-nested 10000 of User with others=\"Others\" by sum(totimespan(TotalCPU) / 1s), top-nested 10000 of ApplicationName with others=\"Others\" by sum(totimespan(TotalCPU) / 1s)\r\n | extend PercentOfTotalClusterCpuUsed = aggregated_ApplicationName / toreal(totalCPU)\r\n;\r\ntopMemory\r\n| join kind = fullouter(topCpu) on User, ApplicationName\r\n| extend BothPercentages = PercentOfTotalClusterMemoryUsed + PercentOfTotalClusterCpuUsed\r\n| top 10 by BothPercentages desc\r\n| extend User = case(ApplicationName == \"Kusto.WinSvc.DM.Svc\", strcat(\"Kusto Data Management \", \"(\", User, \")\"),\r\n ApplicationName == \"KustoQueryRunner\", strcat(\"Kusto Query Runner \", \"(\", User, \")\"),\r\n User == \"AAD app id=e0331ea9-83fc-4409-a17d-6375364c3280\", \"DataMap Agent 001 (app id: e0331ea9-83fc-4409-a17d-6375364c3280)\", // Used for internal MS clusters \r\n User)\r\n| extend PercentOfTotalClusterMemoryUsed_display = iff(isnan(PercentOfTotalClusterMemoryUsed * 100), toreal(0), PercentOfTotalClusterMemoryUsed * 100)\r\n| extend PercentOfTotalClusterCpuUsed_display = iff(isnan(PercentOfTotalClusterCpuUsed * 100), toreal(0), PercentOfTotalClusterCpuUsed * 100)\r\n| where not (ApplicationName == \"Others\" and PercentOfTotalClusterMemoryUsed_display == 0 and PercentOfTotalClusterCpuUsed_display == 0)\r\n| project User, ApplicationName, PercentOfTotalClusterMemoryUsed_display, PercentOfTotalClusterCpuUsed_display", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Top resource consumers", + "transparent": true, + "type": "table" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "description": "Over a sliding timeline window. Not affected by the time range parameter", + "fieldConfig": { + "defaults": { + "color": {}, + "custom": {}, + "thresholds": { + "mode": "absolute", + "steps": [] + } + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 6 + }, + "hiddenSeries": false, + "id": 2, + "legend": { + "avg": true, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 3, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "let system_databases = dynamic(['KustoMonitoringPersistentDatabase', '$systemdb']); \r\nlet system_users = dynamic(['AAD app id=b753584e-c468-4503-852a-374280ce7a62', 'KustoServiceBuiltInPrincipal']); // b753584e-c468-4503-852a-374280ce7a62 is Kusto Query Runner\r\nlet system_cluster_management_applications = dynamic(['Kusto.WinSvc.CM.Svc']); // Kusto Cluster Management\r\nlet CommandTable = ADXCommand\r\n | extend MemoryPeak = tolong(ResourceUtilization.MemoryPeak) \r\n | where DatabaseName !in (system_databases) and User !in (system_users) and ApplicationName !in (system_cluster_management_applications)\r\n | where ApplicationName != 'Kusto.WinSvc.DM.Svc'\r\n | parse _ResourceId with * \"providers/microsoft.kusto/clusters/\" cluster_name\r\n | project-away ResourceUtilization;\r\nlet QueryTable = ADXQuery\r\n | where DatabaseName !in (system_databases) and User !in (system_users) and ApplicationName !in (system_cluster_management_applications)\r\n | where ApplicationName != 'Kusto.WinSvc.DM.Svc'\r\n | extend MemoryPeak = tolong(MemoryPeak)\r\n | parse _ResourceId with * \"providers/microsoft.kusto/clusters/\" cluster_name\r\n | extend CommandType = 'Query';\r\nlet dataset_commands_queries = CommandTable\r\n | union (QueryTable)\r\n | project CommandType, DatabaseName, StartedOn, LastUpdatedOn, Duration, State,\r\n FailureReason, RootActivityId, User,\r\n ApplicationName,\r\n Principal,\r\n TotalCPU,\r\n MemoryPeak,\r\n CorrelationId,\r\n cluster_name;\r\nlet raw = dataset_commands_queries\r\n | where LastUpdatedOn > ago(7d)\r\n | where cluster_name == 'mitulktest'\r\n | where StartedOn > ago(365d)\r\n;\r\nraw\r\n| evaluate activity_engagement(User, StartedOn, 1d, 7d)\r\n| join kind = inner (\r\n raw\r\n | evaluate activity_engagement(User, StartedOn, 1d, 30d)\r\n )\r\n on StartedOn\r\n| project StartedOn, Daily=dcount_activities_inner, Weekly=dcount_activities_outer, Monthly = dcount_activities_outer1 \r\n| where StartedOn > ago(90d)\r\n| project Daily, StartedOn, Weekly, Monthly\r\n| sort by StartedOn asc\r\n", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Unique user count", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null } - ], - "editable": true, - "gnetId": null, - "graphTooltip": 0, - "id": null, - "iteration": 1622241391232, - "links": [], - "panels": [ - { - "collapsed": false, - "datasource": "$ds", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 6, - "panels": [], - "title": "Overview", - "type": "row" + }, + { + "collapsed": false, + "datasource": "$ds", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 15 }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": {}, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } + "id": 19, + "panels": [], + "title": "Key Metrics", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": {}, + "custom": {}, + "thresholds": { + "mode": "absolute", + "steps": [] + } + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 6, + "x": 0, + "y": 16 + }, + "hiddenSeries": false, + "id": 20, + "legend": { + "avg": true, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 3, - "x": 0, - "y": 1 - }, - "id": 4, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Average"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "KeepAlive", + "metricNamespace": "Microsoft.Kusto/clusters", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } ], - "fields": "", - "values": false + "top": "10" }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Average" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [], - "metricDefinition": "$ns", - "metricName": "KeepAlive", - "metricNamespace": "Microsoft.Kusto/clusters", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Keep Alive (Avg)", - "type": "stat" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": {}, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 3, - "x": 3, - "y": 1 - }, - "id": 12, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Maximum", - "Minimum" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [], - "metricDefinition": "$ns", - "metricName": "CPU", - "metricNamespace": "Microsoft.Kusto/clusters", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "CPU (Avg)", - "type": "stat" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": {}, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 3, - "x": 6, - "y": 1 - }, - "id": 13, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Maximum", - "Minimum" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [], - "metricDefinition": "$ns", - "metricName": "IngestionUtilization", - "metricNamespace": "Microsoft.Kusto/clusters", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Ingestion Utilization (Avg) ", - "type": "stat" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": {}, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 3, - "x": 9, - "y": 1 - }, - "id": 14, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Maximum", - "Minimum" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [], - "metricDefinition": "$ns", - "metricName": "IngestionLatencyInSeconds", - "metricNamespace": "Microsoft.Kusto/clusters", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Ingestion Latency (Avg) ", - "type": "stat" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": {}, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 3, - "x": 12, - "y": 1 - }, - "id": 15, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Maximum", - "Minimum" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [], - "metricDefinition": "$ns", - "metricName": "CacheUtilization", - "metricNamespace": "Microsoft.Kusto/clusters", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Cache Utilization (Avg)", - "type": "stat" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": {}, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 3, - "x": 15, - "y": 1 - }, - "id": 16, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Total" - ], - "aggregation": "Total", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Status", - "value": "IngestionResultDetails" - } - ], - "metricDefinition": "$ns", - "metricName": "IngestionResult", - "metricNamespace": "Microsoft.Kusto/clusters", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Succeeded Ingestions (#)", - "type": "stat" - }, - { - "datasource": "$ds", - "description": "The aggregated usage in the cluster, out of the total used CPU and memory. To see more details, go to the Usage tab.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "align": null, - "filterable": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 6 - }, - "id": 17, - "options": { - "showHeader": true - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "let system_databases = dynamic(['KustoMonitoringPersistentDatabase', '$systemdb']); \r\nlet system_users = dynamic(['AAD app id=b753584e-c468-4503-852a-374280ce7a62', 'KustoServiceBuiltInPrincipal']); // b753584e-c468-4503-852a-374280ce7a62 is KustoRunner\r\nlet system_cluster_management_applications = dynamic(['Kusto.WinSvc.CM.Svc']); // Kusto Cluster Management\r\nlet CommandTable = ADXCommand \r\n | where TimeGenerated > datetime(2020-09-09T09:30:00Z) \r\n | where LastUpdatedOn > ago(7d)\r\n | where DatabaseName !in (system_databases) and User !in (system_users) and ApplicationName !in (system_cluster_management_applications)\r\n | where ((false == \"false\" and ApplicationName != 'Kusto.WinSvc.DM.Svc') or false == \"true\")\r\n | extend MemoryPeak = tolong(ResourceUtilization.MemoryPeak) \r\n | parse _ResourceId with * \"providers/microsoft.kusto/clusters/\" cluster_name\r\n | project-away ResourceUtilization;\r\nlet QueryTable = ADXQuery\r\n | where LastUpdatedOn > ago(7d)\r\n | where DatabaseName !in (system_databases) and User !in (system_users) and ApplicationName !in (system_cluster_management_applications)\r\n | where ((false == \"false\" and ApplicationName != 'Kusto.WinSvc.DM.Svc') or false == \"true\")\r\n | extend MemoryPeak = tolong(MemoryPeak)\r\n | parse _ResourceId with * \"providers/microsoft.kusto/clusters/\" cluster_name\r\n | extend CommandType = 'Query';\r\nlet dataset_commands_queries = CommandTable\r\n | union (QueryTable)\r\n | project CommandType, DatabaseName, StartedOn, LastUpdatedOn, Duration, State, FailureReason, RootActivityId, User, ApplicationName, Principal, TotalCPU, MemoryPeak, CorrelationId, cluster_name;\r\nlet dataset = dataset_commands_queries\r\n | where cluster_name == 'mitulktest'\r\n //| where totimespan(TotalCPU) > totimespan(0)\r\n | summarize TotalCPU=max(TotalCPU) \r\n , MemoryPeak=max(MemoryPeak)\r\n by User, ApplicationName, CorrelationId \r\n;\r\nlet totalCPU = toscalar(dataset\r\n | summarize sum((totimespan(TotalCPU) / 1s)));\r\nlet totalMemory = toscalar(dataset\r\n | summarize sum(MemoryPeak));\r\nlet topMemory = \r\n dataset\r\n | top-nested 10000 of User with others=\"Others\" by sum(MemoryPeak), top-nested 10000 of ApplicationName with others=\"Others\" by sum(MemoryPeak)\r\n | extend PercentOfTotalClusterMemoryUsed = aggregated_ApplicationName / toreal(totalMemory)\r\n;\r\nlet topCpu = \r\n dataset\r\n | top-nested 10000 of User with others=\"Others\" by sum(totimespan(TotalCPU) / 1s), top-nested 10000 of ApplicationName with others=\"Others\" by sum(totimespan(TotalCPU) / 1s)\r\n | extend PercentOfTotalClusterCpuUsed = aggregated_ApplicationName / toreal(totalCPU)\r\n;\r\ntopMemory\r\n| join kind = fullouter(topCpu) on User, ApplicationName\r\n| extend BothPercentages = PercentOfTotalClusterMemoryUsed + PercentOfTotalClusterCpuUsed\r\n| top 10 by BothPercentages desc\r\n| extend User = case(ApplicationName == \"Kusto.WinSvc.DM.Svc\", strcat(\"Kusto Data Management \", \"(\", User, \")\"),\r\n ApplicationName == \"KustoQueryRunner\", strcat(\"Kusto Query Runner \", \"(\", User, \")\"),\r\n User == \"AAD app id=e0331ea9-83fc-4409-a17d-6375364c3280\", \"DataMap Agent 001 (app id: e0331ea9-83fc-4409-a17d-6375364c3280)\", // Used for internal MS clusters \r\n User)\r\n| extend PercentOfTotalClusterMemoryUsed_display = iff(isnan(PercentOfTotalClusterMemoryUsed * 100), toreal(0), PercentOfTotalClusterMemoryUsed * 100)\r\n| extend PercentOfTotalClusterCpuUsed_display = iff(isnan(PercentOfTotalClusterCpuUsed * 100), toreal(0), PercentOfTotalClusterCpuUsed * 100)\r\n| where not (ApplicationName == \"Others\" and PercentOfTotalClusterMemoryUsed_display == 0 and PercentOfTotalClusterCpuUsed_display == 0)\r\n| project User, ApplicationName, PercentOfTotalClusterMemoryUsed_display, PercentOfTotalClusterCpuUsed_display", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Top resource consumers", - "transparent": true, - "type": "table" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "description": "Over a sliding timeline window. Not affected by the time range parameter", - "fieldConfig": { - "defaults": { - "color": {}, - "custom": {}, - "thresholds": { - "mode": "absolute", - "steps": [] - } - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 9, - "w": 12, - "x": 12, - "y": 6 - }, - "hiddenSeries": false, - "id": 2, - "legend": { - "avg": true, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 3, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "let system_databases = dynamic(['KustoMonitoringPersistentDatabase', '$systemdb']); \r\nlet system_users = dynamic(['AAD app id=b753584e-c468-4503-852a-374280ce7a62', 'KustoServiceBuiltInPrincipal']); // b753584e-c468-4503-852a-374280ce7a62 is Kusto Query Runner\r\nlet system_cluster_management_applications = dynamic(['Kusto.WinSvc.CM.Svc']); // Kusto Cluster Management\r\nlet CommandTable = ADXCommand\r\n | extend MemoryPeak = tolong(ResourceUtilization.MemoryPeak) \r\n | where DatabaseName !in (system_databases) and User !in (system_users) and ApplicationName !in (system_cluster_management_applications)\r\n | where ApplicationName != 'Kusto.WinSvc.DM.Svc'\r\n | parse _ResourceId with * \"providers/microsoft.kusto/clusters/\" cluster_name\r\n | project-away ResourceUtilization;\r\nlet QueryTable = ADXQuery\r\n | where DatabaseName !in (system_databases) and User !in (system_users) and ApplicationName !in (system_cluster_management_applications)\r\n | where ApplicationName != 'Kusto.WinSvc.DM.Svc'\r\n | extend MemoryPeak = tolong(MemoryPeak)\r\n | parse _ResourceId with * \"providers/microsoft.kusto/clusters/\" cluster_name\r\n | extend CommandType = 'Query';\r\nlet dataset_commands_queries = CommandTable\r\n | union (QueryTable)\r\n | project CommandType, DatabaseName, StartedOn, LastUpdatedOn, Duration, State,\r\n FailureReason, RootActivityId, User,\r\n ApplicationName,\r\n Principal,\r\n TotalCPU,\r\n MemoryPeak,\r\n CorrelationId,\r\n cluster_name;\r\nlet raw = dataset_commands_queries\r\n | where LastUpdatedOn > ago(7d)\r\n | where cluster_name == 'mitulktest'\r\n | where StartedOn > ago(365d)\r\n;\r\nraw\r\n| evaluate activity_engagement(User, StartedOn, 1d, 7d)\r\n| join kind = inner (\r\n raw\r\n | evaluate activity_engagement(User, StartedOn, 1d, 30d)\r\n )\r\n on StartedOn\r\n| project StartedOn, Daily=dcount_activities_inner, Weekly=dcount_activities_outer, Monthly = dcount_activities_outer1 \r\n| where StartedOn > ago(90d)\r\n| project Daily, StartedOn, Weekly, Monthly\r\n| sort by StartedOn asc\r\n", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Unique user count", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Keep Alive", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" }, - { - "collapsed": false, - "datasource": "$ds", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 15 - }, - "id": 19, - "panels": [], - "title": "Key Metrics", - "type": "row" + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": {}, - "custom": {}, - "thresholds": { - "mode": "absolute", - "steps": [] - } - }, - "overrides": [] + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 10, - "w": 6, - "x": 0, - "y": 16 - }, - "hiddenSeries": false, - "id": 20, - "legend": { - "avg": true, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Average" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [], - "metricDefinition": "$ns", - "metricName": "KeepAlive", - "metricNamespace": "Microsoft.Kusto/clusters", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Keep Alive", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": {}, - "custom": {}, - "thresholds": { - "mode": "absolute", - "steps": [] - } - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 10, - "w": 6, - "x": 6, - "y": 16 - }, - "hiddenSeries": false, - "id": 21, - "legend": { - "avg": true, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Maximum", - "Minimum" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [], - "metricDefinition": "$ns", - "metricName": "CPU", - "metricNamespace": "Microsoft.Kusto/clusters", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "CPU", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "percent", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": {}, - "custom": {}, - "thresholds": { - "mode": "absolute", - "steps": [] - } - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 10, - "w": 6, - "x": 12, - "y": 16 - }, - "hiddenSeries": false, - "id": 22, - "legend": { - "avg": true, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Maximum", - "Minimum" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [], - "metricDefinition": "$ns", - "metricName": "CacheUtilization", - "metricNamespace": "Microsoft.Kusto/clusters", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Cache Utilization", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "percent", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": {}, - "custom": {}, - "thresholds": { - "mode": "absolute", - "steps": [] - } - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 10, - "w": 6, - "x": 18, - "y": 16 - }, - "hiddenSeries": false, - "id": 23, - "legend": { - "avg": true, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Maximum", - "Minimum" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [], - "metricDefinition": "$ns", - "metricName": "InstanceCount", - "metricNamespace": "Microsoft.Kusto/clusters", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Instance Count", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": {}, - "custom": {}, - "thresholds": { - "mode": "absolute", - "steps": [] - } - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 10, - "w": 6, - "x": 0, - "y": 26 - }, - "hiddenSeries": false, - "id": 24, - "legend": { - "avg": true, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Maximum", - "Minimum" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [], - "metricDefinition": "$ns", - "metricName": "TotalNumberOfConcurrentQueries", - "metricNamespace": "Microsoft.Kusto/clusters", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Concurrent Queries", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": {}, - "custom": {}, - "thresholds": { - "mode": "absolute", - "steps": [] - } - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 10, - "w": 6, - "x": 6, - "y": 26 - }, - "hiddenSeries": false, - "id": 25, - "legend": { - "avg": true, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Maximum", - "Minimum", - "Total" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Query Status", - "value": "QueryStatus" - } - ], - "metricDefinition": "$ns", - "metricName": "QueryDuration", - "metricNamespace": "Microsoft.Kusto/clusters", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Query Duration", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ms", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": {}, - "custom": {}, - "thresholds": { - "mode": "absolute", - "steps": [] - } - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 10, - "w": 6, - "x": 12, - "y": 26 - }, - "hiddenSeries": false, - "id": 26, - "legend": { - "avg": true, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Maximum", - "Minimum", - "Total" - ], - "aggregation": "Total", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Command Type", - "value": "CommandType" - } - ], - "metricDefinition": "$ns", - "metricName": "TotalNumberOfThrottledCommands", - "metricNamespace": "Microsoft.Kusto/clusters", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Throttled Commands", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ms", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": {}, - "custom": {}, - "thresholds": { - "mode": "absolute", - "steps": [] - } - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 10, - "w": 6, - "x": 18, - "y": 26 - }, - "hiddenSeries": false, - "id": 27, - "legend": { - "avg": true, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Maximum", - "Minimum", - "Total" - ], - "aggregation": "Maximum", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [], - "metricDefinition": "$ns", - "metricName": "TotalNumberOfThrottledQueries", - "metricNamespace": "Microsoft.Kusto/clusters", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Throttled Queries", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": {}, - "custom": {}, - "thresholds": { - "mode": "absolute", - "steps": [] - } - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 10, - "w": 6, - "x": 0, - "y": 36 - }, - "hiddenSeries": false, - "id": 28, - "legend": { - "avg": true, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Maximum", - "Minimum" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [], - "metricDefinition": "$ns", - "metricName": "IngestionUtilization", - "metricNamespace": "Microsoft.Kusto/clusters", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Ingestion Utilization", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "percent", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": {}, - "custom": {}, - "thresholds": { - "mode": "absolute", - "steps": [] - } - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 10, - "w": 6, - "x": 6, - "y": 36 - }, - "hiddenSeries": false, - "id": 29, - "legend": { - "avg": true, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Maximum", - "Minimum" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [], - "metricDefinition": "$ns", - "metricName": "IngestionLatencyInSeconds", - "metricNamespace": "Microsoft.Kusto/clusters", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Ingestion Latency", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "s", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": {}, - "custom": {}, - "thresholds": { - "mode": "absolute", - "steps": [] - } - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 10, - "w": 6, - "x": 12, - "y": 36 - }, - "hiddenSeries": false, - "id": 30, - "legend": { - "avg": true, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Total" - ], - "aggregation": "Total", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Status", - "value": "IngestionResultDetails" - } - ], - "metricDefinition": "$ns", - "metricName": "IngestionResult", - "metricNamespace": "Microsoft.Kusto/clusters", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Ingestion Result", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": {}, - "custom": {}, - "thresholds": { - "mode": "absolute", - "steps": [] - } - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 10, - "w": 6, - "x": 18, - "y": 36 - }, - "hiddenSeries": false, - "id": 31, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Total", - "Maximum" - ], - "aggregation": "Total", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Database", - "value": "Database" - } - ], - "metricDefinition": "$ns", - "metricName": "IngestionVolumeInMB", - "metricNamespace": "Microsoft.Kusto/clusters", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Ingestion Volume", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "decbytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": {}, - "custom": {}, - "thresholds": { - "mode": "absolute", - "steps": [] - } - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 10, - "w": 6, - "x": 0, - "y": 46 - }, - "hiddenSeries": false, - "id": 32, - "legend": { - "avg": true, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Minimum", - "Maximum" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [], - "metricDefinition": "$ns", - "metricName": "StreamingIngestDataRate", - "metricNamespace": "Microsoft.Kusto/clusters", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Streaming Ingest Data Rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": {}, - "custom": {}, - "thresholds": { - "mode": "absolute", - "steps": [] - } - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 10, - "w": 6, - "x": 6, - "y": 46 - }, - "hiddenSeries": false, - "id": 33, - "legend": { - "avg": true, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Minimum", - "Maximum" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [], - "metricDefinition": "$ns", - "metricName": "StreamingIngestDuration", - "metricNamespace": "Microsoft.Kusto/clusters", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Streaming Ingest Duration", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ms", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": {}, - "custom": {}, - "thresholds": { - "mode": "absolute", - "steps": [] - } - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 10, - "w": 6, - "x": 12, - "y": 46 - }, - "hiddenSeries": false, - "id": 34, - "legend": { - "avg": true, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "None", - "Average", - "Minimum", - "Maximum", - "Total", - "Count" - ], - "aggregation": "None", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [], - "metricDefinition": "$ns", - "metricName": "SteamingIngestRequestRate", - "metricNamespace": "Microsoft.Kusto/clusters", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Streaming Ingest Request Rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ms", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": {}, - "custom": {}, - "thresholds": { - "mode": "absolute", - "steps": [] - } - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 10, - "w": 6, - "x": 18, - "y": 46 - }, - "hiddenSeries": false, - "id": 35, - "legend": { - "avg": true, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Average" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Result", - "value": "Result" - } - ], - "metricDefinition": "$ns", - "metricName": "StreamingIngestResults", - "metricNamespace": "Microsoft.Kusto/clusters", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Streaming Ingest Result", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": {}, - "custom": {}, - "thresholds": { - "mode": "absolute", - "steps": [] - } - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 56 - }, - "hiddenSeries": false, - "id": 36, - "legend": { - "avg": true, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Total", - "Average", - "Minimum", - "Maximum" - ], - "aggregation": "Total", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Component Type", - "value": "ComponentType" - }, - { - "text": "Component Name", - "value": "ComponentName" - } - ], - "metricDefinition": "$ns", - "metricName": "EventsProcessed", - "metricNamespace": "Microsoft.Kusto/clusters", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Events Processed", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": {}, - "custom": {}, - "thresholds": { - "mode": "absolute", - "steps": [] - } - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 9, - "w": 12, - "x": 12, - "y": 56 - }, - "hiddenSeries": false, - "id": 37, - "legend": { - "avg": true, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Average" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Component Type", - "value": "ComponentType" - }, - { - "text": "Component Name", - "value": "ComponentName" - } - ], - "metricDefinition": "$ns", - "metricName": "DiscoveryLatency", - "metricNamespace": "Microsoft.Kusto/clusters", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Discovery Latency", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "collapsed": false, - "datasource": "$ds", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 65 - }, - "id": 40, - "panels": [], - "title": "Usage", - "type": "row" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "align": null, - "filterable": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 14, - "x": 0, - "y": 66 - }, - "id": 43, - "options": { - "showHeader": true - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "let system_databases = dynamic(['KustoMonitoringPersistentDatabase', '$systemdb']); \r\nlet system_users = dynamic(['AAD app id=b753584e-c468-4503-852a-374280ce7a62', 'KustoServiceBuiltInPrincipal']); // b753584e-c468-4503-852a-374280ce7a62 is KustoRunner\r\nlet system_cluster_management_applications = dynamic(['Kusto.WinSvc.CM.Svc']); // Kusto Cluster Management\r\nlet CommandTable = ADXCommand \r\n | where TimeGenerated > datetime(2020-09-09T09:30:00Z) \r\n | where LastUpdatedOn > ago(7d)\r\n | where DatabaseName !in (system_databases) and User !in (system_users) and ApplicationName !in (system_cluster_management_applications)\r\n | where ((false == \"false\" and ApplicationName != 'Kusto.WinSvc.DM.Svc') or false == \"true\")\r\n | extend MemoryPeak = tolong(ResourceUtilization.MemoryPeak) \r\n | parse _ResourceId with * \"providers/microsoft.kusto/clusters/\" cluster_name\r\n | project-away ResourceUtilization;\r\nlet QueryTable = ADXQuery\r\n | where LastUpdatedOn > ago(7d)\r\n | where DatabaseName !in (system_databases) and User !in (system_users) and ApplicationName !in (system_cluster_management_applications)\r\n | where ((false == \"false\" and ApplicationName != 'Kusto.WinSvc.DM.Svc') or false == \"true\")\r\n | extend MemoryPeak = tolong(MemoryPeak)\r\n | parse _ResourceId with * \"providers/microsoft.kusto/clusters/\" cluster_name\r\n | extend CommandType = 'Query';\r\nlet dataset_commands_queries = CommandTable\r\n | union (QueryTable)\r\n | project CommandType, DatabaseName, StartedOn, LastUpdatedOn, Duration, State, FailureReason, RootActivityId, User, ApplicationName, Principal, TotalCPU, MemoryPeak, CorrelationId, cluster_name;\r\nlet dataset = dataset_commands_queries\r\n | where cluster_name == 'mitulktest'\r\n //| where totimespan(TotalCPU) > totimespan(0)\r\n | summarize TotalCPU=max(TotalCPU) \r\n , MemoryPeak=max(MemoryPeak)\r\n by User, ApplicationName, CorrelationId \r\n;\r\nlet totalCPU = toscalar(dataset\r\n | summarize sum((totimespan(TotalCPU) / 1s)));\r\nlet totalMemory = toscalar(dataset\r\n | summarize sum(MemoryPeak));\r\nlet topMemory = \r\n dataset\r\n | top-nested 10000 of User with others=\"Others\" by sum(MemoryPeak), top-nested 10000 of ApplicationName with others=\"Others\" by sum(MemoryPeak)\r\n | extend PercentOfTotalClusterMemoryUsed = aggregated_ApplicationName / toreal(totalMemory)\r\n;\r\nlet topCpu = \r\n dataset\r\n | top-nested 10000 of User with others=\"Others\" by sum(totimespan(TotalCPU) / 1s), top-nested 10000 of ApplicationName with others=\"Others\" by sum(totimespan(TotalCPU) / 1s)\r\n | extend PercentOfTotalClusterCpuUsed = aggregated_ApplicationName / toreal(totalCPU)\r\n;\r\ntopMemory\r\n| join kind = fullouter(topCpu) on User, ApplicationName\r\n| extend BothPercentages = PercentOfTotalClusterMemoryUsed + PercentOfTotalClusterCpuUsed\r\n| top 10 by BothPercentages desc\r\n| extend User = case(ApplicationName == \"Kusto.WinSvc.DM.Svc\", strcat(\"Kusto Data Management \", \"(\", User, \")\"),\r\n ApplicationName == \"KustoQueryRunner\", strcat(\"Kusto Query Runner \", \"(\", User, \")\"),\r\n User == \"AAD app id=e0331ea9-83fc-4409-a17d-6375364c3280\", \"DataMap Agent 001 (app id: e0331ea9-83fc-4409-a17d-6375364c3280)\", // Used for internal MS clusters \r\n User)\r\n| extend PercentOfTotalClusterMemoryUsed_display = iff(isnan(PercentOfTotalClusterMemoryUsed * 100), toreal(0), PercentOfTotalClusterMemoryUsed * 100)\r\n| extend PercentOfTotalClusterCpuUsed_display = iff(isnan(PercentOfTotalClusterCpuUsed * 100), toreal(0), PercentOfTotalClusterCpuUsed * 100)\r\n| where not (ApplicationName == \"Others\" and PercentOfTotalClusterMemoryUsed_display == 0 and PercentOfTotalClusterCpuUsed_display == 0)\r\n| project User, ApplicationName, PercentOfTotalClusterMemoryUsed_display, PercentOfTotalClusterCpuUsed_display", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [ - "Average" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Component Type", - "value": "ComponentType" - }, - { - "text": "Component Name", - "value": "ComponentName" - } - ], - "metricDefinition": "$ns", - "metricName": "DiscoveryLatency", - "metricNamespace": "Microsoft.Kusto/clusters", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Top resource consumers (within the CPU and memory consumption of the cluster)", - "transparent": true, - "type": "table" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "align": null, - "filterable": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 10, - "x": 14, - "y": 66 - }, - "id": 44, - "options": { - "showHeader": true - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "let system_databases = dynamic(['KustoMonitoringPersistentDatabase', '$systemdb']); \r\nlet system_users = dynamic(['AAD app id=b753584e-c468-4503-852a-374280ce7a62', 'KustoServiceBuiltInPrincipal']); // b753584e-c468-4503-852a-374280ce7a62 is Kusto Query Runner\r\nlet system_cluster_management_applications = dynamic(['Kusto.WinSvc.CM.Svc']); // Kusto Cluster Management\r\nlet CommandTable = ADXCommand\r\n | extend MemoryPeak = tolong(ResourceUtilization.MemoryPeak)\r\n | where LastUpdatedOn > ago(7d)\r\n | where DatabaseName !in (system_databases) and User !in (system_users) and ApplicationName !in (system_cluster_management_applications)\r\n | where ((false == \"false\" and ApplicationName != 'Kusto.WinSvc.DM.Svc') or false == \"true\")\r\n | parse _ResourceId with * \"providers/microsoft.kusto/clusters/\" cluster_name\r\n | project-away ResourceUtilization;\r\nlet QueryTable = ADXQuery\r\n | where LastUpdatedOn > ago(7d)\r\n | where DatabaseName !in (system_databases) and User !in (system_users) and ApplicationName !in (system_cluster_management_applications)\r\n | where ((false == \"false\" and ApplicationName != 'Kusto.WinSvc.DM.Svc') or false == \"true\")\r\n | extend MemoryPeak = tolong(MemoryPeak)\r\n | parse _ResourceId with * \"providers/microsoft.kusto/clusters/\" cluster_name\r\n | extend CommandType = 'Query';\r\nlet dataset_commands_queries = CommandTable\r\n | union (QueryTable)\r\n | project CommandType, DatabaseName, StartedOn, LastUpdatedOn, Duration, State,\r\n FailureReason, RootActivityId, User, ApplicationName, Principal, TotalCPU, MemoryPeak, CorrelationId, cluster_name;\r\nlet dataset = dataset_commands_queries\r\n | where cluster_name == 'mitulktest'\r\n | where CommandType != 'TableSetOrAppend'\r\n | summarize Count=count() by User, ApplicationName\r\n | project User, ApplicationName, Count\r\n | extend User = case(ApplicationName == \"Kusto.WinSvc.DM.Svc\", strcat(\"Kusto Data Management \", \"(\", User, \")\"),\r\n User == \"AAD app id=e0331ea9-83fc-4409-a17d-6375364c3280\", \"DataMap Agent 001 (app id: e0331ea9-83fc-4409-a17d-6375364c3280)\", // Used for internal MS clusters\r\n User)\r\n | top 10 by Count;\r\n//| order by Count desc\r\n//
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Average", "Maximum", "Minimum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "CPU", + "metricNamespace": "Microsoft.Kusto/clusters", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "CPU", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "percent", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true }, { - "allValue": null, - "current": {}, - "datasource": "$ds", - "definition": "subscriptions()", - "description": null, - "error": null, - "hide": 0, - "includeAll": false, - "label": "Subscription", - "multi": false, - "name": "sub", - "options": [], - "query": "subscriptions()", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": {}, + "custom": {}, + "thresholds": { + "mode": "absolute", + "steps": [] + } + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 6, + "x": 12, + "y": 16 + }, + "hiddenSeries": false, + "id": 22, + "legend": { + "avg": true, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Average", "Maximum", "Minimum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "CacheUtilization", + "metricNamespace": "Microsoft.Kusto/clusters", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Cache Utilization", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "percent", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true }, { - "allValue": null, - "current": {}, - "datasource": "$ds", - "definition": "ResourceGroups($sub)", - "description": null, - "error": null, - "hide": 0, - "includeAll": false, - "label": "Resource Group", - "multi": false, - "name": "rg", - "options": [], - "query": "ResourceGroups($sub)", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": {}, + "custom": {}, + "thresholds": { + "mode": "absolute", + "steps": [] + } + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 6, + "x": 18, + "y": 16 + }, + "hiddenSeries": false, + "id": 23, + "legend": { + "avg": true, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Average", "Maximum", "Minimum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "InstanceCount", + "metricNamespace": "Microsoft.Kusto/clusters", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Instance Count", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true }, { - "allValue": null, - "current": { - "selected": false, + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": {}, + "custom": {}, + "thresholds": { + "mode": "absolute", + "steps": [] + } + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 6, + "x": 0, + "y": 26 + }, + "hiddenSeries": false, + "id": 24, + "legend": { + "avg": true, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Average", "Maximum", "Minimum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "TotalNumberOfConcurrentQueries", + "metricNamespace": "Microsoft.Kusto/clusters", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Concurrent Queries", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": {}, + "custom": {}, + "thresholds": { + "mode": "absolute", + "steps": [] + } + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 6, + "x": 6, + "y": 26 + }, + "hiddenSeries": false, + "id": 25, + "legend": { + "avg": true, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Average", "Maximum", "Minimum", "Total"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Query Status", + "value": "QueryStatus" + } + ], + "metricDefinition": "$ns", + "metricName": "QueryDuration", + "metricNamespace": "Microsoft.Kusto/clusters", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Query Duration", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "ms", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": {}, + "custom": {}, + "thresholds": { + "mode": "absolute", + "steps": [] + } + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 6, + "x": 12, + "y": 26 + }, + "hiddenSeries": false, + "id": 26, + "legend": { + "avg": true, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Average", "Maximum", "Minimum", "Total"], + "aggregation": "Total", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Command Type", + "value": "CommandType" + } + ], + "metricDefinition": "$ns", + "metricName": "TotalNumberOfThrottledCommands", + "metricNamespace": "Microsoft.Kusto/clusters", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Throttled Commands", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "ms", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": {}, + "custom": {}, + "thresholds": { + "mode": "absolute", + "steps": [] + } + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 6, + "x": 18, + "y": 26 + }, + "hiddenSeries": false, + "id": 27, + "legend": { + "avg": true, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Average", "Maximum", "Minimum", "Total"], + "aggregation": "Maximum", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "TotalNumberOfThrottledQueries", + "metricNamespace": "Microsoft.Kusto/clusters", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Throttled Queries", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": {}, + "custom": {}, + "thresholds": { + "mode": "absolute", + "steps": [] + } + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 6, + "x": 0, + "y": 36 + }, + "hiddenSeries": false, + "id": 28, + "legend": { + "avg": true, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Average", "Maximum", "Minimum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "IngestionUtilization", + "metricNamespace": "Microsoft.Kusto/clusters", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Ingestion Utilization", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "percent", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": {}, + "custom": {}, + "thresholds": { + "mode": "absolute", + "steps": [] + } + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 6, + "x": 6, + "y": 36 + }, + "hiddenSeries": false, + "id": 29, + "legend": { + "avg": true, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Average", "Maximum", "Minimum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "IngestionLatencyInSeconds", + "metricNamespace": "Microsoft.Kusto/clusters", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Ingestion Latency", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": {}, + "custom": {}, + "thresholds": { + "mode": "absolute", + "steps": [] + } + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 6, + "x": 12, + "y": 36 + }, + "hiddenSeries": false, + "id": 30, + "legend": { + "avg": true, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Total"], + "aggregation": "Total", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Status", + "value": "IngestionResultDetails" + } + ], + "metricDefinition": "$ns", + "metricName": "IngestionResult", + "metricNamespace": "Microsoft.Kusto/clusters", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Ingestion Result", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": {}, + "custom": {}, + "thresholds": { + "mode": "absolute", + "steps": [] + } + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 6, + "x": 18, + "y": 36 + }, + "hiddenSeries": false, + "id": 31, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": true, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Total", "Maximum"], + "aggregation": "Total", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Database", + "value": "Database" + } + ], + "metricDefinition": "$ns", + "metricName": "IngestionVolumeInMB", + "metricNamespace": "Microsoft.Kusto/clusters", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Ingestion Volume", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "decbytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": {}, + "custom": {}, + "thresholds": { + "mode": "absolute", + "steps": [] + } + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 6, + "x": 0, + "y": 46 + }, + "hiddenSeries": false, + "id": 32, + "legend": { + "avg": true, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Average", "Minimum", "Maximum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "StreamingIngestDataRate", + "metricNamespace": "Microsoft.Kusto/clusters", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Streaming Ingest Data Rate", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": {}, + "custom": {}, + "thresholds": { + "mode": "absolute", + "steps": [] + } + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 6, + "x": 6, + "y": 46 + }, + "hiddenSeries": false, + "id": 33, + "legend": { + "avg": true, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Average", "Minimum", "Maximum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "StreamingIngestDuration", + "metricNamespace": "Microsoft.Kusto/clusters", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Streaming Ingest Duration", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "ms", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": {}, + "custom": {}, + "thresholds": { + "mode": "absolute", + "steps": [] + } + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 6, + "x": 12, + "y": 46 + }, + "hiddenSeries": false, + "id": 34, + "legend": { + "avg": true, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["None", "Average", "Minimum", "Maximum", "Total", "Count"], + "aggregation": "None", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "SteamingIngestRequestRate", + "metricNamespace": "Microsoft.Kusto/clusters", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Streaming Ingest Request Rate", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "ms", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": {}, + "custom": {}, + "thresholds": { + "mode": "absolute", + "steps": [] + } + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 6, + "x": 18, + "y": 46 + }, + "hiddenSeries": false, + "id": 35, + "legend": { + "avg": true, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Average"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Result", + "value": "Result" + } + ], + "metricDefinition": "$ns", + "metricName": "StreamingIngestResults", + "metricNamespace": "Microsoft.Kusto/clusters", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Streaming Ingest Result", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": {}, + "custom": {}, + "thresholds": { + "mode": "absolute", + "steps": [] + } + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 56 + }, + "hiddenSeries": false, + "id": 36, + "legend": { + "avg": true, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Total", "Average", "Minimum", "Maximum"], + "aggregation": "Total", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Component Type", + "value": "ComponentType" + }, + { + "text": "Component Name", + "value": "ComponentName" + } + ], + "metricDefinition": "$ns", + "metricName": "EventsProcessed", + "metricNamespace": "Microsoft.Kusto/clusters", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Events Processed", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": {}, + "custom": {}, + "thresholds": { + "mode": "absolute", + "steps": [] + } + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 56 + }, + "hiddenSeries": false, + "id": 37, + "legend": { + "avg": true, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Average"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Component Type", + "value": "ComponentType" + }, + { + "text": "Component Name", + "value": "ComponentName" + } + ], + "metricDefinition": "$ns", + "metricName": "DiscoveryLatency", + "metricNamespace": "Microsoft.Kusto/clusters", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Discovery Latency", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "collapsed": false, + "datasource": "$ds", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 65 + }, + "id": 40, + "panels": [], + "title": "Usage", + "type": "row" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": null, + "filterable": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 14, + "x": 0, + "y": 66 + }, + "id": 43, + "options": { + "showHeader": true + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "let system_databases = dynamic(['KustoMonitoringPersistentDatabase', '$systemdb']); \r\nlet system_users = dynamic(['AAD app id=b753584e-c468-4503-852a-374280ce7a62', 'KustoServiceBuiltInPrincipal']); // b753584e-c468-4503-852a-374280ce7a62 is KustoRunner\r\nlet system_cluster_management_applications = dynamic(['Kusto.WinSvc.CM.Svc']); // Kusto Cluster Management\r\nlet CommandTable = ADXCommand \r\n | where TimeGenerated > datetime(2020-09-09T09:30:00Z) \r\n | where LastUpdatedOn > ago(7d)\r\n | where DatabaseName !in (system_databases) and User !in (system_users) and ApplicationName !in (system_cluster_management_applications)\r\n | where ((false == \"false\" and ApplicationName != 'Kusto.WinSvc.DM.Svc') or false == \"true\")\r\n | extend MemoryPeak = tolong(ResourceUtilization.MemoryPeak) \r\n | parse _ResourceId with * \"providers/microsoft.kusto/clusters/\" cluster_name\r\n | project-away ResourceUtilization;\r\nlet QueryTable = ADXQuery\r\n | where LastUpdatedOn > ago(7d)\r\n | where DatabaseName !in (system_databases) and User !in (system_users) and ApplicationName !in (system_cluster_management_applications)\r\n | where ((false == \"false\" and ApplicationName != 'Kusto.WinSvc.DM.Svc') or false == \"true\")\r\n | extend MemoryPeak = tolong(MemoryPeak)\r\n | parse _ResourceId with * \"providers/microsoft.kusto/clusters/\" cluster_name\r\n | extend CommandType = 'Query';\r\nlet dataset_commands_queries = CommandTable\r\n | union (QueryTable)\r\n | project CommandType, DatabaseName, StartedOn, LastUpdatedOn, Duration, State, FailureReason, RootActivityId, User, ApplicationName, Principal, TotalCPU, MemoryPeak, CorrelationId, cluster_name;\r\nlet dataset = dataset_commands_queries\r\n | where cluster_name == 'mitulktest'\r\n //| where totimespan(TotalCPU) > totimespan(0)\r\n | summarize TotalCPU=max(TotalCPU) \r\n , MemoryPeak=max(MemoryPeak)\r\n by User, ApplicationName, CorrelationId \r\n;\r\nlet totalCPU = toscalar(dataset\r\n | summarize sum((totimespan(TotalCPU) / 1s)));\r\nlet totalMemory = toscalar(dataset\r\n | summarize sum(MemoryPeak));\r\nlet topMemory = \r\n dataset\r\n | top-nested 10000 of User with others=\"Others\" by sum(MemoryPeak), top-nested 10000 of ApplicationName with others=\"Others\" by sum(MemoryPeak)\r\n | extend PercentOfTotalClusterMemoryUsed = aggregated_ApplicationName / toreal(totalMemory)\r\n;\r\nlet topCpu = \r\n dataset\r\n | top-nested 10000 of User with others=\"Others\" by sum(totimespan(TotalCPU) / 1s), top-nested 10000 of ApplicationName with others=\"Others\" by sum(totimespan(TotalCPU) / 1s)\r\n | extend PercentOfTotalClusterCpuUsed = aggregated_ApplicationName / toreal(totalCPU)\r\n;\r\ntopMemory\r\n| join kind = fullouter(topCpu) on User, ApplicationName\r\n| extend BothPercentages = PercentOfTotalClusterMemoryUsed + PercentOfTotalClusterCpuUsed\r\n| top 10 by BothPercentages desc\r\n| extend User = case(ApplicationName == \"Kusto.WinSvc.DM.Svc\", strcat(\"Kusto Data Management \", \"(\", User, \")\"),\r\n ApplicationName == \"KustoQueryRunner\", strcat(\"Kusto Query Runner \", \"(\", User, \")\"),\r\n User == \"AAD app id=e0331ea9-83fc-4409-a17d-6375364c3280\", \"DataMap Agent 001 (app id: e0331ea9-83fc-4409-a17d-6375364c3280)\", // Used for internal MS clusters \r\n User)\r\n| extend PercentOfTotalClusterMemoryUsed_display = iff(isnan(PercentOfTotalClusterMemoryUsed * 100), toreal(0), PercentOfTotalClusterMemoryUsed * 100)\r\n| extend PercentOfTotalClusterCpuUsed_display = iff(isnan(PercentOfTotalClusterCpuUsed * 100), toreal(0), PercentOfTotalClusterCpuUsed * 100)\r\n| where not (ApplicationName == \"Others\" and PercentOfTotalClusterMemoryUsed_display == 0 and PercentOfTotalClusterCpuUsed_display == 0)\r\n| project User, ApplicationName, PercentOfTotalClusterMemoryUsed_display, PercentOfTotalClusterCpuUsed_display", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": ["Average"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Component Type", + "value": "ComponentType" + }, + { + "text": "Component Name", + "value": "ComponentName" + } + ], + "metricDefinition": "$ns", + "metricName": "DiscoveryLatency", + "metricNamespace": "Microsoft.Kusto/clusters", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Top resource consumers (within the CPU and memory consumption of the cluster)", + "transparent": true, + "type": "table" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": null, + "filterable": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 10, + "x": 14, + "y": 66 + }, + "id": 44, + "options": { + "showHeader": true + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "let system_databases = dynamic(['KustoMonitoringPersistentDatabase', '$systemdb']); \r\nlet system_users = dynamic(['AAD app id=b753584e-c468-4503-852a-374280ce7a62', 'KustoServiceBuiltInPrincipal']); // b753584e-c468-4503-852a-374280ce7a62 is Kusto Query Runner\r\nlet system_cluster_management_applications = dynamic(['Kusto.WinSvc.CM.Svc']); // Kusto Cluster Management\r\nlet CommandTable = ADXCommand\r\n | extend MemoryPeak = tolong(ResourceUtilization.MemoryPeak)\r\n | where LastUpdatedOn > ago(7d)\r\n | where DatabaseName !in (system_databases) and User !in (system_users) and ApplicationName !in (system_cluster_management_applications)\r\n | where ((false == \"false\" and ApplicationName != 'Kusto.WinSvc.DM.Svc') or false == \"true\")\r\n | parse _ResourceId with * \"providers/microsoft.kusto/clusters/\" cluster_name\r\n | project-away ResourceUtilization;\r\nlet QueryTable = ADXQuery\r\n | where LastUpdatedOn > ago(7d)\r\n | where DatabaseName !in (system_databases) and User !in (system_users) and ApplicationName !in (system_cluster_management_applications)\r\n | where ((false == \"false\" and ApplicationName != 'Kusto.WinSvc.DM.Svc') or false == \"true\")\r\n | extend MemoryPeak = tolong(MemoryPeak)\r\n | parse _ResourceId with * \"providers/microsoft.kusto/clusters/\" cluster_name\r\n | extend CommandType = 'Query';\r\nlet dataset_commands_queries = CommandTable\r\n | union (QueryTable)\r\n | project CommandType, DatabaseName, StartedOn, LastUpdatedOn, Duration, State,\r\n FailureReason, RootActivityId, User, ApplicationName, Principal, TotalCPU, MemoryPeak, CorrelationId, cluster_name;\r\nlet dataset = dataset_commands_queries\r\n | where cluster_name == 'mitulktest'\r\n | where CommandType != 'TableSetOrAppend'\r\n | summarize Count=count() by User, ApplicationName\r\n | project User, ApplicationName, Count\r\n | extend User = case(ApplicationName == \"Kusto.WinSvc.DM.Svc\", strcat(\"Kusto Data Management \", \"(\", User, \")\"),\r\n User == \"AAD app id=e0331ea9-83fc-4409-a17d-6375364c3280\", \"DataMap Agent 001 (app id: e0331ea9-83fc-4409-a17d-6375364c3280)\", // Used for internal MS clusters\r\n User)\r\n | top 10 by Count;\r\n//| order by Count desc\r\n//
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [ - "Count" - ], - "aggregation": "Count", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "DatabaseName", - "value": "DatabaseName" - }, - { - "text": "CollectionName", - "value": "CollectionName" - }, - { - "text": "Region", - "value": "Region" - }, - { - "text": "StatusCode", - "value": "StatusCode" - }, - { - "text": "OperationType", - "value": "OperationType" - }, - { - "text": "Status", - "value": "Status" - } - ], - "metricDefinition": "$ns", - "metricName": "TotalRequests", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Total Requests", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": {}, - "custom": {}, - "thresholds": { - "mode": "absolute", - "steps": [] - }, - "unit": "short" - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 9, - "w": 12, - "x": 12, - "y": 1 - }, - "hiddenSeries": false, - "id": 19, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null as zero", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [ - "Count" - ], - "aggregation": "Count", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "StatusCode", - "filter": "429", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "DatabaseName", - "value": "DatabaseName" - }, - { - "text": "CollectionName", - "value": "CollectionName" - }, - { - "text": "Region", - "value": "Region" - }, - { - "text": "StatusCode", - "value": "StatusCode" - }, - { - "text": "OperationType", - "value": "OperationType" - }, - { - "text": "Status", - "value": "Status" - } - ], - "metricDefinition": "$ns", - "metricName": "TotalRequests", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Throttled Requests (429s)", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": {}, - "custom": {}, - "thresholds": { - "mode": "absolute", - "steps": [] - }, - "unit": "short" - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 10 - }, - "hiddenSeries": false, - "id": 9, - "legend": { - "avg": false, - "current": false, - "max": true, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [ - "Maximum", - "Average" - ], - "aggregation": "Maximum", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 3600000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "CollectionName", - "value": "CollectionName" - }, - { - "text": "DatabaseName", - "value": "DatabaseName" - }, - { - "text": "Region", - "value": "Region" - }, - { - "text": "PartitionKeyRangeId", - "value": "PartitionKeyRangeId" - } - ], - "metricDefinition": "$ns", - "metricName": "NormalizedRUConsumption", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Normalized RU Consumption (max)", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "percent", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": {}, - "custom": {}, - "thresholds": { - "mode": "absolute", - "steps": [] - }, - "unit": "short" - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 10 - }, - "hiddenSeries": false, - "id": 12, - "legend": { - "avg": true, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [ - "Total", - "Average" - ], - "aggregation": "Total", - "allowedTimeGrainsMs": [ - 300000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "CollectionName", - "value": "CollectionName" - }, - { - "text": "DatabaseName", - "value": "DatabaseName" - }, - { - "text": "Region", - "value": "Region" - } - ], - "metricDefinition": "$ns", - "metricName": "IndexUsage", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "5 minutes", - "value": "PT5M" - } - ], - "top": "" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [ - "Total", - "Average" - ], - "aggregation": "Total", - "allowedTimeGrainsMs": [ - 300000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "CollectionName", - "value": "CollectionName" - }, - { - "text": "DatabaseName", - "value": "DatabaseName" - }, - { - "text": "Region", - "value": "Region" - } - ], - "metricDefinition": "$ns", - "metricName": "DataUsage", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "5 minutes", - "value": "PT5M" - } - ], - "top": "" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "B", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Index & Data Usage", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "decbytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "fixed" - }, - "custom": { - "align": null, - "filterable": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Total" - }, - "properties": [ - { - "id": "custom.displayMode", - "value": "lcd-gauge" - }, - { - "id": "color", - "value": { - "mode": "continuous-GrYlRd" - } - } - ] - } - ] - }, - "gridPos": { - "h": 9, - "w": 8, - "x": 0, - "y": 18 - }, - "id": 11, - "maxDataPoints": 1, - "options": { - "showHeader": true - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [ - "Count" - ], - "aggregation": "Count", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "CollectionName", - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "DatabaseName", - "value": "DatabaseName" - }, - { - "text": "CollectionName", - "value": "CollectionName" - }, - { - "text": "Region", - "value": "Region" - }, - { - "text": "StatusCode", - "value": "StatusCode" - }, - { - "text": "OperationType", - "value": "OperationType" - }, - { - "text": "Status", - "value": "Status" - } - ], - "metricDefinition": "$ns", - "metricName": "TotalRequests", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Total Requests (Count) By Collection", - "transformations": [ - { - "id": "reduce", - "options": { - "reducers": [ - "sum" - ] - } - } - ], - "type": "table" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "fixed" - }, - "custom": { - "align": null, - "filterable": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Total" - }, - "properties": [ - { - "id": "custom.displayMode", - "value": "lcd-gauge" - }, - { - "id": "color", - "value": { - "mode": "continuous-GrYlRd" - } - } - ] - } - ] - }, - "gridPos": { - "h": 9, - "w": 8, - "x": 8, - "y": 18 - }, - "id": 14, - "maxDataPoints": 1, - "options": { - "showHeader": true - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [ - "Total", - "Average" - ], - "aggregation": "Total", - "allowedTimeGrainsMs": [ - 300000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "CollectionName", - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "CollectionName", - "value": "CollectionName" - }, - { - "text": "DatabaseName", - "value": "DatabaseName" - }, - { - "text": "Region", - "value": "Region" - } - ], - "metricDefinition": "$ns", - "metricName": "DocumentCount", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "5 minutes", - "value": "PT5M" - } - ], - "top": "" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "B", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Document Count (Avg) By Collection", - "transformations": [ - { - "id": "reduce", - "options": { - "reducers": [ - "sum" - ] - } - } - ], - "type": "table" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "fixed" - }, - "custom": { - "align": null, - "filterable": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Total" - }, - "properties": [ - { - "id": "custom.displayMode", - "value": "lcd-gauge" - }, - { - "id": "color", - "value": { - "mode": "continuous-GrYlRd" - } - } - ] - } - ] - }, - "gridPos": { - "h": 9, - "w": 8, - "x": 16, - "y": 18 - }, - "id": 15, - "maxDataPoints": 1, - "options": { - "showHeader": true - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [ - "Total", - "Average" - ], - "aggregation": "Total", - "allowedTimeGrainsMs": [ - 300000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "CollectionName", - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "CollectionName", - "value": "CollectionName" - }, - { - "text": "DatabaseName", - "value": "DatabaseName" - }, - { - "text": "Region", - "value": "Region" - } - ], - "metricDefinition": "$ns", - "metricName": "DataUsage", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "5 minutes", - "value": "PT5M" - } - ], - "top": "" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "C", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Data Usage (Avg) By Collection", - "transformations": [ - { - "id": "reduce", - "options": { - "reducers": [ - "sum" - ] - } - } - ], - "type": "table" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "fixed" - }, - "custom": { - "align": null, - "filterable": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Total" - }, - "properties": [ - { - "id": "custom.displayMode", - "value": "lcd-gauge" - }, - { - "id": "color", - "value": { - "mode": "continuous-GrYlRd" - } - } - ] - } - ] - }, - "gridPos": { - "h": 9, - "w": 8, - "x": 0, - "y": 27 - }, - "id": 16, - "maxDataPoints": 1, - "options": { - "showHeader": true - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [ - "Total", - "Average" - ], - "aggregation": "Total", - "allowedTimeGrainsMs": [ - 300000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "CollectionName", - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "CollectionName", - "value": "CollectionName" - }, - { - "text": "DatabaseName", - "value": "DatabaseName" - }, - { - "text": "Region", - "value": "Region" - } - ], - "metricDefinition": "$ns", - "metricName": "IndexUsage", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "5 minutes", - "value": "PT5M" - } - ], - "top": "" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "D", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Index Usage (Avg) By Collection", - "transformations": [ - { - "id": "reduce", - "options": { - "reducers": [ - "sum" - ] - } - } - ], - "type": "table" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "fixed" - }, - "custom": { - "align": null, - "filterable": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Total" - }, - "properties": [ - { - "id": "custom.displayMode", - "value": "lcd-gauge" - }, - { - "id": "color", - "value": { - "mode": "palette-classic" - } - } - ] - } - ] - }, - "gridPos": { - "h": 9, - "w": 8, - "x": 8, - "y": 27 - }, - "id": 17, - "maxDataPoints": 1, - "options": { - "showHeader": true - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [ - "Maximum" - ], - "aggregation": "Maximum", - "allowedTimeGrainsMs": [ - 300000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "CollectionName", - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "DatabaseName", - "value": "DatabaseName" - }, - { - "text": "CollectionName", - "value": "CollectionName" - } - ], - "metricDefinition": "$ns", - "metricName": "ProvisionedThroughput", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "5 minutes", - "value": "PT5M" - } - ], - "top": "" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "E", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Provisioned Throughput (Max) By Collection", - "transformations": [ - { - "id": "reduce", - "options": { - "reducers": [ - "sum" - ] - } - } - ], - "type": "table" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "fixed" - }, - "custom": { - "align": null, - "filterable": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Total" - }, - "properties": [ - { - "id": "custom.displayMode", - "value": "lcd-gauge" - }, - { - "id": "color", - "value": { - "mode": "palette-classic" - } - } - ] - } - ] - }, - "gridPos": { - "h": 9, - "w": 8, - "x": 16, - "y": 27 - }, - "id": 18, - "maxDataPoints": 1, - "options": { - "showHeader": true - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [ - "Maximum", - "Average" - ], - "aggregation": "Maximum", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 3600000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "CollectionName", - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "CollectionName", - "value": "CollectionName" - }, - { - "text": "DatabaseName", - "value": "DatabaseName" - }, - { - "text": "Region", - "value": "Region" - }, - { - "text": "PartitionKeyRangeId", - "value": "PartitionKeyRangeId" - } - ], - "metricDefinition": "$ns", - "metricName": "NormalizedRUConsumption", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "F", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Normalized RU Consumption (Max) By Collection", - "transformations": [ - { - "id": "reduce", - "options": { - "reducers": [ - "sum" - ] - } - } - ], - "type": "table" - } - ], - "title": "Overview", - "type": "row" - }, - { - "collapsed": true, - "datasource": "$ds", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 1 - }, - "id": 21, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 2 - }, - "hiddenSeries": false, - "id": 23, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Total", - "Average" - ], - "aggregation": "Total", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "DatabaseName", - "value": "DatabaseName" - }, - { - "text": "CollectionName", - "value": "CollectionName" - }, - { - "text": "Region", - "value": "Region" - }, - { - "text": "StatusCode", - "value": "StatusCode" - }, - { - "text": "OperationType", - "value": "OperationType" - }, - { - "text": "Status", - "value": "Status" - } - ], - "metricDefinition": "$ns", - "metricName": "TotalRequestUnits", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Total Request Units", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 2 - }, - "hiddenSeries": false, - "id": 24, - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "max": true, - "min": false, - "rightSide": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Maximum", - "Average" - ], - "aggregation": "Maximum", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 3600000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "PartitionKeyRangeId", - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "CollectionName", - "value": "CollectionName" - }, - { - "text": "DatabaseName", - "value": "DatabaseName" - }, - { - "text": "Region", - "value": "Region" - }, - { - "text": "PartitionKeyRangeId", - "value": "PartitionKeyRangeId" - } - ], - "metricDefinition": "$ns", - "metricName": "NormalizedRUConsumption", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Normalized RU Consumption By PartitionKeyRangeID", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "percent", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": {}, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 6, - "w": 24, - "x": 0, - "y": 10 - }, - "id": 25, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Maximum" - ], - "aggregation": "Maximum", - "allowedTimeGrainsMs": [ - 300000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "CollectionName", - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "DatabaseName", - "value": "DatabaseName" - }, - { - "text": "CollectionName", - "value": "CollectionName" - } - ], - "metricDefinition": "$ns", - "metricName": "ProvisionedThroughput", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "5 minutes", - "value": "PT5M" - } - ], - "top": "" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Provisioned Throughput (Max) by Collection", - "type": "stat" - } - ], - "title": "Throughput", - "type": "row" - }, - { - "collapsed": true, - "datasource": "$ds", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 2 - }, - "id": 27, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 3 - }, - "hiddenSeries": false, - "id": 28, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Count" - ], - "aggregation": "Count", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "StatusCode", - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "DatabaseName", - "value": "DatabaseName" - }, - { - "text": "CollectionName", - "value": "CollectionName" - }, - { - "text": "Region", - "value": "Region" - }, - { - "text": "StatusCode", - "value": "StatusCode" - }, - { - "text": "OperationType", - "value": "OperationType" - }, - { - "text": "Status", - "value": "Status" - } - ], - "metricDefinition": "$ns", - "metricName": "TotalRequests", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Total Requests by Status Code", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 3 - }, - "hiddenSeries": false, - "id": 29, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Count" - ], - "aggregation": "Count", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "StatusCode", - "filter": "429", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "DatabaseName", - "value": "DatabaseName" - }, - { - "text": "CollectionName", - "value": "CollectionName" - }, - { - "text": "Region", - "value": "Region" - }, - { - "text": "StatusCode", - "value": "StatusCode" - }, - { - "text": "OperationType", - "value": "OperationType" - }, - { - "text": "Status", - "value": "Status" - } - ], - "metricDefinition": "$ns", - "metricName": "TotalRequests", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Throttled Requests (429)", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 24, - "x": 0, - "y": 11 - }, - "hiddenSeries": false, - "id": 30, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Count" - ], - "aggregation": "Count", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "OperationType", - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "DatabaseName", - "value": "DatabaseName" - }, - { - "text": "CollectionName", - "value": "CollectionName" - }, - { - "text": "Region", - "value": "Region" - }, - { - "text": "StatusCode", - "value": "StatusCode" - }, - { - "text": "OperationType", - "value": "OperationType" - }, - { - "text": "Status", - "value": "Status" - } - ], - "metricDefinition": "$ns", - "metricName": "TotalRequests", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Total Requests by Operation Type", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "title": "Requests", - "type": "row" - }, - { - "collapsed": true, - "datasource": "$ds", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 3 - }, - "id": 32, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 4 - }, - "hiddenSeries": false, - "id": 33, - "legend": { - "avg": true, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Total", - "Average" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 300000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": null, - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "CollectionName", - "value": "CollectionName" - }, - { - "text": "DatabaseName", - "value": "DatabaseName" - }, - { - "text": "Region", - "value": "Region" - } - ], - "metricDefinition": "$ns", - "metricName": "DataUsage", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "5 minutes", - "value": "PT5M" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Total", - "Average" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 300000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": null, - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "CollectionName", - "value": "CollectionName" - }, - { - "text": "DatabaseName", - "value": "DatabaseName" - }, - { - "text": "Region", - "value": "Region" - } - ], - "metricDefinition": "$ns", - "metricName": "IndexUsage", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "5 minutes", - "value": "PT5M" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "B", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Data & Index Usage", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "decbytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 4 - }, - "hiddenSeries": false, - "id": 34, - "legend": { - "avg": true, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Total", - "Average" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 300000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": null, - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "CollectionName", - "value": "CollectionName" - }, - { - "text": "DatabaseName", - "value": "DatabaseName" - }, - { - "text": "Region", - "value": "Region" - } - ], - "metricDefinition": "$ns", - "metricName": "DocumentCount", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "5 minutes", - "value": "PT5M" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Document Count", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": {}, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 15, - "w": 24, - "x": 0, - "y": 12 - }, - "id": 36, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Total", - "Average" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 300000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "CollectionName", - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "CollectionName", - "value": "CollectionName" - }, - { - "text": "DatabaseName", - "value": "DatabaseName" - }, - { - "text": "Region", - "value": "Region" - } - ], - "metricDefinition": "$ns", - "metricName": "DataUsage", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "5 minutes", - "value": "PT5M" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Total", - "Average" - ], - "aggregation": "Total", - "allowedTimeGrainsMs": [ - 300000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "CollectionName", - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "CollectionName", - "value": "CollectionName" - }, - { - "text": "DatabaseName", - "value": "DatabaseName" - }, - { - "text": "Region", - "value": "Region" - } - ], - "metricDefinition": "$ns", - "metricName": "IndexUsage", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "5 minutes", - "value": "PT5M" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "B", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Total", - "Average" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 300000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "CollectionName", - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "CollectionName", - "value": "CollectionName" - }, - { - "text": "DatabaseName", - "value": "DatabaseName" - }, - { - "text": "Region", - "value": "Region" - } - ], - "metricDefinition": "$ns", - "metricName": "DocumentCount", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "5 minutes", - "value": "PT5M" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "C", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Data, Index & Document Usage", - "type": "stat" - } - ], - "title": "Storage", - "type": "row" - }, - { - "collapsed": true, - "datasource": "$ds", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 4 - }, - "id": 38, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 5 - }, - "hiddenSeries": false, - "id": 39, - "legend": { - "avg": true, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "scopedVars": { - "sub": { - "selected": true, - "text": "RTD-Experimental - f7152080-b4e8-47ee-9c85-7f1d0e6b72dc", - "value": "f7152080-b4e8-47ee-9c85-7f1d0e6b72dc" - } - }, - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Minimum", - "Average", - "Maximum" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 3600000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": null, - "filter": "", - "operator": "eq" - } - ], - "dimensions": [], - "metricDefinition": "$ns", - "metricName": "ServiceAvailability", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 hour", - "value": "PT1H" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Minimum", - "Average", - "Maximum" - ], - "aggregation": "Minimum", - "allowedTimeGrainsMs": [ - 3600000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": null, - "filter": "", - "operator": "eq" - } - ], - "dimensions": [], - "metricDefinition": "$ns", - "metricName": "ServiceAvailability", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 hour", - "value": "PT1H" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "B", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Minimum", - "Average", - "Maximum" - ], - "aggregation": "Maximum", - "allowedTimeGrainsMs": [ - 3600000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": null, - "filter": "", - "operator": "eq" - } - ], - "dimensions": [], - "metricDefinition": "$ns", - "metricName": "ServiceAvailability", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 hour", - "value": "PT1H" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "C", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Service Availability (min/max/avg in %)", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "percent", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "repeat": "sub", - "title": "Availability", - "type": "row" - }, - { - "collapsed": true, - "datasource": "$ds", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 5 - }, - "id": 41, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 6 - }, - "hiddenSeries": false, - "id": 42, - "legend": { - "avg": true, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Average" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 60000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "Region", - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "DatabaseName", - "value": "DatabaseName" - }, - { - "text": "CollectionName", - "value": "CollectionName" - }, - { - "text": "Region", - "value": "Region" - }, - { - "text": "ConnectionMode", - "value": "ConnectionMode" - }, - { - "text": "OperationType", - "value": "OperationType" - }, - { - "text": "PublicAPIType", - "value": "PublicAPIType" - } - ], - "metricDefinition": "$ns", - "metricName": "ServerSideLatency", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Server Side Latency (Avg) By Region", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ms", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 6 - }, - "hiddenSeries": false, - "id": 43, - "legend": { - "avg": true, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Average" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 60000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "OperationType", - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "DatabaseName", - "value": "DatabaseName" - }, - { - "text": "CollectionName", - "value": "CollectionName" - }, - { - "text": "Region", - "value": "Region" - }, - { - "text": "ConnectionMode", - "value": "ConnectionMode" - }, - { - "text": "OperationType", - "value": "OperationType" - }, - { - "text": "PublicAPIType", - "value": "PublicAPIType" - } - ], - "metricDefinition": "$ns", - "metricName": "ServerSideLatency", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Server Side Latency (Avg) By Operation", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ms", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "title": "Latency", - "type": "row" - }, - { - "collapsed": true, - "datasource": "$ds", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 6 - }, - "id": 45, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 7 - }, - "hiddenSeries": false, - "id": 46, - "legend": { - "avg": true, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Count" - ], - "aggregation": "Count", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "StatusCode", - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "DatabaseName", - "value": "DatabaseName" - }, - { - "text": "CollectionName", - "value": "CollectionName" - }, - { - "text": "Region", - "value": "Region" - }, - { - "text": "StatusCode", - "value": "StatusCode" - } - ], - "metricDefinition": "$ns", - "metricName": "MetadataRequests", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Metadata Requests by Status Code", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 7 - }, - "hiddenSeries": false, - "id": 47, - "legend": { - "avg": true, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Count" - ], - "aggregation": "Count", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "StatusCode", - "filter": "429", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "DatabaseName", - "value": "DatabaseName" - }, - { - "text": "CollectionName", - "value": "CollectionName" - }, - { - "text": "Region", - "value": "Region" - }, - { - "text": "StatusCode", - "value": "StatusCode" - } - ], - "metricDefinition": "$ns", - "metricName": "MetadataRequests", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Metadata Requests That Exceeded Capacity (429s)", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "title": "System", - "type": "row" - }, - { - "collapsed": true, - "datasource": "$ds", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 7 - }, - "id": 49, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 8 - }, - "hiddenSeries": false, - "id": 50, - "legend": { - "avg": true, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Count" - ], - "aggregation": "Count", - "allowedTimeGrainsMs": [ - 300000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": null, - "filter": "", - "operator": "eq" - } - ], - "dimensions": [], - "metricDefinition": "$ns", - "metricName": "CreateAccount", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "5 minutes", - "value": "PT5M" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Count" - ], - "aggregation": "Count", - "allowedTimeGrainsMs": [ - 300000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": null, - "filter": "", - "operator": "eq" - } - ], - "dimensions": [], - "metricDefinition": "$ns", - "metricName": "DeleteAccount", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "5 minutes", - "value": "PT5M" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "B", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Count" - ], - "aggregation": "Count", - "allowedTimeGrainsMs": [ - 300000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": null, - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "KeyType", - "value": "KeyType" - } - ], - "metricDefinition": "$ns", - "metricName": "UpdateAccountKeys", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "5 minutes", - "value": "PT5M" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "C", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Cosmos DB Account Management (Creates, Deletes) and Account Key Updates", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 8 - }, - "hiddenSeries": false, - "id": 51, - "legend": { - "avg": true, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Count" - ], - "aggregation": "Count", - "allowedTimeGrainsMs": [ - 300000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": null, - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "DiagnosticSettings Name", - "value": "DiagnosticSettingsName" - }, - { - "text": "ResourceGroup Name", - "value": "ResourceGroupName" - } - ], - "metricDefinition": "$ns", - "metricName": "UpdateDiagnosticsSettings", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "5 minutes", - "value": "PT5M" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Count" - ], - "aggregation": "Count", - "allowedTimeGrainsMs": [ - 300000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": null, - "filter": "", - "operator": "eq" - } - ], - "dimensions": [], - "metricDefinition": "$ns", - "metricName": "UpdateAccountNetworkSettings", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "5 minutes", - "value": "PT5M" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "B", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" - }, - "azureMonitor": { - "aggOptions": [ - "Count" - ], - "aggregation": "Count", - "allowedTimeGrainsMs": [ - 300000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": null, - "filter": "", - "operator": "eq" - } - ], - "dimensions": [], - "metricDefinition": "$ns", - "metricName": "UpdateAccountReplicationSettings", - "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "5 minutes", - "value": "PT5M" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "C", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Cosmos DB Account Diagnostic, Network and Replication Settings Updates", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "title": "Account Management", - "type": "row" - } - ], - "refresh": false, - "schemaVersion": 27, - "style": "dark", - "tags": [], - "templating": { - "list": [ + "id": 4, + "panels": [ { - "current": { - }, - "description": null, - "error": null, - "hide": 0, - "includeAll": false, - "label": "Data Source", - "multi": false, - "name": "ds", - "options": [], - "query": "grafana-azure-monitor-datasource", - "queryValue": "", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "type": "datasource" - }, - { - "allValue": null, - "current": {}, + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, "datasource": "$ds", - "definition": "subscriptions()", - "description": null, - "error": null, - "hide": 0, - "includeAll": false, - "label": "Subscription", - "multi": false, - "name": "sub", - "options": [], - "query": "subscriptions()", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": null, - "current": {}, - "datasource": "$ds", - "definition": "ResourceGroups($sub)", - "description": null, - "error": null, - "hide": 0, - "includeAll": false, - "label": "Resource Group", - "multi": false, - "name": "rg", - "options": [], - "query": "ResourceGroups($sub)", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": null, - "current": { - "selected": false, - "text": "Microsoft.DocumentDb/databaseAccounts", - "value": "Microsoft.DocumentDb/databaseAccounts" + "fieldConfig": { + "defaults": { + "color": {}, + "custom": {}, + "thresholds": { + "mode": "absolute", + "steps": [] + } + }, + "overrides": [] }, - "description": null, - "error": null, - "hide": 0, - "includeAll": false, - "label": "Name Space", - "multi": false, - "name": "ns", - "options": [ + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 1 + }, + "hiddenSeries": false, + "id": 2, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": true, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ { - "selected": true, - "text": "Microsoft.DocumentDb/databaseAccounts", - "value": "Microsoft.DocumentDb/databaseAccounts" + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": ["Count"], + "aggregation": "Count", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "DatabaseName", + "value": "DatabaseName" + }, + { + "text": "CollectionName", + "value": "CollectionName" + }, + { + "text": "Region", + "value": "Region" + }, + { + "text": "StatusCode", + "value": "StatusCode" + }, + { + "text": "OperationType", + "value": "OperationType" + }, + { + "text": "Status", + "value": "Status" + } + ], + "metricDefinition": "$ns", + "metricName": "TotalRequests", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" } ], - "query": "Microsoft.DocumentDb/databaseAccounts", - "skipUrlSync": false, - "type": "custom" + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Total Requests", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } }, { - "allValue": null, - "current": {}, + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, "datasource": "$ds", - "definition": "ResourceNames($sub, $rg, $ns)", - "description": null, - "error": null, - "hide": 0, - "includeAll": false, - "label": null, - "multi": false, - "name": "resource", - "options": [], - "query": "ResourceNames($sub, $rg, $ns)", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false + "fieldConfig": { + "defaults": { + "color": {}, + "custom": {}, + "thresholds": { + "mode": "absolute", + "steps": [] + }, + "unit": "short" + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 1 + }, + "hiddenSeries": false, + "id": 19, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": true, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null as zero", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": ["Count"], + "aggregation": "Count", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "StatusCode", + "filter": "429", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "DatabaseName", + "value": "DatabaseName" + }, + { + "text": "CollectionName", + "value": "CollectionName" + }, + { + "text": "Region", + "value": "Region" + }, + { + "text": "StatusCode", + "value": "StatusCode" + }, + { + "text": "OperationType", + "value": "OperationType" + }, + { + "text": "Status", + "value": "Status" + } + ], + "metricDefinition": "$ns", + "metricName": "TotalRequests", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Throttled Requests (429s)", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": {}, + "custom": {}, + "thresholds": { + "mode": "absolute", + "steps": [] + }, + "unit": "short" + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 10 + }, + "hiddenSeries": false, + "id": 9, + "legend": { + "avg": false, + "current": false, + "max": true, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": ["Maximum", "Average"], + "aggregation": "Maximum", + "allowedTimeGrainsMs": [60000, 300000, 3600000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "CollectionName", + "value": "CollectionName" + }, + { + "text": "DatabaseName", + "value": "DatabaseName" + }, + { + "text": "Region", + "value": "Region" + }, + { + "text": "PartitionKeyRangeId", + "value": "PartitionKeyRangeId" + } + ], + "metricDefinition": "$ns", + "metricName": "NormalizedRUConsumption", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Normalized RU Consumption (max)", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "percent", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": {}, + "custom": {}, + "thresholds": { + "mode": "absolute", + "steps": [] + }, + "unit": "short" + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 10 + }, + "hiddenSeries": false, + "id": 12, + "legend": { + "avg": true, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": ["Total", "Average"], + "aggregation": "Total", + "allowedTimeGrainsMs": [300000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "CollectionName", + "value": "CollectionName" + }, + { + "text": "DatabaseName", + "value": "DatabaseName" + }, + { + "text": "Region", + "value": "Region" + } + ], + "metricDefinition": "$ns", + "metricName": "IndexUsage", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "5 minutes", + "value": "PT5M" + } + ], + "top": "" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": ["Total", "Average"], + "aggregation": "Total", + "allowedTimeGrainsMs": [300000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "CollectionName", + "value": "CollectionName" + }, + { + "text": "DatabaseName", + "value": "DatabaseName" + }, + { + "text": "Region", + "value": "Region" + } + ], + "metricDefinition": "$ns", + "metricName": "DataUsage", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "5 minutes", + "value": "PT5M" + } + ], + "top": "" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "B", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Index & Data Usage", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "decbytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "fixed" + }, + "custom": { + "align": null, + "filterable": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "custom.displayMode", + "value": "lcd-gauge" + }, + { + "id": "color", + "value": { + "mode": "continuous-GrYlRd" + } + } + ] + } + ] + }, + "gridPos": { + "h": 9, + "w": 8, + "x": 0, + "y": 18 + }, + "id": 11, + "maxDataPoints": 1, + "options": { + "showHeader": true + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": ["Count"], + "aggregation": "Count", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "CollectionName", + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "DatabaseName", + "value": "DatabaseName" + }, + { + "text": "CollectionName", + "value": "CollectionName" + }, + { + "text": "Region", + "value": "Region" + }, + { + "text": "StatusCode", + "value": "StatusCode" + }, + { + "text": "OperationType", + "value": "OperationType" + }, + { + "text": "Status", + "value": "Status" + } + ], + "metricDefinition": "$ns", + "metricName": "TotalRequests", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Total Requests (Count) By Collection", + "transformations": [ + { + "id": "reduce", + "options": { + "reducers": ["sum"] + } + } + ], + "type": "table" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "fixed" + }, + "custom": { + "align": null, + "filterable": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "custom.displayMode", + "value": "lcd-gauge" + }, + { + "id": "color", + "value": { + "mode": "continuous-GrYlRd" + } + } + ] + } + ] + }, + "gridPos": { + "h": 9, + "w": 8, + "x": 8, + "y": 18 + }, + "id": 14, + "maxDataPoints": 1, + "options": { + "showHeader": true + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": ["Total", "Average"], + "aggregation": "Total", + "allowedTimeGrainsMs": [300000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "CollectionName", + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "CollectionName", + "value": "CollectionName" + }, + { + "text": "DatabaseName", + "value": "DatabaseName" + }, + { + "text": "Region", + "value": "Region" + } + ], + "metricDefinition": "$ns", + "metricName": "DocumentCount", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "5 minutes", + "value": "PT5M" + } + ], + "top": "" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "B", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Document Count (Avg) By Collection", + "transformations": [ + { + "id": "reduce", + "options": { + "reducers": ["sum"] + } + } + ], + "type": "table" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "fixed" + }, + "custom": { + "align": null, + "filterable": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "custom.displayMode", + "value": "lcd-gauge" + }, + { + "id": "color", + "value": { + "mode": "continuous-GrYlRd" + } + } + ] + } + ] + }, + "gridPos": { + "h": 9, + "w": 8, + "x": 16, + "y": 18 + }, + "id": 15, + "maxDataPoints": 1, + "options": { + "showHeader": true + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": ["Total", "Average"], + "aggregation": "Total", + "allowedTimeGrainsMs": [300000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "CollectionName", + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "CollectionName", + "value": "CollectionName" + }, + { + "text": "DatabaseName", + "value": "DatabaseName" + }, + { + "text": "Region", + "value": "Region" + } + ], + "metricDefinition": "$ns", + "metricName": "DataUsage", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "5 minutes", + "value": "PT5M" + } + ], + "top": "" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "C", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Data Usage (Avg) By Collection", + "transformations": [ + { + "id": "reduce", + "options": { + "reducers": ["sum"] + } + } + ], + "type": "table" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "fixed" + }, + "custom": { + "align": null, + "filterable": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "custom.displayMode", + "value": "lcd-gauge" + }, + { + "id": "color", + "value": { + "mode": "continuous-GrYlRd" + } + } + ] + } + ] + }, + "gridPos": { + "h": 9, + "w": 8, + "x": 0, + "y": 27 + }, + "id": 16, + "maxDataPoints": 1, + "options": { + "showHeader": true + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": ["Total", "Average"], + "aggregation": "Total", + "allowedTimeGrainsMs": [300000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "CollectionName", + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "CollectionName", + "value": "CollectionName" + }, + { + "text": "DatabaseName", + "value": "DatabaseName" + }, + { + "text": "Region", + "value": "Region" + } + ], + "metricDefinition": "$ns", + "metricName": "IndexUsage", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "5 minutes", + "value": "PT5M" + } + ], + "top": "" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "D", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Index Usage (Avg) By Collection", + "transformations": [ + { + "id": "reduce", + "options": { + "reducers": ["sum"] + } + } + ], + "type": "table" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "fixed" + }, + "custom": { + "align": null, + "filterable": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "custom.displayMode", + "value": "lcd-gauge" + }, + { + "id": "color", + "value": { + "mode": "palette-classic" + } + } + ] + } + ] + }, + "gridPos": { + "h": 9, + "w": 8, + "x": 8, + "y": 27 + }, + "id": 17, + "maxDataPoints": 1, + "options": { + "showHeader": true + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": ["Maximum"], + "aggregation": "Maximum", + "allowedTimeGrainsMs": [300000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "CollectionName", + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "DatabaseName", + "value": "DatabaseName" + }, + { + "text": "CollectionName", + "value": "CollectionName" + } + ], + "metricDefinition": "$ns", + "metricName": "ProvisionedThroughput", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "5 minutes", + "value": "PT5M" + } + ], + "top": "" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "E", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Provisioned Throughput (Max) By Collection", + "transformations": [ + { + "id": "reduce", + "options": { + "reducers": ["sum"] + } + } + ], + "type": "table" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "fixed" + }, + "custom": { + "align": null, + "filterable": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "custom.displayMode", + "value": "lcd-gauge" + }, + { + "id": "color", + "value": { + "mode": "palette-classic" + } + } + ] + } + ] + }, + "gridPos": { + "h": 9, + "w": 8, + "x": 16, + "y": 27 + }, + "id": 18, + "maxDataPoints": 1, + "options": { + "showHeader": true + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": ["Maximum", "Average"], + "aggregation": "Maximum", + "allowedTimeGrainsMs": [60000, 300000, 3600000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "CollectionName", + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "CollectionName", + "value": "CollectionName" + }, + { + "text": "DatabaseName", + "value": "DatabaseName" + }, + { + "text": "Region", + "value": "Region" + }, + { + "text": "PartitionKeyRangeId", + "value": "PartitionKeyRangeId" + } + ], + "metricDefinition": "$ns", + "metricName": "NormalizedRUConsumption", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "F", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Normalized RU Consumption (Max) By Collection", + "transformations": [ + { + "id": "reduce", + "options": { + "reducers": ["sum"] + } + } + ], + "type": "table" } - ] + ], + "title": "Overview", + "type": "row" }, - "time": { - "from": "now-6h", - "to": "now" + { + "collapsed": true, + "datasource": "$ds", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 1 + }, + "id": 21, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 2 + }, + "hiddenSeries": false, + "id": 23, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": true, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Total", "Average"], + "aggregation": "Total", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "DatabaseName", + "value": "DatabaseName" + }, + { + "text": "CollectionName", + "value": "CollectionName" + }, + { + "text": "Region", + "value": "Region" + }, + { + "text": "StatusCode", + "value": "StatusCode" + }, + { + "text": "OperationType", + "value": "OperationType" + }, + { + "text": "Status", + "value": "Status" + } + ], + "metricDefinition": "$ns", + "metricName": "TotalRequestUnits", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Total Request Units", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 2 + }, + "hiddenSeries": false, + "id": 24, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Maximum", "Average"], + "aggregation": "Maximum", + "allowedTimeGrainsMs": [60000, 300000, 3600000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "PartitionKeyRangeId", + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "CollectionName", + "value": "CollectionName" + }, + { + "text": "DatabaseName", + "value": "DatabaseName" + }, + { + "text": "Region", + "value": "Region" + }, + { + "text": "PartitionKeyRangeId", + "value": "PartitionKeyRangeId" + } + ], + "metricDefinition": "$ns", + "metricName": "NormalizedRUConsumption", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Normalized RU Consumption By PartitionKeyRangeID", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "percent", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": {}, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 24, + "x": 0, + "y": 10 + }, + "id": 25, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Maximum"], + "aggregation": "Maximum", + "allowedTimeGrainsMs": [300000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "CollectionName", + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "DatabaseName", + "value": "DatabaseName" + }, + { + "text": "CollectionName", + "value": "CollectionName" + } + ], + "metricDefinition": "$ns", + "metricName": "ProvisionedThroughput", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "5 minutes", + "value": "PT5M" + } + ], + "top": "" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Provisioned Throughput (Max) by Collection", + "type": "stat" + } + ], + "title": "Throughput", + "type": "row" }, - "timepicker": {}, - "timezone": "", - "title": "Cosmos DB Insights", - "uid": "INH9berMk", - "version": 17 - } \ No newline at end of file + { + "collapsed": true, + "datasource": "$ds", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 2 + }, + "id": 27, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 3 + }, + "hiddenSeries": false, + "id": 28, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": true, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Count"], + "aggregation": "Count", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "StatusCode", + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "DatabaseName", + "value": "DatabaseName" + }, + { + "text": "CollectionName", + "value": "CollectionName" + }, + { + "text": "Region", + "value": "Region" + }, + { + "text": "StatusCode", + "value": "StatusCode" + }, + { + "text": "OperationType", + "value": "OperationType" + }, + { + "text": "Status", + "value": "Status" + } + ], + "metricDefinition": "$ns", + "metricName": "TotalRequests", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Total Requests by Status Code", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 3 + }, + "hiddenSeries": false, + "id": 29, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": true, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Count"], + "aggregation": "Count", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "StatusCode", + "filter": "429", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "DatabaseName", + "value": "DatabaseName" + }, + { + "text": "CollectionName", + "value": "CollectionName" + }, + { + "text": "Region", + "value": "Region" + }, + { + "text": "StatusCode", + "value": "StatusCode" + }, + { + "text": "OperationType", + "value": "OperationType" + }, + { + "text": "Status", + "value": "Status" + } + ], + "metricDefinition": "$ns", + "metricName": "TotalRequests", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Throttled Requests (429)", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 11 + }, + "hiddenSeries": false, + "id": 30, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": true, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Count"], + "aggregation": "Count", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "OperationType", + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "DatabaseName", + "value": "DatabaseName" + }, + { + "text": "CollectionName", + "value": "CollectionName" + }, + { + "text": "Region", + "value": "Region" + }, + { + "text": "StatusCode", + "value": "StatusCode" + }, + { + "text": "OperationType", + "value": "OperationType" + }, + { + "text": "Status", + "value": "Status" + } + ], + "metricDefinition": "$ns", + "metricName": "TotalRequests", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Total Requests by Operation Type", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "title": "Requests", + "type": "row" + }, + { + "collapsed": true, + "datasource": "$ds", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 3 + }, + "id": 32, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 4 + }, + "hiddenSeries": false, + "id": 33, + "legend": { + "avg": true, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Total", "Average"], + "aggregation": "Average", + "allowedTimeGrainsMs": [300000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": null, + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "CollectionName", + "value": "CollectionName" + }, + { + "text": "DatabaseName", + "value": "DatabaseName" + }, + { + "text": "Region", + "value": "Region" + } + ], + "metricDefinition": "$ns", + "metricName": "DataUsage", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "5 minutes", + "value": "PT5M" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Total", "Average"], + "aggregation": "Average", + "allowedTimeGrainsMs": [300000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": null, + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "CollectionName", + "value": "CollectionName" + }, + { + "text": "DatabaseName", + "value": "DatabaseName" + }, + { + "text": "Region", + "value": "Region" + } + ], + "metricDefinition": "$ns", + "metricName": "IndexUsage", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "5 minutes", + "value": "PT5M" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "B", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Data & Index Usage", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "decbytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 4 + }, + "hiddenSeries": false, + "id": 34, + "legend": { + "avg": true, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Total", "Average"], + "aggregation": "Average", + "allowedTimeGrainsMs": [300000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": null, + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "CollectionName", + "value": "CollectionName" + }, + { + "text": "DatabaseName", + "value": "DatabaseName" + }, + { + "text": "Region", + "value": "Region" + } + ], + "metricDefinition": "$ns", + "metricName": "DocumentCount", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "5 minutes", + "value": "PT5M" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Document Count", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": {}, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 15, + "w": 24, + "x": 0, + "y": 12 + }, + "id": 36, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Total", "Average"], + "aggregation": "Average", + "allowedTimeGrainsMs": [300000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "CollectionName", + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "CollectionName", + "value": "CollectionName" + }, + { + "text": "DatabaseName", + "value": "DatabaseName" + }, + { + "text": "Region", + "value": "Region" + } + ], + "metricDefinition": "$ns", + "metricName": "DataUsage", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "5 minutes", + "value": "PT5M" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Total", "Average"], + "aggregation": "Total", + "allowedTimeGrainsMs": [300000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "CollectionName", + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "CollectionName", + "value": "CollectionName" + }, + { + "text": "DatabaseName", + "value": "DatabaseName" + }, + { + "text": "Region", + "value": "Region" + } + ], + "metricDefinition": "$ns", + "metricName": "IndexUsage", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "5 minutes", + "value": "PT5M" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "B", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Total", "Average"], + "aggregation": "Average", + "allowedTimeGrainsMs": [300000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "CollectionName", + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "CollectionName", + "value": "CollectionName" + }, + { + "text": "DatabaseName", + "value": "DatabaseName" + }, + { + "text": "Region", + "value": "Region" + } + ], + "metricDefinition": "$ns", + "metricName": "DocumentCount", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "5 minutes", + "value": "PT5M" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "C", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Data, Index & Document Usage", + "type": "stat" + } + ], + "title": "Storage", + "type": "row" + }, + { + "collapsed": true, + "datasource": "$ds", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 4 + }, + "id": 38, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 5 + }, + "hiddenSeries": false, + "id": 39, + "legend": { + "avg": true, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "scopedVars": { + "sub": { + "selected": true, + "text": "RTD-Experimental - f7152080-b4e8-47ee-9c85-7f1d0e6b72dc", + "value": "f7152080-b4e8-47ee-9c85-7f1d0e6b72dc" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Minimum", "Average", "Maximum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [3600000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": null, + "filter": "", + "operator": "eq" + } + ], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "ServiceAvailability", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 hour", + "value": "PT1H" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Minimum", "Average", "Maximum"], + "aggregation": "Minimum", + "allowedTimeGrainsMs": [3600000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": null, + "filter": "", + "operator": "eq" + } + ], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "ServiceAvailability", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 hour", + "value": "PT1H" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "B", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Minimum", "Average", "Maximum"], + "aggregation": "Maximum", + "allowedTimeGrainsMs": [3600000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": null, + "filter": "", + "operator": "eq" + } + ], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "ServiceAvailability", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 hour", + "value": "PT1H" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "C", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Service Availability (min/max/avg in %)", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "percent", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "repeat": "sub", + "title": "Availability", + "type": "row" + }, + { + "collapsed": true, + "datasource": "$ds", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 5 + }, + "id": 41, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 6 + }, + "hiddenSeries": false, + "id": 42, + "legend": { + "avg": true, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Average"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "Region", + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "DatabaseName", + "value": "DatabaseName" + }, + { + "text": "CollectionName", + "value": "CollectionName" + }, + { + "text": "Region", + "value": "Region" + }, + { + "text": "ConnectionMode", + "value": "ConnectionMode" + }, + { + "text": "OperationType", + "value": "OperationType" + }, + { + "text": "PublicAPIType", + "value": "PublicAPIType" + } + ], + "metricDefinition": "$ns", + "metricName": "ServerSideLatency", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Server Side Latency (Avg) By Region", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "ms", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 6 + }, + "hiddenSeries": false, + "id": 43, + "legend": { + "avg": true, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Average"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "OperationType", + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "DatabaseName", + "value": "DatabaseName" + }, + { + "text": "CollectionName", + "value": "CollectionName" + }, + { + "text": "Region", + "value": "Region" + }, + { + "text": "ConnectionMode", + "value": "ConnectionMode" + }, + { + "text": "OperationType", + "value": "OperationType" + }, + { + "text": "PublicAPIType", + "value": "PublicAPIType" + } + ], + "metricDefinition": "$ns", + "metricName": "ServerSideLatency", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Server Side Latency (Avg) By Operation", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "ms", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "title": "Latency", + "type": "row" + }, + { + "collapsed": true, + "datasource": "$ds", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 6 + }, + "id": 45, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 7 + }, + "hiddenSeries": false, + "id": 46, + "legend": { + "avg": true, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Count"], + "aggregation": "Count", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "StatusCode", + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "DatabaseName", + "value": "DatabaseName" + }, + { + "text": "CollectionName", + "value": "CollectionName" + }, + { + "text": "Region", + "value": "Region" + }, + { + "text": "StatusCode", + "value": "StatusCode" + } + ], + "metricDefinition": "$ns", + "metricName": "MetadataRequests", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Metadata Requests by Status Code", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 7 + }, + "hiddenSeries": false, + "id": 47, + "legend": { + "avg": true, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Count"], + "aggregation": "Count", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "StatusCode", + "filter": "429", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "DatabaseName", + "value": "DatabaseName" + }, + { + "text": "CollectionName", + "value": "CollectionName" + }, + { + "text": "Region", + "value": "Region" + }, + { + "text": "StatusCode", + "value": "StatusCode" + } + ], + "metricDefinition": "$ns", + "metricName": "MetadataRequests", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Metadata Requests That Exceeded Capacity (429s)", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "title": "System", + "type": "row" + }, + { + "collapsed": true, + "datasource": "$ds", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 7 + }, + "id": 49, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 8 + }, + "hiddenSeries": false, + "id": 50, + "legend": { + "avg": true, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Count"], + "aggregation": "Count", + "allowedTimeGrainsMs": [300000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": null, + "filter": "", + "operator": "eq" + } + ], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "CreateAccount", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "5 minutes", + "value": "PT5M" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Count"], + "aggregation": "Count", + "allowedTimeGrainsMs": [300000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": null, + "filter": "", + "operator": "eq" + } + ], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "DeleteAccount", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "5 minutes", + "value": "PT5M" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "B", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Count"], + "aggregation": "Count", + "allowedTimeGrainsMs": [300000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": null, + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "KeyType", + "value": "KeyType" + } + ], + "metricDefinition": "$ns", + "metricName": "UpdateAccountKeys", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "5 minutes", + "value": "PT5M" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "C", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Cosmos DB Account Management (Creates, Deletes) and Account Key Updates", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 8 + }, + "hiddenSeries": false, + "id": 51, + "legend": { + "avg": true, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Count"], + "aggregation": "Count", + "allowedTimeGrainsMs": [300000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": null, + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "DiagnosticSettings Name", + "value": "DiagnosticSettingsName" + }, + { + "text": "ResourceGroup Name", + "value": "ResourceGroupName" + } + ], + "metricDefinition": "$ns", + "metricName": "UpdateDiagnosticsSettings", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "5 minutes", + "value": "PT5M" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Count"], + "aggregation": "Count", + "allowedTimeGrainsMs": [300000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": null, + "filter": "", + "operator": "eq" + } + ], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "UpdateAccountNetworkSettings", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "5 minutes", + "value": "PT5M" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "B", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "657b3e91-7c0b-438b-86a5-f769445e237d" + }, + "azureMonitor": { + "aggOptions": ["Count"], + "aggregation": "Count", + "allowedTimeGrainsMs": [300000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": null, + "filter": "", + "operator": "eq" + } + ], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "UpdateAccountReplicationSettings", + "metricNamespace": "Microsoft.DocumentDB/databaseAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "5 minutes", + "value": "PT5M" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "C", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Cosmos DB Account Diagnostic, Network and Replication Settings Updates", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "title": "Account Management", + "type": "row" + } + ], + "refresh": false, + "schemaVersion": 27, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "current": {}, + "description": null, + "error": null, + "hide": 0, + "includeAll": false, + "label": "Data Source", + "multi": false, + "name": "ds", + "options": [], + "query": "grafana-azure-monitor-datasource", + "queryValue": "", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "type": "datasource" + }, + { + "allValue": null, + "current": {}, + "datasource": "$ds", + "definition": "subscriptions()", + "description": null, + "error": null, + "hide": 0, + "includeAll": false, + "label": "Subscription", + "multi": false, + "name": "sub", + "options": [], + "query": "subscriptions()", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": {}, + "datasource": "$ds", + "definition": "ResourceGroups($sub)", + "description": null, + "error": null, + "hide": 0, + "includeAll": false, + "label": "Resource Group", + "multi": false, + "name": "rg", + "options": [], + "query": "ResourceGroups($sub)", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": { + "selected": false, + "text": "Microsoft.DocumentDb/databaseAccounts", + "value": "Microsoft.DocumentDb/databaseAccounts" + }, + "description": null, + "error": null, + "hide": 0, + "includeAll": false, + "label": "Name Space", + "multi": false, + "name": "ns", + "options": [ + { + "selected": true, + "text": "Microsoft.DocumentDb/databaseAccounts", + "value": "Microsoft.DocumentDb/databaseAccounts" + } + ], + "query": "Microsoft.DocumentDb/databaseAccounts", + "skipUrlSync": false, + "type": "custom" + }, + { + "allValue": null, + "current": {}, + "datasource": "$ds", + "definition": "ResourceNames($sub, $rg, $ns)", + "description": null, + "error": null, + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "resource", + "options": [], + "query": "ResourceNames($sub, $rg, $ns)", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-6h", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Cosmos DB Insights", + "uid": "INH9berMk", + "version": 17 +} diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/dashboards/keyvault.json b/public/app/plugins/datasource/grafana-azure-monitor-datasource/dashboards/keyvault.json index 0feb7c4bb66..0d4a172292e 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/dashboards/keyvault.json +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/dashboards/keyvault.json @@ -1,2881 +1,2682 @@ { - "__requires": [ - { - "type": "grafana", - "id": "grafana", - "name": "Grafana", - "version": "7.4.3" + "__requires": [ + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "7.4.3" + }, + { + "type": "datasource", + "id": "grafana-azure-monitor-datasource", + "name": "Azure Monitor", + "version": "0.3.0" + }, + { + "type": "panel", + "id": "graph", + "name": "Graph", + "version": "" + }, + { + "type": "panel", + "id": "stat", + "name": "Stat", + "version": "" + }, + { + "type": "panel", + "id": "table", + "name": "Table", + "version": "" + } + ], + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "id": null, + "iteration": 1620924220014, + "links": [], + "panels": [ + { + "collapsed": false, + "datasource": "$ds", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 }, - { - "type": "datasource", - "id": "grafana-azure-monitor-datasource", - "name": "Azure Monitor", - "version": "0.3.0" + "id": 25, + "panels": [], + "title": "Overview", + "type": "row" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": {}, + "mappings": [], + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] }, - { - "type": "panel", - "id": "graph", - "name": "Graph", - "version": "" + "gridPos": { + "h": 7, + "w": 19, + "x": 0, + "y": 1 }, - { - "type": "panel", - "id": "stat", - "name": "Stat", - "version": "" - }, - { - "type": "panel", - "id": "table", - "name": "Table", - "version": "" - } - ], - "editable": true, - "gnetId": null, - "graphTooltip": 0, - "id": null, - "iteration": 1620924220014, - "links": [], - "panels": [ - { - "collapsed": false, - "datasource": "$ds", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 25, - "panels": [], - "title": "Overview", - "type": "row" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": {}, - "mappings": [], - "thresholds": { - "mode": "percentage", - "steps": [ - { - "color": "green", - "value": null - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 19, - "x": 0, - "y": 1 - }, - "id": 9, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "center", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [ - "None", - "Average", - "Minimum", - "Maximum", - "Total", - "Count" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Activity Type", - "value": "ActivityType" - }, - { - "text": "Activity Name", - "value": "ActivityName" - }, - { - "text": "Status Code", - "value": "StatusCode" - }, - { - "text": "Status Code Class", - "value": "StatusCodeClass" - } - ], - "metricDefinition": "Microsoft.KeyVault/vaults", - "metricName": "Availability", - "metricNamespace": "Microsoft.KeyVault/vaults", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [ - "None", - "Average", - "Minimum", - "Maximum", - "Total", - "Count" - ], - "aggregation": "Count", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Activity Type", - "value": "ActivityType" - }, - { - "text": "Activity Name", - "value": "ActivityName" - }, - { - "text": "Status Code", - "value": "StatusCode" - }, - { - "text": "Status Code Class", - "value": "StatusCodeClass" - } - ], - "metricDefinition": "Microsoft.KeyVault/vaults", - "metricName": "ServiceApiResult", - "metricNamespace": "Microsoft.KeyVault/vaults", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "P1D", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "B", - "subscription": "f7152080-b4e8-47ee-9c85-7f1d0e6b72dc" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [ - "None", - "Average", - "Minimum", - "Maximum", - "Total", - "Count" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Activity Type", - "value": "ActivityType" - }, - { - "text": "Activity Name", - "value": "ActivityName" - }, - { - "text": "Status Code", - "value": "StatusCode" - }, - { - "text": "Status Code Class", - "value": "StatusCodeClass" - } - ], - "metricDefinition": "Microsoft.KeyVault/vaults", - "metricName": "ServiceApiLatency", - "metricNamespace": "Microsoft.KeyVault/vaults", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "P1D", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "C", - "subscription": "f7152080-b4e8-47ee-9c85-7f1d0e6b72dc" - } - ], - "title": "Availability, Requests and Latency", - "type": "stat" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 6, - "x": 0, - "y": 8 - }, - "hiddenSeries": false, - "id": 11, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [ - "None", - "Average", - "Minimum", - "Maximum", - "Total", - "Count" - ], - "aggregation": "Count", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Activity Type", - "value": "ActivityType" - }, - { - "text": "Activity Name", - "value": "ActivityName" - } - ], - "metricDefinition": "Microsoft.KeyVault/vaults", - "metricName": "ServiceApiHit", - "metricNamespace": "Microsoft.KeyVault/vaults", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "f7152080-b4e8-47ee-9c85-7f1d0e6b72dc" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Transactions Over Time", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": {}, - "custom": {}, - "thresholds": { - "mode": "absolute", - "steps": [] - }, - "unit": "ms" - }, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 6, - "x": 6, - "y": 8 - }, - "hiddenSeries": false, - "id": 13, - "legend": { - "avg": true, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "connected", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [ - "None", - "Average", - "Minimum", - "Maximum", - "Total", - "Count" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Activity Type", - "value": "ActivityType" - }, - { - "text": "Activity Name", - "value": "ActivityName" - }, - { - "text": "Status Code", - "value": "StatusCode" - }, - { - "text": "Status Code Class", - "value": "StatusCodeClass" - } - ], - "metricDefinition": "Microsoft.KeyVault/vaults", - "metricName": "ServiceApiLatency", - "metricNamespace": "Microsoft.KeyVault/vaults", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Overall Latency", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ms", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 6, - "x": 12, - "y": 8 - }, - "hiddenSeries": false, - "id": 15, - "legend": { - "avg": true, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [ - "None", - "Average", - "Minimum", - "Maximum", - "Total", - "Count" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Activity Type", - "value": "ActivityType" - }, - { - "text": "Activity Name", - "value": "ActivityName" - }, - { - "text": "Status Code", - "value": "StatusCode" - }, - { - "text": "Status Code Class", - "value": "StatusCodeClass" - } - ], - "metricDefinition": "Microsoft.KeyVault/vaults", - "metricName": "Availability", - "metricNamespace": "Microsoft.KeyVault/vaults", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Availability", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "percent", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 6, - "x": 18, - "y": 8 - }, - "hiddenSeries": false, - "id": 17, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [ - "None", - "Average", - "Minimum", - "Maximum", - "Total", - "Count" - ], - "aggregation": "Count", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Activity Type", - "value": "ActivityType" - }, - { - "text": "Activity Name", - "value": "ActivityName" - } - ], - "metricDefinition": "Microsoft.KeyVault/vaults", - "metricName": "ServiceApiHit", - "metricNamespace": "Microsoft.KeyVault/vaults", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Request Types over Time", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "collapsed": false, - "datasource": "$ds", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 16 - }, - "id": 23, - "panels": [], - "title": "Failures", - "type": "row" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 6, - "x": 0, - "y": 17 - }, - "hiddenSeries": false, - "id": 2, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [ - "None", - "Average", - "Minimum", - "Maximum", - "Total", - "Count" - ], - "aggregation": "Count", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "StatusCodeClass", - "filter": "2xx", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "Activity Type", - "value": "ActivityType" - }, - { - "text": "Activity Name", - "value": "ActivityName" - }, - { - "text": "Status Code", - "value": "StatusCode" - }, - { - "text": "Status Code Class", - "value": "StatusCodeClass" - } - ], - "metricDefinition": "Microsoft.KeyVault/vaults", - "metricName": "ServiceApiResult", - "metricNamespace": "Microsoft.KeyVault/vaults", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Successes (2xx)", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 6, - "x": 6, - "y": 17 - }, - "hiddenSeries": false, - "id": 7, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [ - "None", - "Average", - "Minimum", - "Maximum", - "Total", - "Count" - ], - "aggregation": "Count", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "StatusCodeClass", - "filter": "4xx", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "Activity Type", - "value": "ActivityType" - }, - { - "text": "Activity Name", - "value": "ActivityName" - }, - { - "text": "Status Code", - "value": "StatusCode" - }, - { - "text": "Status Code Class", - "value": "StatusCodeClass" - } - ], - "metricDefinition": "Microsoft.KeyVault/vaults", - "metricName": "ServiceApiResult", - "metricNamespace": "Microsoft.KeyVault/vaults", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Failures (4xx)", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 6, - "x": 12, - "y": 17 - }, - "hiddenSeries": false, - "id": 6, - "legend": { - "avg": true, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [ - "None", - "Average", - "Minimum", - "Maximum", - "Total", - "Count" - ], - "aggregation": "Count", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "StatusCode", - "filter": "429", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "Activity Type", - "value": "ActivityType" - }, - { - "text": "Activity Name", - "value": "ActivityName" - }, - { - "text": "Status Code", - "value": "StatusCode" - }, - { - "text": "Status Code Class", - "value": "StatusCodeClass" - } - ], - "metricDefinition": "Microsoft.KeyVault/vaults", - "metricName": "ServiceApiResult", - "metricNamespace": "Microsoft.KeyVault/vaults", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Throttling (429)", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 6, - "x": 18, - "y": 17 - }, - "hiddenSeries": false, - "id": 4, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [ - "None", - "Average", - "Minimum", - "Maximum", - "Total", - "Count" - ], - "aggregation": "Count", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "StatusCode", - "filter": "401", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "Activity Type", - "value": "ActivityType" - }, - { - "text": "Activity Name", - "value": "ActivityName" - }, - { - "text": "Status Code", - "value": "StatusCode" - }, - { - "text": "Status Code Class", - "value": "StatusCodeClass" - } - ], - "metricDefinition": "Microsoft.KeyVault/vaults", - "metricName": "ServiceApiResult", - "metricNamespace": "Microsoft.KeyVault/vaults", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [ - "None", - "Average", - "Minimum", - "Maximum", - "Total", - "Count" - ], - "aggregation": "Count", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "StatusCode", - "filter": "403", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "Activity Type", - "value": "ActivityType" - }, - { - "text": "Activity Name", - "value": "ActivityName" - }, - { - "text": "Status Code", - "value": "StatusCode" - }, - { - "text": "Status Code Class", - "value": "StatusCodeClass" - } - ], - "metricDefinition": "Microsoft.KeyVault/vaults", - "metricName": "ServiceApiResult", - "metricNamespace": "Microsoft.KeyVault/vaults", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "B", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Authentication Errors (401 & 403)", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "collapsed": false, - "datasource": "$ds", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 25 - }, - "id": 21, - "panels": [], - "title": "Operations", - "type": "row" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": {}, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 3, - "x": 0, - "y": 26 - }, - "id": 19, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "let rawData = AzureDiagnostics \r\n // Ignore Authentication operations with a 401. This is normal when using Key Vault SDK, first an unauthenticated request is done then the response is used for authentication.\r\n | where Category == \"AuditEvent\" and not (OperationName == \"Authentication\" and httpStatusCode_d == 401)\r\n | where OperationName in ('SecretGet', 'VaultGet') or '*' in ('SecretGet', 'VaultGet')\r\n // Create ResultStatus with all the 'success' results bucked as 'Success'\r\n // Certain operations like StorageAccountAutoSyncKey have no ResultSignature, for now set to 'Success' as well\r\n | extend ResultStatus = case (ResultSignature == \"\", \"Success\",\r\n ResultSignature == \"OK\", \"Success\",\r\n ResultSignature == \"Accepted\", \"Success\",\r\n ResultSignature); \r\nrawData \r\n| make-series Trend = count() default = 0 on TimeGenerated from ago(1d) to now() step 30m by ResultStatus\r\n| join kind = inner (rawData\n | where $__timeFilter(TimeGenerated)\r\n | summarize Count = count() by ResultStatus\r\n )\r\n on ResultStatus\n \r\n\r\n| project ResultStatus, Count, Trend\r\n| order by Count desc;\r", - "resultFormat": "table", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Success Operations", - "type": "stat" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": {}, - "custom": {}, - "thresholds": { - "mode": "absolute", - "steps": [] - }, - "unit": "short" - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 5, - "w": 7, - "x": 3, - "y": 26 - }, - "hiddenSeries": false, - "id": 35, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, + "id": 9, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", "values": false }, - "lines": false, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": true, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "let rawData = AzureDiagnostics \r\n // Ignore Authentication operations with a 401. This is normal when using Key Vault SDK, first an unauthenticated request is done then the response is used for authentication.\r\n | where Category == \"AuditEvent\" and not (OperationName == \"Authentication\" and httpStatusCode_d == 401)\r\n | where OperationName in ('SecretGet', 'VaultGet') or '*' in ('SecretGet', 'VaultGet')\r\n // Create ResultStatus with all the 'success' results bucked as 'Success'\r\n // Certain operations like StorageAccountAutoSyncKey have no ResultSignature, for now set to 'Success' as well\r\n | extend ResultStatus = case (ResultSignature == \"\", \"Success\",\r\n ResultSignature == \"OK\", \"Success\",\r\n ResultSignature == \"Accepted\", \"Success\",\r\n ResultSignature); \r\nrawData\n| where $__timeFilter(TimeGenerated)\n| extend resultCount = iif(ResultStatus == \"Success\", 1, 0)\n| summarize count(resultCount) by bin(TimeGenerated, 30m)\n| sort by TimeGenerated;\n\r\r\n\r", - "resultFormat": "table", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Success Operations Counts", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "text": {}, + "textMode": "auto" }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": {}, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [] - } + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 3, - "x": 10, - "y": 26 - }, - "id": 26, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "changeCount" + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": ["None", "Average", "Minimum", "Maximum", "Total", "Count"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Activity Type", + "value": "ActivityType" + }, + { + "text": "Activity Name", + "value": "ActivityName" + }, + { + "text": "Status Code", + "value": "StatusCode" + }, + { + "text": "Status Code Class", + "value": "StatusCodeClass" + } ], - "fields": "", - "values": true + "metricDefinition": "Microsoft.KeyVault/vaults", + "metricName": "Availability", + "metricNamespace": "Microsoft.KeyVault/vaults", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "let rawData = AzureDiagnostics \r\n // Ignore Authentication operations with a 401. This is normal when using Key Vault SDK, first an unauthenticated request is done then the response is used for authentication.\r\n | where Category == \"AuditEvent\" and not (OperationName == \"Authentication\" and httpStatusCode_d == 401)\r\n | where OperationName in ('SecretGet', 'VaultGet') or '*' in ('SecretGet', 'VaultGet')\r; \r\nrawData \r\n| make-series Trend = count() default = 0 on TimeGenerated from ago(1d) to now() step 30m by ResultSignature \n| join kind = inner (rawData\n | where $__timeFilter(TimeGenerated)\r\n | summarize Count = count() by ResultSignature \n )\r\n on ResultSignature \n\r\n\r\n| project ResultSignature , Count, Trend\r\n| order by Count desc;", - "resultFormat": "table", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "All Operations", - "type": "stat" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": {}, - "custom": {}, - "thresholds": { - "mode": "absolute", - "steps": [] - }, - "unit": "short" + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" }, - "overrides": [] + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 5, - "w": 7, - "x": 13, - "y": 26 - }, - "hiddenSeries": false, - "id": 36, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": false, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": true, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "let rawData = AzureDiagnostics \r\n // Ignore Authentication operations with a 401. This is normal when using Key Vault SDK, first an unauthenticated request is done then the response is used for authentication.\r\n | where Category == \"AuditEvent\" and not (OperationName == \"Authentication\" and httpStatusCode_d == 401)\r\n | where OperationName in ('SecretGet', 'VaultGet') or '*' in ('SecretGet', 'VaultGet')\r; \r\nrawData\n| where $__timeFilter(TimeGenerated)\n| summarize count(ResultSignature ) by bin(TimeGenerated, 30m)\n| sort by TimeGenerated;\n\r\r\n\r", - "resultFormat": "table", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "All Operations Counts", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": ["None", "Average", "Minimum", "Maximum", "Total", "Count"], + "aggregation": "Count", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Activity Type", + "value": "ActivityType" + }, + { + "text": "Activity Name", + "value": "ActivityName" + }, + { + "text": "Status Code", + "value": "StatusCode" + }, + { + "text": "Status Code Class", + "value": "StatusCodeClass" + } + ], + "metricDefinition": "Microsoft.KeyVault/vaults", + "metricName": "ServiceApiResult", + "metricNamespace": "Microsoft.KeyVault/vaults", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "P1D", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "B", + "subscription": "f7152080-b4e8-47ee-9c85-7f1d0e6b72dc" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": ["None", "Average", "Minimum", "Maximum", "Total", "Count"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Activity Type", + "value": "ActivityType" + }, + { + "text": "Activity Name", + "value": "ActivityName" + }, + { + "text": "Status Code", + "value": "StatusCode" + }, + { + "text": "Status Code Class", + "value": "StatusCodeClass" + } + ], + "metricDefinition": "Microsoft.KeyVault/vaults", + "metricName": "ServiceApiLatency", + "metricNamespace": "Microsoft.KeyVault/vaults", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "P1D", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "C", + "subscription": "f7152080-b4e8-47ee-9c85-7f1d0e6b72dc" } + ], + "title": "Availability, Requests and Latency", + "type": "stat" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "align": null, - "filterable": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 24, - "x": 0, - "y": 31 - }, - "id": 28, - "options": { - "showHeader": true - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "let data = AzureDiagnostics \r\n | where TimeGenerated > ago(1d)\r\n // Ignore Authentication operations with a 401. This is normal when using Key Vault SDK, first an unauthenticated request is done then the response is used for authentication.\r\n | where Category == \"AuditEvent\" and not (OperationName == \"Authentication\" and httpStatusCode_d == 401)\r\n | where OperationName in ('SecretGet', 'VaultGet') or '*' in ('SecretGet', 'VaultGet')\r\n // Create ResultStatus with all the 'success' results bucked as 'Success'\r\n // Certain operations like StorageAccountAutoSyncKey have no ResultSignature, for now set to 'Success' as well\r\n | extend ResultStatus = case (ResultSignature == \"\", \"Success\",\r\n ResultSignature == \"OK\", \"Success\",\r\n ResultSignature == \"Accepted\", \"Success\",\r\n ResultSignature)\r\n | where ResultStatus == 'All' or 'All' == 'All';\r\ndata\r\n// Data aggregated to the OperationName\r\n| summarize OperationCount = count(), SuccessCount = countif(ResultStatus == \"Success\"), FailureCount = countif(ResultStatus != \"Success\"), PDurationMs = percentile(DurationMs, 99) by Resource, OperationName\r\n| join kind=inner (data\r\n | make-series Trend = count() default = 0 on TimeGenerated from ago(1d) to now() step 30m by OperationName\r\n | project-away TimeGenerated)\r\n on OperationName\r\n| order by OperationCount desc\r\n| project Name = strcat('⚡ ', OperationName), Id = strcat(Resource, '/', OperationName), ['Operation count'] = OperationCount, ['Operation count trend'] = Trend, ['Success count'] = SuccessCount, ['Failure count'] = FailureCount, ['p99 Duration'] = PDurationMs", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "title": "Operations by Name", - "type": "table" + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 6, + "x": 0, + "y": 8 }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "align": null, - "filterable": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } + "hiddenSeries": false, + "id": 11, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": true, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Duration" - }, - "properties": [ - { - "id": "custom.width", - "value": 86 - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Result" - }, - "properties": [ - { - "id": "custom.width", - "value": 94 - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Operation" - }, - "properties": [ - { - "id": "custom.width", - "value": 136 - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Time" - }, - "properties": [ - { - "id": "custom.width", - "value": 219 - } - ] - } - ] - }, - "gridPos": { - "h": 8, - "w": 24, - "x": 0, - "y": 35 - }, - "id": 30, - "options": { - "showHeader": true, - "sortBy": [] - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "let gridRowSelected = dynamic({\"Id\": \"*\"});\r\nlet resourceName = split(gridRowSelected.Id, \"/\")[0];\r\nlet operationName = split(gridRowSelected.Id, \"/\")[1];\r\nAzureDiagnostics \r\n| where TimeGenerated > ago(1d)\r\n// Ignore Authentication operations with a 401. This is normal when using Key Vault SDK, first an unauthenticated request is done then the response is used for authentication.\r\n| where Category == \"AuditEvent\" and not (OperationName == \"Authentication\" and httpStatusCode_d == 401)\r\n| where OperationName in ('SecretGet', 'VaultGet') or '*' in ('SecretGet', 'VaultGet')\r\n| where resourceName == \"*\" or Resource == resourceName\r\n| where operationName == \"\" or OperationName == operationName\r\n// Create ResultStatus with all the 'success' results bucked as 'Success'\r\n// Certain operations like StorageAccountAutoSyncKey have no ResultSignature, for now set to 'Success' as well\r\n| extend ResultStatus = case (ResultSignature == \"\", \"Success\",\r\n ResultSignature == \"OK\", \"Success\",\r\n ResultSignature == \"Accepted\", \"Success\",\r\n ResultSignature)\r\n| where ResultStatus == 'All' or 'All' == 'All'\r\n| extend p = pack_all()\r\n| mv-apply p on \r\n ( \r\n extend key = tostring(bag_keys(p)[0])\r\n | where isnotempty(p[key]) and isnotnull(p[key])\r\n | where key !in (\"SourceSystem\", \"Type\")\r\n | summarize make_bag(p)\r\n )\r\n| project Time=TimeGenerated, Operation=OperationName, Result=ResultSignature, Duration = DurationMs, [\"Details\"]=bag_p\r\n| sort by Time desc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "title": "Operations by Time", - "type": "table" - } - ], - "refresh": false, - "schemaVersion": 27, - "style": "dark", - "tags": [], - "templating": { - "list": [ - { - "current": { + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" }, - "description": null, - "error": null, - "hide": 0, - "includeAll": false, - "label": "Data Source", - "multi": false, - "name": "ds", - "options": [], - "query": "grafana-azure-monitor-datasource", - "queryValue": "", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "type": "datasource" - }, + "azureMonitor": { + "aggOptions": ["None", "Average", "Minimum", "Maximum", "Total", "Count"], + "aggregation": "Count", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Activity Type", + "value": "ActivityType" + }, + { + "text": "Activity Name", + "value": "ActivityName" + } + ], + "metricDefinition": "Microsoft.KeyVault/vaults", + "metricName": "ServiceApiHit", + "metricNamespace": "Microsoft.KeyVault/vaults", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "f7152080-b4e8-47ee-9c85-7f1d0e6b72dc" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Transactions Over Time", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ { - "allValue": null, - "current": {}, - "datasource": "$ds", - "definition": "subscriptions()", - "description": null, - "error": null, - "hide": 0, - "includeAll": false, - "label": "subscription", - "multi": false, - "name": "sub", - "options": [], - "query": "subscriptions()", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": null, - "current": {}, - "datasource": "$ds", - "definition": "ResourceGroups($sub)", - "description": null, - "error": null, - "hide": 0, - "includeAll": false, - "label": "Resource Group", - "multi": false, - "name": "rg", - "options": [], - "query": "ResourceGroups($sub)", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "description": null, - "error": null, - "hide": 2, - "label": "Namespace", - "name": "ns", - "query": "Microsoft.KeyVault/vaults", - "skipUrlSync": false, - "type": "constant" - }, - { - "allValue": null, - "current": {}, - "datasource": "$ds", - "definition": "ResourceNames($sub, $rg, $ns)", - "description": null, - "error": null, - "hide": 0, - "includeAll": false, + "format": "short", "label": null, - "multi": false, - "name": "resource", - "options": [], - "query": "ResourceNames($sub, $rg, $ns)", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false + "logBase": 1, + "max": null, + "min": null, + "show": true }, { - "allValue": null, - "current": {}, - "datasource": "$ds", - "definition": "Workspaces($sub)", - "description": null, - "error": null, - "hide": 0, - "includeAll": false, - "label": "Workspace", - "multi": false, - "name": "ws", - "options": [], - "query": "Workspaces($sub)", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true } - ] + ], + "yaxis": { + "align": false, + "alignLevel": null + } }, - "time": { - "from": "now-24h", - "to": "now" + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": {}, + "custom": {}, + "thresholds": { + "mode": "absolute", + "steps": [] + }, + "unit": "ms" + }, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 6, + "x": 6, + "y": 8 + }, + "hiddenSeries": false, + "id": 13, + "legend": { + "avg": true, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "connected", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": ["None", "Average", "Minimum", "Maximum", "Total", "Count"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Activity Type", + "value": "ActivityType" + }, + { + "text": "Activity Name", + "value": "ActivityName" + }, + { + "text": "Status Code", + "value": "StatusCode" + }, + { + "text": "Status Code Class", + "value": "StatusCodeClass" + } + ], + "metricDefinition": "Microsoft.KeyVault/vaults", + "metricName": "ServiceApiLatency", + "metricNamespace": "Microsoft.KeyVault/vaults", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Overall Latency", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "ms", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } }, - "timepicker": {}, - "timezone": "", - "title": "Key vault Insights", - "uid": "tQZAMYrMk", - "version": 42 - } \ No newline at end of file + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 6, + "x": 12, + "y": 8 + }, + "hiddenSeries": false, + "id": 15, + "legend": { + "avg": true, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": ["None", "Average", "Minimum", "Maximum", "Total", "Count"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Activity Type", + "value": "ActivityType" + }, + { + "text": "Activity Name", + "value": "ActivityName" + }, + { + "text": "Status Code", + "value": "StatusCode" + }, + { + "text": "Status Code Class", + "value": "StatusCodeClass" + } + ], + "metricDefinition": "Microsoft.KeyVault/vaults", + "metricName": "Availability", + "metricNamespace": "Microsoft.KeyVault/vaults", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Availability", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "percent", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 6, + "x": 18, + "y": 8 + }, + "hiddenSeries": false, + "id": 17, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": true, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": ["None", "Average", "Minimum", "Maximum", "Total", "Count"], + "aggregation": "Count", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Activity Type", + "value": "ActivityType" + }, + { + "text": "Activity Name", + "value": "ActivityName" + } + ], + "metricDefinition": "Microsoft.KeyVault/vaults", + "metricName": "ServiceApiHit", + "metricNamespace": "Microsoft.KeyVault/vaults", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Request Types over Time", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "collapsed": false, + "datasource": "$ds", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 16 + }, + "id": 23, + "panels": [], + "title": "Failures", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 6, + "x": 0, + "y": 17 + }, + "hiddenSeries": false, + "id": 2, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": true, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": ["None", "Average", "Minimum", "Maximum", "Total", "Count"], + "aggregation": "Count", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "StatusCodeClass", + "filter": "2xx", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "Activity Type", + "value": "ActivityType" + }, + { + "text": "Activity Name", + "value": "ActivityName" + }, + { + "text": "Status Code", + "value": "StatusCode" + }, + { + "text": "Status Code Class", + "value": "StatusCodeClass" + } + ], + "metricDefinition": "Microsoft.KeyVault/vaults", + "metricName": "ServiceApiResult", + "metricNamespace": "Microsoft.KeyVault/vaults", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Successes (2xx)", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 6, + "x": 6, + "y": 17 + }, + "hiddenSeries": false, + "id": 7, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": true, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": ["None", "Average", "Minimum", "Maximum", "Total", "Count"], + "aggregation": "Count", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "StatusCodeClass", + "filter": "4xx", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "Activity Type", + "value": "ActivityType" + }, + { + "text": "Activity Name", + "value": "ActivityName" + }, + { + "text": "Status Code", + "value": "StatusCode" + }, + { + "text": "Status Code Class", + "value": "StatusCodeClass" + } + ], + "metricDefinition": "Microsoft.KeyVault/vaults", + "metricName": "ServiceApiResult", + "metricNamespace": "Microsoft.KeyVault/vaults", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Failures (4xx)", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 6, + "x": 12, + "y": 17 + }, + "hiddenSeries": false, + "id": 6, + "legend": { + "avg": true, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": ["None", "Average", "Minimum", "Maximum", "Total", "Count"], + "aggregation": "Count", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "StatusCode", + "filter": "429", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "Activity Type", + "value": "ActivityType" + }, + { + "text": "Activity Name", + "value": "ActivityName" + }, + { + "text": "Status Code", + "value": "StatusCode" + }, + { + "text": "Status Code Class", + "value": "StatusCodeClass" + } + ], + "metricDefinition": "Microsoft.KeyVault/vaults", + "metricName": "ServiceApiResult", + "metricNamespace": "Microsoft.KeyVault/vaults", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Throttling (429)", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 6, + "x": 18, + "y": 17 + }, + "hiddenSeries": false, + "id": 4, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": true, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": ["None", "Average", "Minimum", "Maximum", "Total", "Count"], + "aggregation": "Count", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "StatusCode", + "filter": "401", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "Activity Type", + "value": "ActivityType" + }, + { + "text": "Activity Name", + "value": "ActivityName" + }, + { + "text": "Status Code", + "value": "StatusCode" + }, + { + "text": "Status Code Class", + "value": "StatusCodeClass" + } + ], + "metricDefinition": "Microsoft.KeyVault/vaults", + "metricName": "ServiceApiResult", + "metricNamespace": "Microsoft.KeyVault/vaults", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": ["None", "Average", "Minimum", "Maximum", "Total", "Count"], + "aggregation": "Count", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "StatusCode", + "filter": "403", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "Activity Type", + "value": "ActivityType" + }, + { + "text": "Activity Name", + "value": "ActivityName" + }, + { + "text": "Status Code", + "value": "StatusCode" + }, + { + "text": "Status Code Class", + "value": "StatusCodeClass" + } + ], + "metricDefinition": "Microsoft.KeyVault/vaults", + "metricName": "ServiceApiResult", + "metricNamespace": "Microsoft.KeyVault/vaults", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "B", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Authentication Errors (401 & 403)", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "collapsed": false, + "datasource": "$ds", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 25 + }, + "id": 21, + "panels": [], + "title": "Operations", + "type": "row" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": {}, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 0, + "y": 26 + }, + "id": 19, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "let rawData = AzureDiagnostics \r\n // Ignore Authentication operations with a 401. This is normal when using Key Vault SDK, first an unauthenticated request is done then the response is used for authentication.\r\n | where Category == \"AuditEvent\" and not (OperationName == \"Authentication\" and httpStatusCode_d == 401)\r\n | where OperationName in ('SecretGet', 'VaultGet') or '*' in ('SecretGet', 'VaultGet')\r\n // Create ResultStatus with all the 'success' results bucked as 'Success'\r\n // Certain operations like StorageAccountAutoSyncKey have no ResultSignature, for now set to 'Success' as well\r\n | extend ResultStatus = case (ResultSignature == \"\", \"Success\",\r\n ResultSignature == \"OK\", \"Success\",\r\n ResultSignature == \"Accepted\", \"Success\",\r\n ResultSignature); \r\nrawData \r\n| make-series Trend = count() default = 0 on TimeGenerated from ago(1d) to now() step 30m by ResultStatus\r\n| join kind = inner (rawData\n | where $__timeFilter(TimeGenerated)\r\n | summarize Count = count() by ResultStatus\r\n )\r\n on ResultStatus\n \r\n\r\n| project ResultStatus, Count, Trend\r\n| order by Count desc;\r", + "resultFormat": "table", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Success Operations", + "type": "stat" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": {}, + "custom": {}, + "thresholds": { + "mode": "absolute", + "steps": [] + }, + "unit": "short" + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 5, + "w": 7, + "x": 3, + "y": 26 + }, + "hiddenSeries": false, + "id": 35, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": false, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "let rawData = AzureDiagnostics \r\n // Ignore Authentication operations with a 401. This is normal when using Key Vault SDK, first an unauthenticated request is done then the response is used for authentication.\r\n | where Category == \"AuditEvent\" and not (OperationName == \"Authentication\" and httpStatusCode_d == 401)\r\n | where OperationName in ('SecretGet', 'VaultGet') or '*' in ('SecretGet', 'VaultGet')\r\n // Create ResultStatus with all the 'success' results bucked as 'Success'\r\n // Certain operations like StorageAccountAutoSyncKey have no ResultSignature, for now set to 'Success' as well\r\n | extend ResultStatus = case (ResultSignature == \"\", \"Success\",\r\n ResultSignature == \"OK\", \"Success\",\r\n ResultSignature == \"Accepted\", \"Success\",\r\n ResultSignature); \r\nrawData\n| where $__timeFilter(TimeGenerated)\n| extend resultCount = iif(ResultStatus == \"Success\", 1, 0)\n| summarize count(resultCount) by bin(TimeGenerated, 30m)\n| sort by TimeGenerated;\n\r\r\n\r", + "resultFormat": "table", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Success Operations Counts", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": {}, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 10, + "y": 26 + }, + "id": 26, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "orientation": "auto", + "reduceOptions": { + "calcs": ["changeCount"], + "fields": "", + "values": true + }, + "text": {}, + "textMode": "value" + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "let rawData = AzureDiagnostics \r\n // Ignore Authentication operations with a 401. This is normal when using Key Vault SDK, first an unauthenticated request is done then the response is used for authentication.\r\n | where Category == \"AuditEvent\" and not (OperationName == \"Authentication\" and httpStatusCode_d == 401)\r\n | where OperationName in ('SecretGet', 'VaultGet') or '*' in ('SecretGet', 'VaultGet')\r; \r\nrawData \r\n| make-series Trend = count() default = 0 on TimeGenerated from ago(1d) to now() step 30m by ResultSignature \n| join kind = inner (rawData\n | where $__timeFilter(TimeGenerated)\r\n | summarize Count = count() by ResultSignature \n )\r\n on ResultSignature \n\r\n\r\n| project ResultSignature , Count, Trend\r\n| order by Count desc;", + "resultFormat": "table", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "All Operations", + "type": "stat" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": {}, + "custom": {}, + "thresholds": { + "mode": "absolute", + "steps": [] + }, + "unit": "short" + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 5, + "w": 7, + "x": 13, + "y": 26 + }, + "hiddenSeries": false, + "id": 36, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": false, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "let rawData = AzureDiagnostics \r\n // Ignore Authentication operations with a 401. This is normal when using Key Vault SDK, first an unauthenticated request is done then the response is used for authentication.\r\n | where Category == \"AuditEvent\" and not (OperationName == \"Authentication\" and httpStatusCode_d == 401)\r\n | where OperationName in ('SecretGet', 'VaultGet') or '*' in ('SecretGet', 'VaultGet')\r; \r\nrawData\n| where $__timeFilter(TimeGenerated)\n| summarize count(ResultSignature ) by bin(TimeGenerated, 30m)\n| sort by TimeGenerated;\n\r\r\n\r", + "resultFormat": "table", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "All Operations Counts", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": null, + "filterable": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 24, + "x": 0, + "y": 31 + }, + "id": 28, + "options": { + "showHeader": true + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "let data = AzureDiagnostics \r\n | where TimeGenerated > ago(1d)\r\n // Ignore Authentication operations with a 401. This is normal when using Key Vault SDK, first an unauthenticated request is done then the response is used for authentication.\r\n | where Category == \"AuditEvent\" and not (OperationName == \"Authentication\" and httpStatusCode_d == 401)\r\n | where OperationName in ('SecretGet', 'VaultGet') or '*' in ('SecretGet', 'VaultGet')\r\n // Create ResultStatus with all the 'success' results bucked as 'Success'\r\n // Certain operations like StorageAccountAutoSyncKey have no ResultSignature, for now set to 'Success' as well\r\n | extend ResultStatus = case (ResultSignature == \"\", \"Success\",\r\n ResultSignature == \"OK\", \"Success\",\r\n ResultSignature == \"Accepted\", \"Success\",\r\n ResultSignature)\r\n | where ResultStatus == 'All' or 'All' == 'All';\r\ndata\r\n// Data aggregated to the OperationName\r\n| summarize OperationCount = count(), SuccessCount = countif(ResultStatus == \"Success\"), FailureCount = countif(ResultStatus != \"Success\"), PDurationMs = percentile(DurationMs, 99) by Resource, OperationName\r\n| join kind=inner (data\r\n | make-series Trend = count() default = 0 on TimeGenerated from ago(1d) to now() step 30m by OperationName\r\n | project-away TimeGenerated)\r\n on OperationName\r\n| order by OperationCount desc\r\n| project Name = strcat('⚡ ', OperationName), Id = strcat(Resource, '/', OperationName), ['Operation count'] = OperationCount, ['Operation count trend'] = Trend, ['Success count'] = SuccessCount, ['Failure count'] = FailureCount, ['p99 Duration'] = PDurationMs", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Operations by Name", + "type": "table" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": null, + "filterable": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Duration" + }, + "properties": [ + { + "id": "custom.width", + "value": 86 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Result" + }, + "properties": [ + { + "id": "custom.width", + "value": 94 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Operation" + }, + "properties": [ + { + "id": "custom.width", + "value": 136 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Time" + }, + "properties": [ + { + "id": "custom.width", + "value": 219 + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 35 + }, + "id": 30, + "options": { + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "let gridRowSelected = dynamic({\"Id\": \"*\"});\r\nlet resourceName = split(gridRowSelected.Id, \"/\")[0];\r\nlet operationName = split(gridRowSelected.Id, \"/\")[1];\r\nAzureDiagnostics \r\n| where TimeGenerated > ago(1d)\r\n// Ignore Authentication operations with a 401. This is normal when using Key Vault SDK, first an unauthenticated request is done then the response is used for authentication.\r\n| where Category == \"AuditEvent\" and not (OperationName == \"Authentication\" and httpStatusCode_d == 401)\r\n| where OperationName in ('SecretGet', 'VaultGet') or '*' in ('SecretGet', 'VaultGet')\r\n| where resourceName == \"*\" or Resource == resourceName\r\n| where operationName == \"\" or OperationName == operationName\r\n// Create ResultStatus with all the 'success' results bucked as 'Success'\r\n// Certain operations like StorageAccountAutoSyncKey have no ResultSignature, for now set to 'Success' as well\r\n| extend ResultStatus = case (ResultSignature == \"\", \"Success\",\r\n ResultSignature == \"OK\", \"Success\",\r\n ResultSignature == \"Accepted\", \"Success\",\r\n ResultSignature)\r\n| where ResultStatus == 'All' or 'All' == 'All'\r\n| extend p = pack_all()\r\n| mv-apply p on \r\n ( \r\n extend key = tostring(bag_keys(p)[0])\r\n | where isnotempty(p[key]) and isnotnull(p[key])\r\n | where key !in (\"SourceSystem\", \"Type\")\r\n | summarize make_bag(p)\r\n )\r\n| project Time=TimeGenerated, Operation=OperationName, Result=ResultSignature, Duration = DurationMs, [\"Details\"]=bag_p\r\n| sort by Time desc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Operations by Time", + "type": "table" + } + ], + "refresh": false, + "schemaVersion": 27, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "current": {}, + "description": null, + "error": null, + "hide": 0, + "includeAll": false, + "label": "Data Source", + "multi": false, + "name": "ds", + "options": [], + "query": "grafana-azure-monitor-datasource", + "queryValue": "", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "type": "datasource" + }, + { + "allValue": null, + "current": {}, + "datasource": "$ds", + "definition": "subscriptions()", + "description": null, + "error": null, + "hide": 0, + "includeAll": false, + "label": "subscription", + "multi": false, + "name": "sub", + "options": [], + "query": "subscriptions()", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": {}, + "datasource": "$ds", + "definition": "ResourceGroups($sub)", + "description": null, + "error": null, + "hide": 0, + "includeAll": false, + "label": "Resource Group", + "multi": false, + "name": "rg", + "options": [], + "query": "ResourceGroups($sub)", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "description": null, + "error": null, + "hide": 2, + "label": "Namespace", + "name": "ns", + "query": "Microsoft.KeyVault/vaults", + "skipUrlSync": false, + "type": "constant" + }, + { + "allValue": null, + "current": {}, + "datasource": "$ds", + "definition": "ResourceNames($sub, $rg, $ns)", + "description": null, + "error": null, + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "resource", + "options": [], + "query": "ResourceNames($sub, $rg, $ns)", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": {}, + "datasource": "$ds", + "definition": "Workspaces($sub)", + "description": null, + "error": null, + "hide": 0, + "includeAll": false, + "label": "Workspace", + "multi": false, + "name": "ws", + "options": [], + "query": "Workspaces($sub)", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-24h", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Key vault Insights", + "uid": "tQZAMYrMk", + "version": 42 +} diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/dashboards/sqldb.json b/public/app/plugins/datasource/grafana-azure-monitor-datasource/dashboards/sqldb.json index 755c81ac494..46a0c5f9896 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/dashboards/sqldb.json +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/dashboards/sqldb.json @@ -1,4596 +1,4584 @@ { - "__requires": [ - { - "type": "grafana", - "id": "grafana", - "name": "Grafana", - "version": "7.4.3" - }, - { - "type": "datasource", - "id": "grafana-azure-monitor-datasource", - "name": "Azure Monitor", - "version": "0.3.0" - }, - { - "type": "panel", - "id": "stat", - "name": "Stat", - "version": "" - }, - { - "type": "panel", - "id": "timeseries", - "name": "Time series", - "version": "" - } - ], - "annotations": { - "list": [ - ] + "__requires": [ + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "7.4.3" }, - "editable": true, - "gnetId": null, - "graphTooltip": 0, - "id": null, - "iteration": 1622167538209, - "links": [], - "panels": [ - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "fixedColor": "blue", - "mode": "fixed" - }, - "custom": {}, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [] - } + { + "type": "datasource", + "id": "grafana-azure-monitor-datasource", + "name": "Azure Monitor", + "version": "0.3.0" + }, + { + "type": "panel", + "id": "stat", + "name": "Stat", + "version": "" + }, + { + "type": "panel", + "id": "timeseries", + "name": "Time series", + "version": "" + } + ], + "annotations": { + "list": [] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "id": null, + "iteration": 1622167538209, + "links": [], + "panels": [ + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Number of Deadlocks/sec" - }, - "properties": [ - { - "id": "displayName", - "value": "Deadlocks/sec" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Data File(s) Size (KB)" - }, - "properties": [ - { - "id": "displayName", - "value": "Data file size" - }, - { - "id": "unit", - "value": "deckbytes" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Log File(s) Size (KB)" - }, - "properties": [ - { - "id": "displayName", - "value": "Log file size" - }, - { - "id": "unit", - "value": "deckbytes" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Log File(s) Used Size (KB)" - }, - "properties": [ - { - "id": "displayName", - "value": "Log file used size" - }, - { - "id": "unit", - "value": "deckbytes" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Free Space in tempdb (KB)" - }, - "properties": [ - { - "id": "displayName", - "value": "Free space in tempdb" - }, - { - "id": "unit", - "value": "deckbytes" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Memory broker clerk size" - }, - "properties": [ - { - "id": "unit", - "value": "deckbytes" - } - ] - } - ] - }, - "gridPos": { - "h": 5, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 6, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": true - }, - "text": {}, - "textMode": "value_and_name" - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\n| where $__timeFilter()\n\r\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_performance' \r\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), Counter = tostring(Tags.counter), DbInstance = tostring(Tags.instance)\r\n| where SqlInstance == '$SqlInstance' and (Database == '$db' or '*' == '$db') and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE')\n| where Counter in~ ('User connections', 'Active Temp Tables')\r\n| summarize EndValue = max(Val) by Counter\n| extend p = pack(Counter, EndValue)\r\n| summarize bag=make_bag(p)\r\n| evaluate bag_unpack(bag)", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\n| where $__timeFilter()\n\r\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_performance' \r\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), Counter = tostring(Tags.counter), DbInstance = tostring(Tags.instance)\r\n| where SqlInstance == '$SqlInstance' and (Database == '$db' or '*' == '$db') and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE')\n| where Counter in~ ('Memory Grants Pending', 'Number of deadlocks/sec', 'Processes blocked')\r\n| summarize (T, EndValue) = arg_max(TimeGenerated, Val) by Counter\n| project-away T\n| extend p = pack(Counter, EndValue)\r\n| summarize bag=make_bag(p)\r\n| evaluate bag_unpack(bag)\n", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "B", - "subscription": "$sub" + "custom": {}, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [] } - ], - "title": "Key Stats", - "transformations": [], - "transparent": true, - "type": "stat" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Number of Deadlocks/sec" + }, + "properties": [ + { + "id": "displayName", + "value": "Deadlocks/sec" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Data File(s) Size (KB)" + }, + "properties": [ + { + "id": "displayName", + "value": "Data file size" + }, + { + "id": "unit", + "value": "deckbytes" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Log File(s) Size (KB)" + }, + "properties": [ + { + "id": "displayName", + "value": "Log file size" + }, + { + "id": "unit", + "value": "deckbytes" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Log File(s) Used Size (KB)" + }, + "properties": [ + { + "id": "displayName", + "value": "Log file used size" + }, + { + "id": "unit", + "value": "deckbytes" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free Space in tempdb (KB)" + }, + "properties": [ + { + "id": "displayName", + "value": "Free space in tempdb" + }, + { + "id": "unit", + "value": "deckbytes" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Memory broker clerk size" + }, + "properties": [ + { + "id": "unit", + "value": "deckbytes" + } + ] + } + ] }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "fixedColor": "blue", - "mode": "fixed" - }, - "custom": {}, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [] - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Number of Deadlocks/sec" - }, - "properties": [ - { - "id": "displayName", - "value": "Deadlocks/sec" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Data File(s) Size (KB)" - }, - "properties": [ - { - "id": "displayName", - "value": "Data file size" - }, - { - "id": "unit", - "value": "deckbytes" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Log File(s) Size (KB)" - }, - "properties": [ - { - "id": "displayName", - "value": "Log file size" - }, - { - "id": "unit", - "value": "deckbytes" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Log File(s) Used Size (KB)" - }, - "properties": [ - { - "id": "displayName", - "value": "Log file used size" - }, - { - "id": "unit", - "value": "deckbytes" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Free Space in tempdb (KB)" - }, - "properties": [ - { - "id": "displayName", - "value": "Free space in tempdb" - }, - { - "id": "unit", - "value": "deckbytes" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Memory broker clerk size" - }, - "properties": [ - { - "id": "unit", - "value": "deckbytes" - } - ] - } - ] - }, - "gridPos": { - "h": 6, - "w": 24, - "x": 0, - "y": 5 - }, - "id": 9, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": true - }, - "text": {}, - "textMode": "value_and_name" - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\n| where $__timeFilter()\n\r\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_performance' \r\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), Counter = tostring(Tags.counter), DbInstance = tostring(Tags.instance)\r\n| where SqlInstance == '$SqlInstance' and (Database == '$db' or '*' == '$db') and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE')\n| where tostring(Tags.object) endswith ':Databases' and tostring(Tags.instance) =~ 'total' and Counter in~ ('Data File(s) Size (KB)', 'Log File(s) Size (KB)', 'Log File(s) Used Size (KB)')\r\n| summarize (End, EndValue) = arg_max(TimeGenerated, Val) by Counter\n| project-away End\n| extend p = pack(Counter, EndValue)\r\n| summarize bag=make_bag(p)\r\n| evaluate bag_unpack(bag)\n", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "C", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\n| where $__timeFilter()\n\r\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_performance' \r\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), Counter = tostring(Tags.counter), DbInstance = tostring(Tags.instance)\r\n| where SqlInstance == '$SqlInstance' and (Database == '$db' or '*' == '$db') and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE')\n| where Counter =~ 'Free Space in tempdb (KB)'\r\n| summarize EndValue = min(Val) by Counter\n| extend p = pack(Counter, EndValue)\r\n| summarize bag=make_bag(p)\r\n| evaluate bag_unpack(bag)\n", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "D", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\n| where $__timeFilter()\n\r\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_performance' \r\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), Counter = tostring(Tags.counter), DbInstance = tostring(Tags.instance)\r\n| where SqlInstance == '$SqlInstance' and (Database == '$db' or '*' == '$db') and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE')\n| where Counter =~ 'Memory broker clerk size' and DbInstance =~ 'Buffer Pool'\r\n| summarize (End, EndValue) = arg_max(TimeGenerated, Val) by Counter\r\n| extend EndValue = EndValue * 8\n| project-away End\n| extend p = pack(Counter, EndValue)\r\n| summarize bag=make_bag(p)\r\n| evaluate bag_unpack(bag)\n", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "E", - "subscription": "$sub" - } - ], - "title": "", - "transformations": [], - "transparent": true, - "type": "stat" + "gridPos": { + "h": 5, + "w": 24, + "x": 0, + "y": 0 }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [] - }, - "unit": "percent" - }, - "overrides": [] + "id": 6, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": true }, - "gridPos": { - "h": 7, - "w": 8, - "x": 0, - "y": 11 - }, - "id": 2, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "\r\n\r\nInsightsMetrics\n| where $__timeFilter()\n\r\n| extend Tags = todynamic(Tags)\r\n| extend Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\r\n| extend DatabaseKey = iff(Database == Instance, Database, strcat(Database, ' on ', Instance))\r\n| where Instance == '$SqlInstance'\r\n| where Namespace =~ 'sqlserver_azure_db_resource_stats' and Name == 'avg_instance_cpu_percent' and Tags.replica_updateability == iff('primary' == 'secondary', 'READ_ONLY', 'READ_WRITE')\n| summarize ['Avg Instance CPU'] = avg(Val) by bin(TimeGenerated, $__interval)", - "resultFormat": "table", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\n| where $__timeFilter()\n\r\n| extend Tags = todynamic(Tags)\r\n| extend Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\r\n| extend DatabaseKey = iff(Database == Instance, Database, strcat(Database, ' on ', Instance))\r\n| where Instance == '$SqlInstance'\r\n| where Namespace =~ 'sqlserver_azure_db_resource_stats' and Name == 'avg_cpu_percent' and Tags.replica_updateability == iff('primary' == 'secondary', 'READ_ONLY', 'READ_WRITE')\n| summarize ['Avg CPU'] = avg(Val) by bin(TimeGenerated, $__interval)", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "B", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "CPU", - "transformations": [], - "type": "timeseries" + "text": {}, + "textMode": "value_and_name" }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 8, - "x": 8, - "y": 11 - }, - "id": 3, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "\r\n\r\nInsightsMetrics\n| where $__timeFilter()\n\r\n| extend Tags = todynamic(Tags)\r\n| extend Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\r\n| extend DatabaseKey = iff(Database == Instance, Database, strcat(Database, ' on ', Instance))\r\n| where Instance == '$SqlInstance'\r\n| where Namespace =~ 'sqlserver_azure_db_resource_stats' and Name == 'avg_instance_memory_percent' and Tags.replica_updateability == iff('primary' == 'secondary', 'READ_ONLY', 'READ_WRITE')\n| summarize ['Avg Instance Memory'] = avg(Val) by bin(TimeGenerated, $__interval)", - "resultFormat": "table", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\n| where $__timeFilter()\n\r\n| extend Tags = todynamic(Tags)\r\n| extend Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\r\n| extend DatabaseKey = iff(Database == Instance, Database, strcat(Database, ' on ', Instance))\r\n| where Instance == '$SqlInstance'\r\n| where Namespace =~ 'sqlserver_azure_db_resource_stats' and Name == 'avg_memory_usage_percent' and Tags.replica_updateability == iff('primary' == 'secondary', 'READ_ONLY', 'READ_WRITE')\n| summarize ['Avg Memory'] = avg(Val) by bin(TimeGenerated, $__interval)", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "B", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Memory", - "transformations": [], - "type": "timeseries" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 8, - "x": 16, - "y": 11 - }, - "id": 4, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "\r\n\r\nInsightsMetrics\n| where $__timeFilter()\n\r\n| extend Tags = todynamic(Tags)\r\n| extend Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\r\n| extend DatabaseKey = iff(Database == Instance, Database, strcat(Database, ' on ', Instance))\r\n| where Instance == '$SqlInstance'\r\n| where Namespace =~ 'sqlserver_azure_db_resource_stats' and Name == 'avg_data_io_percent' and Tags.replica_updateability == iff('primary' == 'secondary', 'READ_ONLY', 'READ_WRITE')\n| summarize ['Avg Data I/O'] = avg(Val) by bin(TimeGenerated, $__interval)", - "resultFormat": "table", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\n| where $__timeFilter()\n\r\n| extend Tags = todynamic(Tags)\r\n| extend Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\r\n| extend DatabaseKey = iff(Database == Instance, Database, strcat(Database, ' on ', Instance))\r\n| where Instance == '$SqlInstance'\r\n| where Namespace =~ 'sqlserver_azure_db_resource_stats' and Name == 'avg_log_write_percent' and Tags.replica_updateability == iff('primary' == 'secondary', 'READ_ONLY', 'READ_WRITE')\n| summarize ['Avg Log Writes'] = avg(Val) by bin(TimeGenerated, $__interval)", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "B", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Data I/O", - "transformations": [], - "type": "timeseries" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "hue", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 1, - "pointSize": 9, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "ms" - }, - "overrides": [ - { - "matcher": { - "id": "byRegexp", - "options": "^(WaitType.*)" - }, - "properties": [ - { - "id": "displayName" - } - ] - } - ] - }, - "gridPos": { - "h": 8, - "w": 24, - "x": 0, - "y": 18 - }, - "id": 8, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "table", - "placement": "right" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics \n| where $__timeFilter()\n| where Namespace in~ ('sqlserver_azuredb_waitstats', 'sqlserver_waitstats') and Name =~ 'wait_time_ms'\r\n| extend Tags = todynamic(Tags)\r\n| extend Database = tostring(iff(Tags[\"database_name'\"] == '', Tags[\"database_name\"], Tags[\"database_name'\"])), Instance = tostring(Tags.sql_instance), WaitType = tostring(Tags.wait_type), WaitCategory = tostring(Tags.wait_category)\r\n| where Instance == '$SqlInstance' and (Database == '$db' or '*' == '$db')\r\n| order by Computer asc, Instance asc, Database asc, Namespace asc, Name asc, WaitType asc, TimeGenerated asc\r\n| extend WaitCategory = iff(isempty(WaitCategory), \"Other\", WaitCategory)\r\n| extend Val = iff(Computer == prev(Computer) and Instance == prev(Instance) and Database == prev(Database) and Namespace == prev(Namespace) and Name == prev(Name) and WaitType == prev(WaitType) and Val > prev(Val), Val - prev(Val), real(null))\n| summarize Val = avg(Val) by bin(TimeGenerated, $__interval), WaitCategory\n| extend Val = iff(isnan(Val), real(0), Val)\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "SQL Wait Category Stats", - "transformations": [ - { - "id": "labelsToFields", - "options": { - "valueLabel": "WaitCategory" - } - } - ], - "type": "timeseries" - }, - { - "collapsed": false, - "datasource": "$ds", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 26 - }, - "id": 11, - "panels": [], - "title": "Activities", - "type": "row" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 24, - "x": 0, - "y": 27 - }, - "id": 15, - "maxDataPoints": 20, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\r\n| where $__timeFilter()\r\n| where Namespace =~ 'sqlserver_performance' \r\n| extend Tags = todynamic(Tags)\r\n| extend Name = tostring(Tags.counter), Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\r\n| where Instance == '$SqlInstance' and Database == '$db'\r\n| where Name =~ 'Transactions/sec' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') \r\n| extend SeriesName = strcat(Instance, '/', Database)\r\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), SeriesName\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize Sum = sum(Val) by bin(TimeGenerated, $__interval), SeriesName\r\n| project-away SeriesName\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Transactions/sec", - "type": "timeseries" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 8, - "x": 0, - "y": 34 - }, - "id": 17, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\r\n| where $__timeFilter()\r\n| where Namespace =~ 'sqlserver_performance' \r\n| extend Tags = todynamic(Tags)\r\n| extend Name = tostring(Tags.counter), Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\r\n| where Instance == '$SqlInstance' and Database == '$db'\r\n| where Name =~ 'User connections' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE')\r\n| extend SeriesName = strcat(Instance, '/', Database)\r\n| summarize Sum = sum(Val) by bin(TimeGenerated, $__interval), SeriesName\r\n| project-away SeriesName\r\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "title": "User Connections", - "transformations": [], - "type": "timeseries" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 8, - "x": 8, - "y": 34 - }, - "id": 18, - "maxDataPoints": 40, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\r\n| where $__timeFilter()\r\n| where Namespace =~ 'sqlserver_performance' \r\n| extend Tags = todynamic(Tags)\r\n| extend Name = tostring(Tags.counter), Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\r\n| where Instance == '$SqlInstance' and Database == '$db'\r\n| where Name =~ 'Batch requests/sec' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE')\r\n| extend SeriesName = strcat(Instance, '/', Database)\r\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), SeriesName\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize Sum = sum(Val) by bin(TimeGenerated, $__interval), SeriesName\n\r\n| project-away SeriesName\r\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "title": "Batch requests/sec", - "type": "timeseries" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 8, - "x": 16, - "y": 34 - }, - "id": 19, - "maxDataPoints": 40, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\r\n| where $__timeFilter()\r\n| where Namespace =~ 'sqlserver_performance' \r\n| extend Tags = todynamic(Tags)\r\n| extend Name = tostring(Tags.counter), Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\r\n| where Instance == '$SqlInstance' and Database == '$db'\r\n| where Name =~ 'SQL compilations/sec' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE')\r\n| extend SeriesName = strcat(Instance, '/', Database)\r\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), SeriesName\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize Sum = sum(Val) by bin(TimeGenerated, $__interval), SeriesName\n\r\n| project-away SeriesName\r\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "title": "SQL compilations/sec", - "type": "timeseries" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 8, - "x": 0, - "y": 42 - }, - "id": 20, - "maxDataPoints": 40, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\r\n| where $__timeFilter()\r\n| where Namespace =~ 'sqlserver_performance' \r\n| extend Tags = todynamic(Tags)\r\n| extend Name = tostring(Tags.counter), Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\r\n| where Instance == '$SqlInstance' and Database == '$db'\r\n| where Name =~ 'SQL re-compilations/sec' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE')\r\n| extend SeriesName = strcat(Instance, '/', Database)\r\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), SeriesName\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize Sum = sum(Val) by bin(TimeGenerated, $__interval), SeriesName\n\r\n| project-away SeriesName\r\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "title": "SQL re-compilations/sec", - "type": "timeseries" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 8, - "x": 8, - "y": 42 - }, - "id": 21, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\r\n| where $__timeFilter()\r\n| where Namespace =~ 'sqlserver_performance' \r\n| extend Tags = todynamic(Tags)\r\n| extend Name = tostring(Tags.counter), Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\r\n| where Instance == '$SqlInstance' and Database == '$db'\r\n| where Name =~ 'Processes blocked' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE')\r\n| extend SeriesName = strcat(Instance, '/', Database)\r\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), SeriesName\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize Sum = sum(Val) by bin(TimeGenerated, $__interval), SeriesName\n\r\n| project-away SeriesName\r\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "title": "Processes blocked", - "type": "timeseries" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 8, - "x": 16, - "y": 42 - }, - "id": 22, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\r\n| where $__timeFilter()\r\n| where Namespace =~ 'sqlserver_performance' \r\n| extend Tags = todynamic(Tags)\r\n| extend Name = tostring(Tags.counter), Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\r\n| where Instance == '$SqlInstance' and Database == '$db'\r\n| where Name =~ 'Number of deadlocks/sec' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE')\r\n| extend SeriesName = strcat(Instance, '/', Database)\r\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), SeriesName\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize Sum = sum(Val) by bin(TimeGenerated, $__interval), SeriesName\n\r\n| project-away SeriesName\r\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "title": "Number of deadlocks/sec", - "type": "timeseries" - }, - { - "collapsed": false, - "datasource": "$ds", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 50 - }, - "id": 24, - "panels": [], - "title": "Memory Clerks", - "type": "row" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 11, - "w": 24, - "x": 0, - "y": 51 - }, - "id": 26, - "maxDataPoints": 40, - "options": { - "legend": { - "calcs": [], - "displayMode": "table", - "placement": "right" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\r\n| where $__timeFilter()\r\n| where Namespace == 'sqlserver_memory_clerks'\r\n| extend Tags = todynamic(Tags)\r\n| extend Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance), ClerkType = tostring(Tags.clerk_type)\r\n| where Instance == '$SqlInstance' and Database == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE')\r\n| extend SeriesName = strcat(Instance, '/', Database)\r\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), SeriesName, ClerkType\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\r\n| summarize Sum=sum(Val) by bin(TimeGenerated, $__interval), ClerkType, SeriesName\n| project-away SeriesName\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "title": "", - "transformations": [ - { - "id": "labelsToFields", - "options": { - "valueLabel": "ClerkType" - } - } - ], - "type": "timeseries" - }, - { - "collapsed": false, - "datasource": "$ds", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 62 - }, - "id": 30, - "panels": [], - "title": "Database Space", - "type": "row" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": {}, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "blue", - "value": null - } - ] - } - }, - "overrides": [ - { - "matcher": { - "id": "byRegexp", - "options": "^(.* size)" - }, - "properties": [ - { - "id": "unit", - "value": "deckbytes" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Percent log used" - }, - "properties": [ - { - "id": "unit", - "value": "percent" - } - ] - } - ] - }, - "gridPos": { - "h": 6, - "w": 24, - "x": 0, - "y": 63 - }, - "id": 32, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics \n| where $__timeFilter()\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_performance' and tostring(Tags.object) endswith ':Databases' and tostring(Tags.instance) !~ 'total'\r\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), Counter = tostring(Tags.counter), DbInstance = tostring(Tags.instance)\r\n| where SqlInstance == '$SqlInstance' and DbInstance == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE')\r\n| summarize \r\n ['Data file(s) size']= avgif(Val, Counter == 'Data File(s) Size (KB)'),\r\n ['Log file(s) size'] = avgif(Val, Counter == 'Log File(s) Size (KB)'),\r\n ['Log file(s) used size'] = avgif(Val, Counter == 'Log File(s) Used Size (KB)'),\r\n ['Percent log used'] = avgif(Val, Counter == 'Percent Log Used')\r\n by SqlInstance, DbInstance", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "aggregation": "", - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "title": "", - "type": "stat" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": -1, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "deckbytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 69 - }, - "id": 34, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "right" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_performance' and tostring(Tags.object) endswith ':Databases' and tostring(Tags.instance) !~ 'total'\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), Counter = tostring(Tags.counter), DbInstance = tostring(Tags.instance)\n| where SqlInstance == '$SqlInstance' and DbInstance == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and Counter == 'Data File(s) Size (KB)'\n| summarize Average = round(avg(Val), 2), Max = round(max(Val), 2), Min = round(min(Val), 2), P99th = round(percentile(Val, 99), 2), P95th = round(percentile(Val, 95), 2) by bin(TimeGenerated, $__interval), DbInstance\n| project-away DbInstance\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Data File(s) Size (KB)", - "type": "timeseries" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "deckbytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 12, - "x": 12, - "y": 69 - }, - "id": 35, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "right" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_performance' and tostring(Tags.object) endswith ':Databases' and tostring(Tags.instance) !~ 'total'\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), Counter = tostring(Tags.counter), DbInstance = tostring(Tags.instance)\n| where SqlInstance == '$SqlInstance' and DbInstance == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and Counter == 'Log File(s) Size (KB)'\n| summarize Average = round(avg(Val), 2), Max = round(max(Val), 2), Min = round(min(Val), 2), P99th = round(percentile(Val, 99), 2), P95th = round(percentile(Val, 95), 2) by bin(TimeGenerated, $__interval), DbInstance\n| project-away DbInstance\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Log File(s) Size (KB)", - "type": "timeseries" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": -1, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "deckbytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 78 - }, - "id": 36, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "right" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_performance' and tostring(Tags.object) endswith ':Databases' and tostring(Tags.instance) !~ 'total'\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), Counter = tostring(Tags.counter), DbInstance = tostring(Tags.instance)\n| where SqlInstance == '$SqlInstance' and DbInstance == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and Counter == 'Log File(s) Used Size (KB)'\n| summarize Average = round(avg(Val), 2), Max = round(max(Val), 2), Min = round(min(Val), 2), P99th = round(percentile(Val, 99), 2), P95th = round(percentile(Val, 95), 2) by bin(TimeGenerated, $__interval), DbInstance\n| project-away DbInstance\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Log File(s) Used Size (KB)", - "type": "timeseries" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": -1, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 12, - "x": 12, - "y": 78 - }, - "id": 37, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "right" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_performance' and tostring(Tags.object) endswith ':Databases' and tostring(Tags.instance) !~ 'total'\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), Counter = tostring(Tags.counter), DbInstance = tostring(Tags.instance)\n| where SqlInstance == '$SqlInstance' and DbInstance == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and Counter == 'Percent Log Used'\n| summarize Average = round(avg(Val), 2), Max = round(max(Val), 2), Min = round(min(Val), 2), P99th = round(percentile(Val, 99), 2), P95th = round(percentile(Val, 95), 2) by bin(TimeGenerated, $__interval), DbInstance\n| project-away DbInstance\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Percentage Log used", - "type": "timeseries" - }, - { - "collapsed": false, - "datasource": "$ds", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 87 - }, - "id": 39, - "panels": [], - "title": "Transactions", - "type": "row" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": {}, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "blue", - "value": null - } - ] - } - }, - "overrides": [ - { - "matcher": { - "id": "byRegexp", - "options": "^(.*sec)" - }, - "properties": [ - { - "id": "unit", - "value": "cps" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Log Flush Wait Time" - }, - "properties": [ - { - "id": "unit", - "value": "ms" - } - ] - } - ] - }, - "gridPos": { - "h": 6, - "w": 24, - "x": 0, - "y": 88 - }, - "id": 40, - "maxDataPoints": 40, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics \n| where $__timeFilter()\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_performance' and tostring(Tags.object) endswith ':Databases' and tostring(Tags.instance) !~ 'total'\r\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), Counter = tostring(Tags.counter), DbInstance = tostring(Tags.instance)\r\n| where SqlInstance == '$SqlInstance' and DbInstance == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE')\r\n| summarize (Start, StartValue) = arg_min(TimeGenerated, Val), (End, EndValue) = arg_max(TimeGenerated, Val) by Counter, Database, SqlInstance, DbInstance, bin(TimeGenerated, $__interval)\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\r\n| summarize \r\n ['Write Transactions/sec'] = avgif(Val, Counter == 'Write Transactions/sec'),\r\n ['Log Flushes/sec'] = avgif(Val, Counter == 'Log Flushes/sec'),\r\n ['Log Bytes Flushed/sec'] = avgif(Val, Counter == 'Log Bytes Flushed/sec'),\r\n ['Log Flush Wait Time'] = avgif(Val, Counter == 'Log Flush Wait Time')\r\n by SqlInstance, DbInstance", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "aggregation": "", - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "title": "", - "type": "stat" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 94 - }, - "id": 42, - "maxDataPoints": 20, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_performance' and tostring(Tags.object) endswith ':Databases' and tostring(Tags.instance) !~ 'total'\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), Counter = tostring(Tags.counter), DbInstance = tostring(Tags.instance)\n| where SqlInstance == '$SqlInstance' and DbInstance == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and Counter == 'Write Transactions/sec'\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), DbInstance\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize Sum=sum(Val) by bin(TimeGenerated, $__interval), DbInstance\n| project-away DbInstance\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Write Transactions/sec", - "type": "timeseries" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 94 - }, - "id": 43, - "maxDataPoints": 20, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_performance' and tostring(Tags.object) endswith ':Databases' and tostring(Tags.instance) !~ 'total'\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), Counter = tostring(Tags.counter), DbInstance = tostring(Tags.instance)\n| where SqlInstance == '$SqlInstance' and DbInstance == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and Counter == 'Log Flushes/sec'\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), DbInstance\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize Sum=sum(Val) by bin(TimeGenerated, $__interval), DbInstance\n| project-away DbInstance\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Log Flushes/sec", - "type": "timeseries" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 102 - }, - "id": 44, - "maxDataPoints": 20, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_performance' and tostring(Tags.object) endswith ':Databases' and tostring(Tags.instance) !~ 'total'\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), Counter = tostring(Tags.counter), DbInstance = tostring(Tags.instance)\n| where SqlInstance == '$SqlInstance' and DbInstance == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and Counter == 'Log Bytes Flushed/sec'\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), DbInstance\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize Sum=sum(Val) by bin(TimeGenerated, $__interval), DbInstance\n| project-away DbInstance\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Log Bytes Flushed/sec", - "type": "timeseries" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "ms" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 102 - }, - "id": 45, - "maxDataPoints": 20, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_performance' and tostring(Tags.object) endswith ':Databases' and tostring(Tags.instance) !~ 'total'\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), Counter = tostring(Tags.counter), DbInstance = tostring(Tags.instance)\n| where SqlInstance == '$SqlInstance' and DbInstance == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and Counter == 'Log Flush Wait Time'\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), DbInstance\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize Sum=sum(Val) by bin(TimeGenerated, $__interval), DbInstance\n| project-away DbInstance\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Log Flush Wait Time", - "type": "timeseries" - }, - { - "collapsed": false, - "datasource": "$ds", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 110 - }, - "id": 48, - "panels": [], - "title": "Database IO", - "type": "row" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": {}, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "blue", - "value": null - } - ] - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "LogReadBytes" - }, - "properties": [ - { - "id": "unit", - "value": "bits" - }, - { - "id": "displayName", - "value": "Log read bytes" - }, - { - "id": "color", - "value": { - "fixedColor": "super-light-blue", - "mode": "fixed" - } - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "LogWriteBytes" - }, - "properties": [ - { - "id": "unit", - "value": "bits" - }, - { - "id": "displayName", - "value": "Log write bytes" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "LogReadLatency" - }, - "properties": [ - { - "id": "unit", - "value": "ms" - }, - { - "id": "displayName", - "value": "Log read latency" - }, - { - "id": "color", - "value": { - "fixedColor": "super-light-blue", - "mode": "fixed" - } - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "LogWriteLatency" - }, - "properties": [ - { - "id": "unit", - "value": "ms" - }, - { - "id": "displayName", - "value": "Log write latency" - }, - { - "id": "color", - "value": { - "fixedColor": "orange", - "mode": "fixed" - } - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "DataReadBytes" - }, - "properties": [ - { - "id": "unit", - "value": "bytes" - }, - { - "id": "displayName", - "value": "Data read bytes" - }, - { - "id": "color", - "value": { - "fixedColor": "super-light-blue", - "mode": "fixed" - } - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "DataWriteBytes" - }, - "properties": [ - { - "id": "unit", - "value": "bytes" - }, - { - "id": "displayName", - "value": "Data write bytes" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "DataReadLatency" - }, - "properties": [ - { - "id": "unit", - "value": "ms" - }, - { - "id": "displayName", - "value": "Data read latency" - }, - { - "id": "color", - "value": { - "fixedColor": "super-light-blue", - "mode": "fixed" - } - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "DataWriteLatency" - }, - "properties": [ - { - "id": "unit", - "value": "ms" - }, - { - "id": "displayName", - "value": "Data write latency" - }, - { - "id": "color", - "value": { - "fixedColor": "orange", - "mode": "fixed" - } - } - ] - } - ] - }, - "gridPos": { - "h": 6, - "w": 24, - "x": 0, - "y": 111 - }, - "id": 46, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics \n| where $__timeFilter()\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_database_io'\r\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), FileType = tostring(Tags.file_type), FileName = tostring(Tags.logical_filename)\r\n| where SqlInstance == '$SqlInstance' and Database == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE')\r\n| summarize (Start, StartValue) = arg_min(TimeGenerated, Val), (End, EndValue) = arg_max(TimeGenerated, Val) by Name, Database, SqlInstance, FileType, FileName\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\r\n| summarize\r\n DataReadBytes = sumif(Val, Name == 'read_bytes' and FileType == 'DATA'),\r\n DataWriteBytes = sumif(Val, Name == 'write_bytes' and FileType == 'DATA'),\r\n DataReadLatency = avgif(Val, Name == 'read_latency_ms' and FileType == 'DATA'),\r\n DataWriteLatency = avgif(Val, Name == 'write_latency_ms' and FileType == 'DATA'),\r\n LogReadBytes = sumif(Val, Name == 'read_bytes' and FileType == 'LOG'),\r\n LogWriteBytes = sumif(Val, Name == 'write_bytes' and FileType == 'LOG'),\r\n LogReadLatency = avgif(Val, Name == 'read_latency_ms' and FileType == 'LOG'),\r\n LogWriteLatency = avgif(Val, Name == 'write_latency_ms' and FileType == 'LOG')\r\n by SqlInstance, Database\n | project-reorder LogReadBytes, LogWriteBytes, LogReadLatency, LogWriteLatency, DataReadBytes, DataWriteBytes, DataReadLatency, DataWriteLatency, Database", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "aggregation": "", - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "title": "", - "type": "stat" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 117 - }, - "id": 49, - "maxDataPoints": 24, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_database_io'\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), FileType = tostring(Tags.file_type)\n| extend Database = iff(isempty(Database), SqlInstance, Database)\n| where SqlInstance == '$SqlInstance' and Database == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and FileType == 'LOG' and Name == 'reads'\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), Database\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize [\"Sum\"]=sum(Val) by bin(TimeGenerated, $__interval), Database\n| order by TimeGenerated asc\n| project-away Database", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Log reads", - "type": "timeseries" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 117 - }, - "id": 52, - "maxDataPoints": 24, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_database_io'\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), FileType = tostring(Tags.file_type)\n| extend Database = iff(isempty(Database), SqlInstance, Database)\n| where SqlInstance == '$SqlInstance' and Database == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and FileType == 'LOG' and Name == 'writes'\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), Database\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize [\"Sum\"]=sum(Val) by bin(TimeGenerated, $__interval), Database\n| order by TimeGenerated asc\n| project-away Database", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Log writes", - "type": "timeseries" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 125 - }, - "id": 50, - "maxDataPoints": 24, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_database_io'\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), FileType = tostring(Tags.file_type)\n| extend Database = iff(isempty(Database), SqlInstance, Database)\n| where SqlInstance == '$SqlInstance' and Database == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and FileType == 'LOG' and Name == 'read_bytes'\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), Database\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize [\"Sum\"]=sum(Val) by bin(TimeGenerated, $__interval), Database\n| order by TimeGenerated asc\n| project-away Database", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Log read bytes", - "type": "timeseries" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 125 - }, - "id": 56, - "maxDataPoints": 24, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_database_io'\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), FileType = tostring(Tags.file_type)\n| extend Database = iff(isempty(Database), SqlInstance, Database)\n| where SqlInstance == '$SqlInstance' and Database == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and FileType == 'LOG' and Name == 'write_bytes'\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), Database\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize [\"Sum\"]=sum(Val) by bin(TimeGenerated, $__interval), Database\n| order by TimeGenerated asc\n| project-away Database", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Log writebytes", - "type": "timeseries" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "ms" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 133 - }, - "id": 51, - "maxDataPoints": 24, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_database_io'\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), FileType = tostring(Tags.file_type)\n| extend Database = iff(isempty(Database), SqlInstance, Database)\n| where SqlInstance == '$SqlInstance' and Database == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and FileType == 'LOG' and Name == 'read_latency_ms'\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), Database\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize [\"Avg\"]=avg(Val) by bin(TimeGenerated, $__interval), Database\n| extend Avg=iff(isnan(Avg), toreal(0), Avg)\n| order by TimeGenerated asc\n| project-away Database", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Log read latency", - "type": "timeseries" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "ms" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 133 - }, - "id": 61, - "maxDataPoints": 24, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_database_io'\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), FileType = tostring(Tags.file_type)\n| extend Database = iff(isempty(Database), SqlInstance, Database)\n| where SqlInstance == '$SqlInstance' and Database == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and FileType == 'LOG' and Name == 'write_latency_ms'\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), Database\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize [\"Avg\"]=avg(Val) by bin(TimeGenerated, $__interval), Database\n| extend Avg=iff(isnan(Avg), toreal(0), Avg)\n| order by TimeGenerated asc\n| project-away Database", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Log write latency", - "type": "timeseries" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 141 - }, - "id": 55, - "maxDataPoints": 40, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_database_io'\n| extend FileTypeFilter = iff(tostring(Tags.measurement_db_type) == 'AzureSQLDB', 'DATA', 'ROWS')\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), FileType = tostring(Tags.file_type)\n| extend Database = iff(isempty(Database), SqlInstance, Database)\n| where SqlInstance == '$SqlInstance' and Database == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and FileType == FileTypeFilter and Name == 'reads'\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), Database\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize [\"Sum\"]=sum(Val) by bin(TimeGenerated, $__interval), Database\n| order by TimeGenerated asc\n| project-away Database", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Data reads", - "type": "timeseries" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 141 - }, - "id": 58, - "maxDataPoints": 40, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_database_io'\n| extend FileTypeFilter = iff(tostring(Tags.measurement_db_type) == 'AzureSQLDB', 'DATA', 'ROWS')\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), FileType = tostring(Tags.file_type)\n| extend Database = iff(isempty(Database), SqlInstance, Database)\n| where SqlInstance == '$SqlInstance' and Database == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and FileType == FileTypeFilter and Name == 'writes'\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), Database\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize [\"Sum\"]=sum(Val) by bin(TimeGenerated, $__interval), Database\n| order by TimeGenerated asc\n| project-away Database", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Data writes", - "type": "timeseries" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 149 - }, - "id": 57, - "maxDataPoints": 24, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_database_io'\n| extend FileTypeFilter = iff(tostring(Tags.measurement_db_type) == 'AzureSQLDB', 'DATA', 'ROWS')\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), FileType = tostring(Tags.file_type)\n| extend Database = iff(isempty(Database), SqlInstance, Database)\n| where SqlInstance == '$SqlInstance' and Database == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and FileType == FileTypeFilter and Name == 'read_bytes'\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), Database\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize [\"Sum\"]=sum(Val) by bin(TimeGenerated, $__interval), Database\n| order by TimeGenerated asc\n| project-away Database", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Data read bytes", - "type": "timeseries" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 149 - }, - "id": 59, - "maxDataPoints": 24, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_database_io'\n| extend FileTypeFilter = iff(tostring(Tags.measurement_db_type) == 'AzureSQLDB', 'DATA', 'ROWS')\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), FileType = tostring(Tags.file_type)\n| extend Database = iff(isempty(Database), SqlInstance, Database)\n| where SqlInstance == '$SqlInstance' and Database == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and FileType == FileTypeFilter and Name == 'write_bytes'\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), Database\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize [\"Sum\"]=sum(Val) by bin(TimeGenerated, $__interval), Database\n| order by TimeGenerated asc\n| project-away Database", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Data write bytes", - "type": "timeseries" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "ms" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 157 - }, - "id": 54, - "maxDataPoints": 24, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_database_io'\n| extend FileTypeFilter = iff(tostring(Tags.measurement_db_type) == 'AzureSQLDB', 'DATA', 'ROWS')\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), FileType = tostring(Tags.file_type)\n| extend Database = iff(isempty(Database), SqlInstance, Database)\n| where SqlInstance == '$SqlInstance' and Database == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and FileType == FileTypeFilter and Name == 'read_latency_ms'\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), Database\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize [\"Avg\"]=avg(Val) by bin(TimeGenerated, $__interval), Database\n| extend Avg=iff(isnan(Avg), toreal(0), Avg)\n| order by TimeGenerated asc\n| project-away Database", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Data read latency", - "type": "timeseries" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "ms" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 157 - }, - "id": 60, - "maxDataPoints": 24, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_database_io'\n| extend FileTypeFilter = iff(tostring(Tags.measurement_db_type) == 'AzureSQLDB', 'DATA', 'ROWS')\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), FileType = tostring(Tags.file_type)\n| extend Database = iff(isempty(Database), SqlInstance, Database)\n| where SqlInstance == '$SqlInstance' and Database == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and FileType == FileTypeFilter and Name == 'write_latency_ms'\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), Database\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize [\"Avg\"]=avg(Val) by bin(TimeGenerated, $__interval), Database\n| extend Avg=iff(isnan(Avg), toreal(0), Avg)\n| order by TimeGenerated asc\n| project-away Database", - "resultFormat": "time_series", - "workspace": "$ws" - }, - "azureMonitor": { - "aggOptions": [], - "dimensionFilter": "*", - "dimensionFilters": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "select", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "auto", - "timeGrains": [], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Log Analytics", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Data write latency", - "type": "timeseries" - } - ], - "refresh": false, - "schemaVersion": 27, - "style": "dark", - "tags": [], - "templating": { - "list": [ + "pluginVersion": "7.4.3", + "targets": [ { - "current": { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" }, - "description": null, - "error": null, - "hide": 0, - "includeAll": false, - "label": "Data Source", - "multi": false, - "name": "ds", - "options": [], - "query": "grafana-azure-monitor-datasource", - "queryValue": "", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "type": "datasource" + "azureLogAnalytics": { + "query": "InsightsMetrics\n| where $__timeFilter()\n\r\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_performance' \r\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), Counter = tostring(Tags.counter), DbInstance = tostring(Tags.instance)\r\n| where SqlInstance == '$SqlInstance' and (Database == '$db' or '*' == '$db') and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE')\n| where Counter in~ ('User connections', 'Active Temp Tables')\r\n| summarize EndValue = max(Val) by Counter\n| extend p = pack(Counter, EndValue)\r\n| summarize bag=make_bag(p)\r\n| evaluate bag_unpack(bag)", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" }, { - "allValue": null, - "current": {}, - "datasource": "$ds", - "definition": "subscriptions()", - "description": null, - "error": null, - "hide": 0, - "includeAll": false, - "label": "Subscription", - "multi": false, - "name": "sub", - "options": [], - "query": "subscriptions()", - "refresh": 2, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": null, - "current": {}, - "datasource": "$ds", - "definition": "Workspaces($sub)", - "description": null, - "error": null, - "hide": 0, - "includeAll": false, - "label": "Workspace", - "multi": false, - "name": "ws", - "options": [], - "query": "Workspaces($sub)", - "refresh": 2, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": null, - "current": {}, - "datasource": "$ds", - "definition": "workspace(\"$ws\").InsightsMetrics | where Namespace contains 'sqlserver_server_properties' and Name == 'engine_edition'\n| extend Tags = todynamic(Tags)\n| extend Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\n| where Val == 5 | summarize by Instance\n| project value = Instance, label = Instance, selected = true", - "description": null, - "error": null, - "hide": 0, - "includeAll": false, - "label": "Server", - "multi": false, - "name": "SqlInstance", - "options": [], - "query": "workspace(\"$ws\").InsightsMetrics | where Namespace contains 'sqlserver_server_properties' and Name == 'engine_edition'\n| extend Tags = todynamic(Tags)\n| extend Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\n| where Val == 5 | summarize by Instance\n| project value = Instance, label = Instance, selected = true", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": null, - "current": {}, - "datasource": "$ds", - "definition": "workspace(\"$ws\").InsightsMetrics\n| where Namespace contains 'sqlserver_server_properties' and Name == 'uptime'\n| extend Tags = todynamic(Tags)\n| extend Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance), Replica = tostring(iff(Tags.replica_updateability == 'READ_WRITE', 'primary', 'secondary'))\n| extend DatabaseKey = iff(Database == Instance, Database, strcat(Database, ' on ', Instance))\n| where Instance =~ '$SqlInstance'\n| distinct Database", - "description": null, - "error": null, - "hide": 0, - "includeAll": false, - "label": "Database", - "multi": false, - "name": "db", - "options": [], - "query": "workspace(\"$ws\").InsightsMetrics\n| where Namespace contains 'sqlserver_server_properties' and Name == 'uptime'\n| extend Tags = todynamic(Tags)\n| extend Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance), Replica = tostring(iff(Tags.replica_updateability == 'READ_WRITE', 'primary', 'secondary'))\n| extend DatabaseKey = iff(Database == Instance, Database, strcat(Database, ' on ', Instance))\n| where Instance =~ '$SqlInstance'\n| distinct Database", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": null, - "current": {}, - "datasource": "$ds", - "definition": "workspace(\"$ws\").InsightsMetrics\n| extend Tags = todynamic(Tags)\n| extend Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\n| extend DatabaseKey = iff(Database == Instance, Database, strcat(Database, ' on ', Instance))\n| where Instance == '$SqlInstance'\n| where Namespace =~ 'sqlserver_azure_db_resource_stats'\n| summarize by value = tostring(iff(Tags.replica_updateability == 'READ_WRITE', 'primary', 'secondary'))\n| project value, label = value, selected = true\n| order by label asc", - "description": null, - "error": null, - "hide": 0, - "includeAll": false, - "label": null, - "multi": false, - "name": "Replica", - "options": [], - "query": "workspace(\"$ws\").InsightsMetrics\n| extend Tags = todynamic(Tags)\n| extend Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\n| extend DatabaseKey = iff(Database == Instance, Database, strcat(Database, ' on ', Instance))\n| where Instance == '$SqlInstance'\n| where Namespace =~ 'sqlserver_azure_db_resource_stats'\n| summarize by value = tostring(iff(Tags.replica_updateability == 'READ_WRITE', 'primary', 'secondary'))\n| project value, label = value, selected = true\n| order by label asc", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\n| where $__timeFilter()\n\r\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_performance' \r\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), Counter = tostring(Tags.counter), DbInstance = tostring(Tags.instance)\r\n| where SqlInstance == '$SqlInstance' and (Database == '$db' or '*' == '$db') and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE')\n| where Counter in~ ('Memory Grants Pending', 'Number of deadlocks/sec', 'Processes blocked')\r\n| summarize (T, EndValue) = arg_max(TimeGenerated, Val) by Counter\n| project-away T\n| extend p = pack(Counter, EndValue)\r\n| summarize bag=make_bag(p)\r\n| evaluate bag_unpack(bag)\n", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "B", + "subscription": "$sub" } - ] + ], + "title": "Key Stats", + "transformations": [], + "transparent": true, + "type": "stat" }, - "time": { - "from": "now-4h", - "to": "now" + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "custom": {}, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Number of Deadlocks/sec" + }, + "properties": [ + { + "id": "displayName", + "value": "Deadlocks/sec" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Data File(s) Size (KB)" + }, + "properties": [ + { + "id": "displayName", + "value": "Data file size" + }, + { + "id": "unit", + "value": "deckbytes" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Log File(s) Size (KB)" + }, + "properties": [ + { + "id": "displayName", + "value": "Log file size" + }, + { + "id": "unit", + "value": "deckbytes" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Log File(s) Used Size (KB)" + }, + "properties": [ + { + "id": "displayName", + "value": "Log file used size" + }, + { + "id": "unit", + "value": "deckbytes" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free Space in tempdb (KB)" + }, + "properties": [ + { + "id": "displayName", + "value": "Free space in tempdb" + }, + { + "id": "unit", + "value": "deckbytes" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Memory broker clerk size" + }, + "properties": [ + { + "id": "unit", + "value": "deckbytes" + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 24, + "x": 0, + "y": 5 + }, + "id": 9, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": true + }, + "text": {}, + "textMode": "value_and_name" + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\n| where $__timeFilter()\n\r\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_performance' \r\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), Counter = tostring(Tags.counter), DbInstance = tostring(Tags.instance)\r\n| where SqlInstance == '$SqlInstance' and (Database == '$db' or '*' == '$db') and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE')\n| where tostring(Tags.object) endswith ':Databases' and tostring(Tags.instance) =~ 'total' and Counter in~ ('Data File(s) Size (KB)', 'Log File(s) Size (KB)', 'Log File(s) Used Size (KB)')\r\n| summarize (End, EndValue) = arg_max(TimeGenerated, Val) by Counter\n| project-away End\n| extend p = pack(Counter, EndValue)\r\n| summarize bag=make_bag(p)\r\n| evaluate bag_unpack(bag)\n", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "C", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\n| where $__timeFilter()\n\r\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_performance' \r\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), Counter = tostring(Tags.counter), DbInstance = tostring(Tags.instance)\r\n| where SqlInstance == '$SqlInstance' and (Database == '$db' or '*' == '$db') and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE')\n| where Counter =~ 'Free Space in tempdb (KB)'\r\n| summarize EndValue = min(Val) by Counter\n| extend p = pack(Counter, EndValue)\r\n| summarize bag=make_bag(p)\r\n| evaluate bag_unpack(bag)\n", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "D", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\n| where $__timeFilter()\n\r\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_performance' \r\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), Counter = tostring(Tags.counter), DbInstance = tostring(Tags.instance)\r\n| where SqlInstance == '$SqlInstance' and (Database == '$db' or '*' == '$db') and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE')\n| where Counter =~ 'Memory broker clerk size' and DbInstance =~ 'Buffer Pool'\r\n| summarize (End, EndValue) = arg_max(TimeGenerated, Val) by Counter\r\n| extend EndValue = EndValue * 8\n| project-away End\n| extend p = pack(Counter, EndValue)\r\n| summarize bag=make_bag(p)\r\n| evaluate bag_unpack(bag)\n", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "E", + "subscription": "$sub" + } + ], + "title": "", + "transformations": [], + "transparent": true, + "type": "stat" }, - "timepicker": {}, - "timezone": "browser", - "title": "Azure SQL Database", - "uid": "cIld6iqMk", - "version": 69 - } \ No newline at end of file + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 0, + "y": 11 + }, + "id": 2, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "\r\n\r\nInsightsMetrics\n| where $__timeFilter()\n\r\n| extend Tags = todynamic(Tags)\r\n| extend Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\r\n| extend DatabaseKey = iff(Database == Instance, Database, strcat(Database, ' on ', Instance))\r\n| where Instance == '$SqlInstance'\r\n| where Namespace =~ 'sqlserver_azure_db_resource_stats' and Name == 'avg_instance_cpu_percent' and Tags.replica_updateability == iff('primary' == 'secondary', 'READ_ONLY', 'READ_WRITE')\n| summarize ['Avg Instance CPU'] = avg(Val) by bin(TimeGenerated, $__interval)", + "resultFormat": "table", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\n| where $__timeFilter()\n\r\n| extend Tags = todynamic(Tags)\r\n| extend Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\r\n| extend DatabaseKey = iff(Database == Instance, Database, strcat(Database, ' on ', Instance))\r\n| where Instance == '$SqlInstance'\r\n| where Namespace =~ 'sqlserver_azure_db_resource_stats' and Name == 'avg_cpu_percent' and Tags.replica_updateability == iff('primary' == 'secondary', 'READ_ONLY', 'READ_WRITE')\n| summarize ['Avg CPU'] = avg(Val) by bin(TimeGenerated, $__interval)", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "B", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "CPU", + "transformations": [], + "type": "timeseries" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 8, + "y": 11 + }, + "id": 3, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "\r\n\r\nInsightsMetrics\n| where $__timeFilter()\n\r\n| extend Tags = todynamic(Tags)\r\n| extend Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\r\n| extend DatabaseKey = iff(Database == Instance, Database, strcat(Database, ' on ', Instance))\r\n| where Instance == '$SqlInstance'\r\n| where Namespace =~ 'sqlserver_azure_db_resource_stats' and Name == 'avg_instance_memory_percent' and Tags.replica_updateability == iff('primary' == 'secondary', 'READ_ONLY', 'READ_WRITE')\n| summarize ['Avg Instance Memory'] = avg(Val) by bin(TimeGenerated, $__interval)", + "resultFormat": "table", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\n| where $__timeFilter()\n\r\n| extend Tags = todynamic(Tags)\r\n| extend Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\r\n| extend DatabaseKey = iff(Database == Instance, Database, strcat(Database, ' on ', Instance))\r\n| where Instance == '$SqlInstance'\r\n| where Namespace =~ 'sqlserver_azure_db_resource_stats' and Name == 'avg_memory_usage_percent' and Tags.replica_updateability == iff('primary' == 'secondary', 'READ_ONLY', 'READ_WRITE')\n| summarize ['Avg Memory'] = avg(Val) by bin(TimeGenerated, $__interval)", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "B", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Memory", + "transformations": [], + "type": "timeseries" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 16, + "y": 11 + }, + "id": 4, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "\r\n\r\nInsightsMetrics\n| where $__timeFilter()\n\r\n| extend Tags = todynamic(Tags)\r\n| extend Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\r\n| extend DatabaseKey = iff(Database == Instance, Database, strcat(Database, ' on ', Instance))\r\n| where Instance == '$SqlInstance'\r\n| where Namespace =~ 'sqlserver_azure_db_resource_stats' and Name == 'avg_data_io_percent' and Tags.replica_updateability == iff('primary' == 'secondary', 'READ_ONLY', 'READ_WRITE')\n| summarize ['Avg Data I/O'] = avg(Val) by bin(TimeGenerated, $__interval)", + "resultFormat": "table", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\n| where $__timeFilter()\n\r\n| extend Tags = todynamic(Tags)\r\n| extend Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\r\n| extend DatabaseKey = iff(Database == Instance, Database, strcat(Database, ' on ', Instance))\r\n| where Instance == '$SqlInstance'\r\n| where Namespace =~ 'sqlserver_azure_db_resource_stats' and Name == 'avg_log_write_percent' and Tags.replica_updateability == iff('primary' == 'secondary', 'READ_ONLY', 'READ_WRITE')\n| summarize ['Avg Log Writes'] = avg(Val) by bin(TimeGenerated, $__interval)", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "B", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Data I/O", + "transformations": [], + "type": "timeseries" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "hue", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 1, + "pointSize": 9, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "ms" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "^(WaitType.*)" + }, + "properties": [ + { + "id": "displayName" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 18 + }, + "id": 8, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics \n| where $__timeFilter()\n| where Namespace in~ ('sqlserver_azuredb_waitstats', 'sqlserver_waitstats') and Name =~ 'wait_time_ms'\r\n| extend Tags = todynamic(Tags)\r\n| extend Database = tostring(iff(Tags[\"database_name'\"] == '', Tags[\"database_name\"], Tags[\"database_name'\"])), Instance = tostring(Tags.sql_instance), WaitType = tostring(Tags.wait_type), WaitCategory = tostring(Tags.wait_category)\r\n| where Instance == '$SqlInstance' and (Database == '$db' or '*' == '$db')\r\n| order by Computer asc, Instance asc, Database asc, Namespace asc, Name asc, WaitType asc, TimeGenerated asc\r\n| extend WaitCategory = iff(isempty(WaitCategory), \"Other\", WaitCategory)\r\n| extend Val = iff(Computer == prev(Computer) and Instance == prev(Instance) and Database == prev(Database) and Namespace == prev(Namespace) and Name == prev(Name) and WaitType == prev(WaitType) and Val > prev(Val), Val - prev(Val), real(null))\n| summarize Val = avg(Val) by bin(TimeGenerated, $__interval), WaitCategory\n| extend Val = iff(isnan(Val), real(0), Val)\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "SQL Wait Category Stats", + "transformations": [ + { + "id": "labelsToFields", + "options": { + "valueLabel": "WaitCategory" + } + } + ], + "type": "timeseries" + }, + { + "collapsed": false, + "datasource": "$ds", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 26 + }, + "id": 11, + "panels": [], + "title": "Activities", + "type": "row" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 24, + "x": 0, + "y": 27 + }, + "id": 15, + "maxDataPoints": 20, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\r\n| where $__timeFilter()\r\n| where Namespace =~ 'sqlserver_performance' \r\n| extend Tags = todynamic(Tags)\r\n| extend Name = tostring(Tags.counter), Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\r\n| where Instance == '$SqlInstance' and Database == '$db'\r\n| where Name =~ 'Transactions/sec' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') \r\n| extend SeriesName = strcat(Instance, '/', Database)\r\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), SeriesName\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize Sum = sum(Val) by bin(TimeGenerated, $__interval), SeriesName\r\n| project-away SeriesName\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Transactions/sec", + "type": "timeseries" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 0, + "y": 34 + }, + "id": 17, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\r\n| where $__timeFilter()\r\n| where Namespace =~ 'sqlserver_performance' \r\n| extend Tags = todynamic(Tags)\r\n| extend Name = tostring(Tags.counter), Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\r\n| where Instance == '$SqlInstance' and Database == '$db'\r\n| where Name =~ 'User connections' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE')\r\n| extend SeriesName = strcat(Instance, '/', Database)\r\n| summarize Sum = sum(Val) by bin(TimeGenerated, $__interval), SeriesName\r\n| project-away SeriesName\r\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "User Connections", + "transformations": [], + "type": "timeseries" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 8, + "y": 34 + }, + "id": 18, + "maxDataPoints": 40, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\r\n| where $__timeFilter()\r\n| where Namespace =~ 'sqlserver_performance' \r\n| extend Tags = todynamic(Tags)\r\n| extend Name = tostring(Tags.counter), Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\r\n| where Instance == '$SqlInstance' and Database == '$db'\r\n| where Name =~ 'Batch requests/sec' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE')\r\n| extend SeriesName = strcat(Instance, '/', Database)\r\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), SeriesName\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize Sum = sum(Val) by bin(TimeGenerated, $__interval), SeriesName\n\r\n| project-away SeriesName\r\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Batch requests/sec", + "type": "timeseries" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 16, + "y": 34 + }, + "id": 19, + "maxDataPoints": 40, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\r\n| where $__timeFilter()\r\n| where Namespace =~ 'sqlserver_performance' \r\n| extend Tags = todynamic(Tags)\r\n| extend Name = tostring(Tags.counter), Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\r\n| where Instance == '$SqlInstance' and Database == '$db'\r\n| where Name =~ 'SQL compilations/sec' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE')\r\n| extend SeriesName = strcat(Instance, '/', Database)\r\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), SeriesName\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize Sum = sum(Val) by bin(TimeGenerated, $__interval), SeriesName\n\r\n| project-away SeriesName\r\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "SQL compilations/sec", + "type": "timeseries" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 0, + "y": 42 + }, + "id": 20, + "maxDataPoints": 40, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\r\n| where $__timeFilter()\r\n| where Namespace =~ 'sqlserver_performance' \r\n| extend Tags = todynamic(Tags)\r\n| extend Name = tostring(Tags.counter), Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\r\n| where Instance == '$SqlInstance' and Database == '$db'\r\n| where Name =~ 'SQL re-compilations/sec' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE')\r\n| extend SeriesName = strcat(Instance, '/', Database)\r\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), SeriesName\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize Sum = sum(Val) by bin(TimeGenerated, $__interval), SeriesName\n\r\n| project-away SeriesName\r\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "SQL re-compilations/sec", + "type": "timeseries" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 8, + "y": 42 + }, + "id": 21, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\r\n| where $__timeFilter()\r\n| where Namespace =~ 'sqlserver_performance' \r\n| extend Tags = todynamic(Tags)\r\n| extend Name = tostring(Tags.counter), Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\r\n| where Instance == '$SqlInstance' and Database == '$db'\r\n| where Name =~ 'Processes blocked' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE')\r\n| extend SeriesName = strcat(Instance, '/', Database)\r\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), SeriesName\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize Sum = sum(Val) by bin(TimeGenerated, $__interval), SeriesName\n\r\n| project-away SeriesName\r\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Processes blocked", + "type": "timeseries" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 16, + "y": 42 + }, + "id": 22, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\r\n| where $__timeFilter()\r\n| where Namespace =~ 'sqlserver_performance' \r\n| extend Tags = todynamic(Tags)\r\n| extend Name = tostring(Tags.counter), Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\r\n| where Instance == '$SqlInstance' and Database == '$db'\r\n| where Name =~ 'Number of deadlocks/sec' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE')\r\n| extend SeriesName = strcat(Instance, '/', Database)\r\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), SeriesName\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize Sum = sum(Val) by bin(TimeGenerated, $__interval), SeriesName\n\r\n| project-away SeriesName\r\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Number of deadlocks/sec", + "type": "timeseries" + }, + { + "collapsed": false, + "datasource": "$ds", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 50 + }, + "id": 24, + "panels": [], + "title": "Memory Clerks", + "type": "row" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 24, + "x": 0, + "y": 51 + }, + "id": 26, + "maxDataPoints": 40, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\r\n| where $__timeFilter()\r\n| where Namespace == 'sqlserver_memory_clerks'\r\n| extend Tags = todynamic(Tags)\r\n| extend Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance), ClerkType = tostring(Tags.clerk_type)\r\n| where Instance == '$SqlInstance' and Database == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE')\r\n| extend SeriesName = strcat(Instance, '/', Database)\r\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), SeriesName, ClerkType\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\r\n| summarize Sum=sum(Val) by bin(TimeGenerated, $__interval), ClerkType, SeriesName\n| project-away SeriesName\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "", + "transformations": [ + { + "id": "labelsToFields", + "options": { + "valueLabel": "ClerkType" + } + } + ], + "type": "timeseries" + }, + { + "collapsed": false, + "datasource": "$ds", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 62 + }, + "id": 30, + "panels": [], + "title": "Database Space", + "type": "row" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": {}, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "^(.* size)" + }, + "properties": [ + { + "id": "unit", + "value": "deckbytes" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Percent log used" + }, + "properties": [ + { + "id": "unit", + "value": "percent" + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 24, + "x": 0, + "y": 63 + }, + "id": 32, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics \n| where $__timeFilter()\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_performance' and tostring(Tags.object) endswith ':Databases' and tostring(Tags.instance) !~ 'total'\r\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), Counter = tostring(Tags.counter), DbInstance = tostring(Tags.instance)\r\n| where SqlInstance == '$SqlInstance' and DbInstance == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE')\r\n| summarize \r\n ['Data file(s) size']= avgif(Val, Counter == 'Data File(s) Size (KB)'),\r\n ['Log file(s) size'] = avgif(Val, Counter == 'Log File(s) Size (KB)'),\r\n ['Log file(s) used size'] = avgif(Val, Counter == 'Log File(s) Used Size (KB)'),\r\n ['Percent log used'] = avgif(Val, Counter == 'Percent Log Used')\r\n by SqlInstance, DbInstance", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "aggregation": "", + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "", + "type": "stat" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": -1, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "deckbytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 69 + }, + "id": 34, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "right" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_performance' and tostring(Tags.object) endswith ':Databases' and tostring(Tags.instance) !~ 'total'\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), Counter = tostring(Tags.counter), DbInstance = tostring(Tags.instance)\n| where SqlInstance == '$SqlInstance' and DbInstance == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and Counter == 'Data File(s) Size (KB)'\n| summarize Average = round(avg(Val), 2), Max = round(max(Val), 2), Min = round(min(Val), 2), P99th = round(percentile(Val, 99), 2), P95th = round(percentile(Val, 95), 2) by bin(TimeGenerated, $__interval), DbInstance\n| project-away DbInstance\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Data File(s) Size (KB)", + "type": "timeseries" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "deckbytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 69 + }, + "id": 35, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "right" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_performance' and tostring(Tags.object) endswith ':Databases' and tostring(Tags.instance) !~ 'total'\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), Counter = tostring(Tags.counter), DbInstance = tostring(Tags.instance)\n| where SqlInstance == '$SqlInstance' and DbInstance == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and Counter == 'Log File(s) Size (KB)'\n| summarize Average = round(avg(Val), 2), Max = round(max(Val), 2), Min = round(min(Val), 2), P99th = round(percentile(Val, 99), 2), P95th = round(percentile(Val, 95), 2) by bin(TimeGenerated, $__interval), DbInstance\n| project-away DbInstance\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Log File(s) Size (KB)", + "type": "timeseries" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": -1, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "deckbytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 78 + }, + "id": 36, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "right" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_performance' and tostring(Tags.object) endswith ':Databases' and tostring(Tags.instance) !~ 'total'\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), Counter = tostring(Tags.counter), DbInstance = tostring(Tags.instance)\n| where SqlInstance == '$SqlInstance' and DbInstance == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and Counter == 'Log File(s) Used Size (KB)'\n| summarize Average = round(avg(Val), 2), Max = round(max(Val), 2), Min = round(min(Val), 2), P99th = round(percentile(Val, 99), 2), P95th = round(percentile(Val, 95), 2) by bin(TimeGenerated, $__interval), DbInstance\n| project-away DbInstance\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Log File(s) Used Size (KB)", + "type": "timeseries" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": -1, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 78 + }, + "id": 37, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "right" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_performance' and tostring(Tags.object) endswith ':Databases' and tostring(Tags.instance) !~ 'total'\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), Counter = tostring(Tags.counter), DbInstance = tostring(Tags.instance)\n| where SqlInstance == '$SqlInstance' and DbInstance == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and Counter == 'Percent Log Used'\n| summarize Average = round(avg(Val), 2), Max = round(max(Val), 2), Min = round(min(Val), 2), P99th = round(percentile(Val, 99), 2), P95th = round(percentile(Val, 95), 2) by bin(TimeGenerated, $__interval), DbInstance\n| project-away DbInstance\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Percentage Log used", + "type": "timeseries" + }, + { + "collapsed": false, + "datasource": "$ds", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 87 + }, + "id": 39, + "panels": [], + "title": "Transactions", + "type": "row" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": {}, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "^(.*sec)" + }, + "properties": [ + { + "id": "unit", + "value": "cps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Log Flush Wait Time" + }, + "properties": [ + { + "id": "unit", + "value": "ms" + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 24, + "x": 0, + "y": 88 + }, + "id": 40, + "maxDataPoints": 40, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics \n| where $__timeFilter()\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_performance' and tostring(Tags.object) endswith ':Databases' and tostring(Tags.instance) !~ 'total'\r\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), Counter = tostring(Tags.counter), DbInstance = tostring(Tags.instance)\r\n| where SqlInstance == '$SqlInstance' and DbInstance == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE')\r\n| summarize (Start, StartValue) = arg_min(TimeGenerated, Val), (End, EndValue) = arg_max(TimeGenerated, Val) by Counter, Database, SqlInstance, DbInstance, bin(TimeGenerated, $__interval)\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\r\n| summarize \r\n ['Write Transactions/sec'] = avgif(Val, Counter == 'Write Transactions/sec'),\r\n ['Log Flushes/sec'] = avgif(Val, Counter == 'Log Flushes/sec'),\r\n ['Log Bytes Flushed/sec'] = avgif(Val, Counter == 'Log Bytes Flushed/sec'),\r\n ['Log Flush Wait Time'] = avgif(Val, Counter == 'Log Flush Wait Time')\r\n by SqlInstance, DbInstance", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "aggregation": "", + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "", + "type": "stat" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 94 + }, + "id": 42, + "maxDataPoints": 20, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_performance' and tostring(Tags.object) endswith ':Databases' and tostring(Tags.instance) !~ 'total'\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), Counter = tostring(Tags.counter), DbInstance = tostring(Tags.instance)\n| where SqlInstance == '$SqlInstance' and DbInstance == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and Counter == 'Write Transactions/sec'\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), DbInstance\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize Sum=sum(Val) by bin(TimeGenerated, $__interval), DbInstance\n| project-away DbInstance\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Write Transactions/sec", + "type": "timeseries" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 94 + }, + "id": 43, + "maxDataPoints": 20, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_performance' and tostring(Tags.object) endswith ':Databases' and tostring(Tags.instance) !~ 'total'\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), Counter = tostring(Tags.counter), DbInstance = tostring(Tags.instance)\n| where SqlInstance == '$SqlInstance' and DbInstance == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and Counter == 'Log Flushes/sec'\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), DbInstance\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize Sum=sum(Val) by bin(TimeGenerated, $__interval), DbInstance\n| project-away DbInstance\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Log Flushes/sec", + "type": "timeseries" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 102 + }, + "id": 44, + "maxDataPoints": 20, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_performance' and tostring(Tags.object) endswith ':Databases' and tostring(Tags.instance) !~ 'total'\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), Counter = tostring(Tags.counter), DbInstance = tostring(Tags.instance)\n| where SqlInstance == '$SqlInstance' and DbInstance == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and Counter == 'Log Bytes Flushed/sec'\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), DbInstance\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize Sum=sum(Val) by bin(TimeGenerated, $__interval), DbInstance\n| project-away DbInstance\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Log Bytes Flushed/sec", + "type": "timeseries" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 102 + }, + "id": 45, + "maxDataPoints": 20, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_performance' and tostring(Tags.object) endswith ':Databases' and tostring(Tags.instance) !~ 'total'\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), Counter = tostring(Tags.counter), DbInstance = tostring(Tags.instance)\n| where SqlInstance == '$SqlInstance' and DbInstance == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and Counter == 'Log Flush Wait Time'\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), DbInstance\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize Sum=sum(Val) by bin(TimeGenerated, $__interval), DbInstance\n| project-away DbInstance\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Log Flush Wait Time", + "type": "timeseries" + }, + { + "collapsed": false, + "datasource": "$ds", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 110 + }, + "id": 48, + "panels": [], + "title": "Database IO", + "type": "row" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": {}, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "LogReadBytes" + }, + "properties": [ + { + "id": "unit", + "value": "bits" + }, + { + "id": "displayName", + "value": "Log read bytes" + }, + { + "id": "color", + "value": { + "fixedColor": "super-light-blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "LogWriteBytes" + }, + "properties": [ + { + "id": "unit", + "value": "bits" + }, + { + "id": "displayName", + "value": "Log write bytes" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "LogReadLatency" + }, + "properties": [ + { + "id": "unit", + "value": "ms" + }, + { + "id": "displayName", + "value": "Log read latency" + }, + { + "id": "color", + "value": { + "fixedColor": "super-light-blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "LogWriteLatency" + }, + "properties": [ + { + "id": "unit", + "value": "ms" + }, + { + "id": "displayName", + "value": "Log write latency" + }, + { + "id": "color", + "value": { + "fixedColor": "orange", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "DataReadBytes" + }, + "properties": [ + { + "id": "unit", + "value": "bytes" + }, + { + "id": "displayName", + "value": "Data read bytes" + }, + { + "id": "color", + "value": { + "fixedColor": "super-light-blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "DataWriteBytes" + }, + "properties": [ + { + "id": "unit", + "value": "bytes" + }, + { + "id": "displayName", + "value": "Data write bytes" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "DataReadLatency" + }, + "properties": [ + { + "id": "unit", + "value": "ms" + }, + { + "id": "displayName", + "value": "Data read latency" + }, + { + "id": "color", + "value": { + "fixedColor": "super-light-blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "DataWriteLatency" + }, + "properties": [ + { + "id": "unit", + "value": "ms" + }, + { + "id": "displayName", + "value": "Data write latency" + }, + { + "id": "color", + "value": { + "fixedColor": "orange", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 24, + "x": 0, + "y": 111 + }, + "id": 46, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics \n| where $__timeFilter()\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_database_io'\r\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), FileType = tostring(Tags.file_type), FileName = tostring(Tags.logical_filename)\r\n| where SqlInstance == '$SqlInstance' and Database == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE')\r\n| summarize (Start, StartValue) = arg_min(TimeGenerated, Val), (End, EndValue) = arg_max(TimeGenerated, Val) by Name, Database, SqlInstance, FileType, FileName\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\r\n| summarize\r\n DataReadBytes = sumif(Val, Name == 'read_bytes' and FileType == 'DATA'),\r\n DataWriteBytes = sumif(Val, Name == 'write_bytes' and FileType == 'DATA'),\r\n DataReadLatency = avgif(Val, Name == 'read_latency_ms' and FileType == 'DATA'),\r\n DataWriteLatency = avgif(Val, Name == 'write_latency_ms' and FileType == 'DATA'),\r\n LogReadBytes = sumif(Val, Name == 'read_bytes' and FileType == 'LOG'),\r\n LogWriteBytes = sumif(Val, Name == 'write_bytes' and FileType == 'LOG'),\r\n LogReadLatency = avgif(Val, Name == 'read_latency_ms' and FileType == 'LOG'),\r\n LogWriteLatency = avgif(Val, Name == 'write_latency_ms' and FileType == 'LOG')\r\n by SqlInstance, Database\n | project-reorder LogReadBytes, LogWriteBytes, LogReadLatency, LogWriteLatency, DataReadBytes, DataWriteBytes, DataReadLatency, DataWriteLatency, Database", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "aggregation": "", + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "", + "type": "stat" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 117 + }, + "id": 49, + "maxDataPoints": 24, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_database_io'\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), FileType = tostring(Tags.file_type)\n| extend Database = iff(isempty(Database), SqlInstance, Database)\n| where SqlInstance == '$SqlInstance' and Database == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and FileType == 'LOG' and Name == 'reads'\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), Database\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize [\"Sum\"]=sum(Val) by bin(TimeGenerated, $__interval), Database\n| order by TimeGenerated asc\n| project-away Database", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Log reads", + "type": "timeseries" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 117 + }, + "id": 52, + "maxDataPoints": 24, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_database_io'\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), FileType = tostring(Tags.file_type)\n| extend Database = iff(isempty(Database), SqlInstance, Database)\n| where SqlInstance == '$SqlInstance' and Database == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and FileType == 'LOG' and Name == 'writes'\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), Database\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize [\"Sum\"]=sum(Val) by bin(TimeGenerated, $__interval), Database\n| order by TimeGenerated asc\n| project-away Database", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Log writes", + "type": "timeseries" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 125 + }, + "id": 50, + "maxDataPoints": 24, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_database_io'\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), FileType = tostring(Tags.file_type)\n| extend Database = iff(isempty(Database), SqlInstance, Database)\n| where SqlInstance == '$SqlInstance' and Database == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and FileType == 'LOG' and Name == 'read_bytes'\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), Database\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize [\"Sum\"]=sum(Val) by bin(TimeGenerated, $__interval), Database\n| order by TimeGenerated asc\n| project-away Database", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Log read bytes", + "type": "timeseries" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 125 + }, + "id": 56, + "maxDataPoints": 24, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_database_io'\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), FileType = tostring(Tags.file_type)\n| extend Database = iff(isempty(Database), SqlInstance, Database)\n| where SqlInstance == '$SqlInstance' and Database == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and FileType == 'LOG' and Name == 'write_bytes'\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), Database\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize [\"Sum\"]=sum(Val) by bin(TimeGenerated, $__interval), Database\n| order by TimeGenerated asc\n| project-away Database", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Log writebytes", + "type": "timeseries" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 133 + }, + "id": 51, + "maxDataPoints": 24, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_database_io'\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), FileType = tostring(Tags.file_type)\n| extend Database = iff(isempty(Database), SqlInstance, Database)\n| where SqlInstance == '$SqlInstance' and Database == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and FileType == 'LOG' and Name == 'read_latency_ms'\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), Database\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize [\"Avg\"]=avg(Val) by bin(TimeGenerated, $__interval), Database\n| extend Avg=iff(isnan(Avg), toreal(0), Avg)\n| order by TimeGenerated asc\n| project-away Database", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Log read latency", + "type": "timeseries" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 133 + }, + "id": 61, + "maxDataPoints": 24, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_database_io'\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), FileType = tostring(Tags.file_type)\n| extend Database = iff(isempty(Database), SqlInstance, Database)\n| where SqlInstance == '$SqlInstance' and Database == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and FileType == 'LOG' and Name == 'write_latency_ms'\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), Database\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize [\"Avg\"]=avg(Val) by bin(TimeGenerated, $__interval), Database\n| extend Avg=iff(isnan(Avg), toreal(0), Avg)\n| order by TimeGenerated asc\n| project-away Database", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Log write latency", + "type": "timeseries" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 141 + }, + "id": 55, + "maxDataPoints": 40, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_database_io'\n| extend FileTypeFilter = iff(tostring(Tags.measurement_db_type) == 'AzureSQLDB', 'DATA', 'ROWS')\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), FileType = tostring(Tags.file_type)\n| extend Database = iff(isempty(Database), SqlInstance, Database)\n| where SqlInstance == '$SqlInstance' and Database == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and FileType == FileTypeFilter and Name == 'reads'\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), Database\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize [\"Sum\"]=sum(Val) by bin(TimeGenerated, $__interval), Database\n| order by TimeGenerated asc\n| project-away Database", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Data reads", + "type": "timeseries" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 141 + }, + "id": 58, + "maxDataPoints": 40, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_database_io'\n| extend FileTypeFilter = iff(tostring(Tags.measurement_db_type) == 'AzureSQLDB', 'DATA', 'ROWS')\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), FileType = tostring(Tags.file_type)\n| extend Database = iff(isempty(Database), SqlInstance, Database)\n| where SqlInstance == '$SqlInstance' and Database == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and FileType == FileTypeFilter and Name == 'writes'\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), Database\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize [\"Sum\"]=sum(Val) by bin(TimeGenerated, $__interval), Database\n| order by TimeGenerated asc\n| project-away Database", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Data writes", + "type": "timeseries" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 149 + }, + "id": 57, + "maxDataPoints": 24, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_database_io'\n| extend FileTypeFilter = iff(tostring(Tags.measurement_db_type) == 'AzureSQLDB', 'DATA', 'ROWS')\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), FileType = tostring(Tags.file_type)\n| extend Database = iff(isempty(Database), SqlInstance, Database)\n| where SqlInstance == '$SqlInstance' and Database == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and FileType == FileTypeFilter and Name == 'read_bytes'\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), Database\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize [\"Sum\"]=sum(Val) by bin(TimeGenerated, $__interval), Database\n| order by TimeGenerated asc\n| project-away Database", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Data read bytes", + "type": "timeseries" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 149 + }, + "id": 59, + "maxDataPoints": 24, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_database_io'\n| extend FileTypeFilter = iff(tostring(Tags.measurement_db_type) == 'AzureSQLDB', 'DATA', 'ROWS')\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), FileType = tostring(Tags.file_type)\n| extend Database = iff(isempty(Database), SqlInstance, Database)\n| where SqlInstance == '$SqlInstance' and Database == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and FileType == FileTypeFilter and Name == 'write_bytes'\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), Database\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize [\"Sum\"]=sum(Val) by bin(TimeGenerated, $__interval), Database\n| order by TimeGenerated asc\n| project-away Database", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Data write bytes", + "type": "timeseries" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 157 + }, + "id": 54, + "maxDataPoints": 24, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_database_io'\n| extend FileTypeFilter = iff(tostring(Tags.measurement_db_type) == 'AzureSQLDB', 'DATA', 'ROWS')\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), FileType = tostring(Tags.file_type)\n| extend Database = iff(isempty(Database), SqlInstance, Database)\n| where SqlInstance == '$SqlInstance' and Database == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and FileType == FileTypeFilter and Name == 'read_latency_ms'\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), Database\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize [\"Avg\"]=avg(Val) by bin(TimeGenerated, $__interval), Database\n| extend Avg=iff(isnan(Avg), toreal(0), Avg)\n| order by TimeGenerated asc\n| project-away Database", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Data read latency", + "type": "timeseries" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 157 + }, + "id": 60, + "maxDataPoints": 24, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "InsightsMetrics\n| where $__timeFilter(TimeGenerated)\n| extend Tags = todynamic(Tags)\r\n| where Namespace =~ 'sqlserver_database_io'\n| extend FileTypeFilter = iff(tostring(Tags.measurement_db_type) == 'AzureSQLDB', 'DATA', 'ROWS')\n| extend Database = tostring(Tags.database_name), SqlInstance = tostring(Tags.sql_instance), FileType = tostring(Tags.file_type)\n| extend Database = iff(isempty(Database), SqlInstance, Database)\n| where SqlInstance == '$SqlInstance' and Database == '$db' and Tags.replica_updateability == iff('$Replica' == 'secondary', 'READ_ONLY', 'READ_WRITE') and FileType == FileTypeFilter and Name == 'write_latency_ms'\n| summarize (StartTime, StartValue) = arg_min(TimeGenerated, Val), (EndTime, EndValue) = arg_max(TimeGenerated, Val) by bin(TimeGenerated, $__interval), Database\r\n| extend Val = iff(EndValue >= StartValue, EndValue - StartValue, real(null))\n| summarize [\"Avg\"]=avg(Val) by bin(TimeGenerated, $__interval), Database\n| extend Avg=iff(isnan(Avg), toreal(0), Avg)\n| order by TimeGenerated asc\n| project-away Database", + "resultFormat": "time_series", + "workspace": "$ws" + }, + "azureMonitor": { + "aggOptions": [], + "dimensionFilter": "*", + "dimensionFilters": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "select", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "auto", + "timeGrains": [], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Log Analytics", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Data write latency", + "type": "timeseries" + } + ], + "refresh": false, + "schemaVersion": 27, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "current": {}, + "description": null, + "error": null, + "hide": 0, + "includeAll": false, + "label": "Data Source", + "multi": false, + "name": "ds", + "options": [], + "query": "grafana-azure-monitor-datasource", + "queryValue": "", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "type": "datasource" + }, + { + "allValue": null, + "current": {}, + "datasource": "$ds", + "definition": "subscriptions()", + "description": null, + "error": null, + "hide": 0, + "includeAll": false, + "label": "Subscription", + "multi": false, + "name": "sub", + "options": [], + "query": "subscriptions()", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": {}, + "datasource": "$ds", + "definition": "Workspaces($sub)", + "description": null, + "error": null, + "hide": 0, + "includeAll": false, + "label": "Workspace", + "multi": false, + "name": "ws", + "options": [], + "query": "Workspaces($sub)", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": {}, + "datasource": "$ds", + "definition": "workspace(\"$ws\").InsightsMetrics | where Namespace contains 'sqlserver_server_properties' and Name == 'engine_edition'\n| extend Tags = todynamic(Tags)\n| extend Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\n| where Val == 5 | summarize by Instance\n| project value = Instance, label = Instance, selected = true", + "description": null, + "error": null, + "hide": 0, + "includeAll": false, + "label": "Server", + "multi": false, + "name": "SqlInstance", + "options": [], + "query": "workspace(\"$ws\").InsightsMetrics | where Namespace contains 'sqlserver_server_properties' and Name == 'engine_edition'\n| extend Tags = todynamic(Tags)\n| extend Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\n| where Val == 5 | summarize by Instance\n| project value = Instance, label = Instance, selected = true", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": {}, + "datasource": "$ds", + "definition": "workspace(\"$ws\").InsightsMetrics\n| where Namespace contains 'sqlserver_server_properties' and Name == 'uptime'\n| extend Tags = todynamic(Tags)\n| extend Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance), Replica = tostring(iff(Tags.replica_updateability == 'READ_WRITE', 'primary', 'secondary'))\n| extend DatabaseKey = iff(Database == Instance, Database, strcat(Database, ' on ', Instance))\n| where Instance =~ '$SqlInstance'\n| distinct Database", + "description": null, + "error": null, + "hide": 0, + "includeAll": false, + "label": "Database", + "multi": false, + "name": "db", + "options": [], + "query": "workspace(\"$ws\").InsightsMetrics\n| where Namespace contains 'sqlserver_server_properties' and Name == 'uptime'\n| extend Tags = todynamic(Tags)\n| extend Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance), Replica = tostring(iff(Tags.replica_updateability == 'READ_WRITE', 'primary', 'secondary'))\n| extend DatabaseKey = iff(Database == Instance, Database, strcat(Database, ' on ', Instance))\n| where Instance =~ '$SqlInstance'\n| distinct Database", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": {}, + "datasource": "$ds", + "definition": "workspace(\"$ws\").InsightsMetrics\n| extend Tags = todynamic(Tags)\n| extend Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\n| extend DatabaseKey = iff(Database == Instance, Database, strcat(Database, ' on ', Instance))\n| where Instance == '$SqlInstance'\n| where Namespace =~ 'sqlserver_azure_db_resource_stats'\n| summarize by value = tostring(iff(Tags.replica_updateability == 'READ_WRITE', 'primary', 'secondary'))\n| project value, label = value, selected = true\n| order by label asc", + "description": null, + "error": null, + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "Replica", + "options": [], + "query": "workspace(\"$ws\").InsightsMetrics\n| extend Tags = todynamic(Tags)\n| extend Database = tostring(Tags.database_name), Instance = tostring(Tags.sql_instance)\n| extend DatabaseKey = iff(Database == Instance, Database, strcat(Database, ' on ', Instance))\n| where Instance == '$SqlInstance'\n| where Namespace =~ 'sqlserver_azure_db_resource_stats'\n| summarize by value = tostring(iff(Tags.replica_updateability == 'READ_WRITE', 'primary', 'secondary'))\n| project value, label = value, selected = true\n| order by label asc", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-4h", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "Azure SQL Database", + "uid": "cIld6iqMk", + "version": 69 +} diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/dashboards/storage.json b/public/app/plugins/datasource/grafana-azure-monitor-datasource/dashboards/storage.json index 74d9f501b37..3f3e7fe2c89 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/dashboards/storage.json +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/dashboards/storage.json @@ -1,7038 +1,6434 @@ { - "__requires": [ - { - "type": "panel", - "id": "gauge", - "name": "Gauge", - "version": "" - }, - { - "type": "grafana", - "id": "grafana", - "name": "Grafana", - "version": "7.4.3" - }, - { - "type": "datasource", - "id": "grafana-azure-monitor-datasource", - "name": "Azure Monitor", - "version": "0.3.0" - }, - { - "type": "panel", - "id": "graph", - "name": "Graph", - "version": "" - }, - { - "type": "panel", - "id": "stat", - "name": "Stat", - "version": "" - }, - { - "type": "panel", - "id": "table", - "name": "Table", - "version": "" - }, - { - "type": "panel", - "id": "timeseries", - "name": "Time series", - "version": "" - } - ], - "annotations": { - "list": [ - ] + "__requires": [ + { + "type": "panel", + "id": "gauge", + "name": "Gauge", + "version": "" }, - "editable": true, - "gnetId": null, - "graphTooltip": 0, - "id": null, - "iteration": 1620257813794, - "links": [], - "panels": [ - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": {}, - "mappings": [], - "thresholds": { - "mode": "percentage", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "green", - "value": 100 - } - ] - } + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "7.4.3" + }, + { + "type": "datasource", + "id": "grafana-azure-monitor-datasource", + "name": "Azure Monitor", + "version": "0.3.0" + }, + { + "type": "panel", + "id": "graph", + "name": "Graph", + "version": "" + }, + { + "type": "panel", + "id": "stat", + "name": "Stat", + "version": "" + }, + { + "type": "panel", + "id": "table", + "name": "Table", + "version": "" + }, + { + "type": "panel", + "id": "timeseries", + "name": "Time series", + "version": "" + } + ], + "annotations": { + "list": [] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "id": null, + "iteration": 1620257813794, + "links": [], + "panels": [ + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 3, - "x": 0, - "y": 1 - }, - "id": 7, - "options": { - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "/^Availability$/", - "values": false - }, - "showThresholdLabels": false, - "showThresholdMarkers": false, - "text": {} - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Minimum", - "Maximum" - ], - "aggregation": "Average", - "alias": "Availability", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns", - "metricName": "Availability", - "metricNamespace": "Microsoft.Storage/storageAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Availability", - "transparent": true, - "type": "gauge" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "fixedColor": "blue", - "mode": "fixed" - }, - "custom": {}, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 3, - "x": 3, - "y": 1 - }, - "id": 6, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "sum" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "value_and_name" - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Total" - ], - "aggregation": "Total", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Response type", - "value": "ResponseType" - }, - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns", - "metricName": "Transactions", - "metricNamespace": "Microsoft.Storage/storageAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "PT5M", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "title": "", - "transparent": true, - "type": "stat" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "fixedColor": "purple", - "mode": "fixed" - }, - "custom": {}, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 3, - "x": 6, - "y": 1 - }, - "id": 8, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "value_and_name" - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Minimum", - "Maximum" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns", - "metricName": "SuccessE2ELatency", - "metricNamespace": "Microsoft.Storage/storageAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "title": "", - "transparent": true, - "type": "stat" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "fixedColor": "purple", - "mode": "fixed" - }, - "custom": {}, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 3, - "x": 9, - "y": 1 - }, - "id": 9, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "value_and_name" - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Minimum", - "Maximum" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns", - "metricName": "SuccessServerLatency", - "metricNamespace": "Microsoft.Storage/storageAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "title": "", - "transparent": true, - "type": "stat" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "fixedColor": "blue", - "mode": "fixed" - }, - "custom": {}, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 3, - "x": 12, - "y": 1 - }, - "id": 10, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "sum" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "value_and_name" - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Total", - "Average", - "Minimum", - "Maximum" - ], - "aggregation": "Total", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns", - "metricName": "Ingress", - "metricNamespace": "Microsoft.Storage/storageAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "title": "", - "transparent": true, - "type": "stat" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "fixedColor": "blue", - "mode": "fixed" - }, - "custom": {}, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 3, - "x": 15, - "y": 1 - }, - "id": 11, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "sum" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "value_and_name" - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Total", - "Average", - "Minimum", - "Maximum" - ], - "aggregation": "Total", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns", - "metricName": "Egress", - "metricNamespace": "Microsoft.Storage/storageAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "title": "", - "transparent": true, - "type": "stat" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": {}, - "custom": {}, - "thresholds": { - "mode": "absolute", - "steps": [] - }, - "unit": "short" - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 5 - }, - "hiddenSeries": false, - "id": 2, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null as zero", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Total" - ], - "aggregation": "Total", - "alias": "Table transactions", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Response type", - "value": "ResponseType" - }, - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns/tableServices", - "metricName": "Transactions", - "metricNamespace": "Microsoft.Storage/storageAccounts/tableServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Total" - ], - "aggregation": "Total", - "alias": "Blob transactions", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Response type", - "value": "ResponseType" - }, - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns/blobServices", - "metricName": "Transactions", - "metricNamespace": "Microsoft.Storage/storageAccounts/blobServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "B", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Total" - ], - "aggregation": "Total", - "alias": "File transactions", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Response type", - "value": "ResponseType" - }, - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - }, - { - "text": "File Share", - "value": "FileShare" - } - ], - "metricDefinition": "$ns/fileServices", - "metricName": "Transactions", - "metricNamespace": "Microsoft.Storage/storageAccounts/fileServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "C", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Total" - ], - "aggregation": "Total", - "alias": "Queue transactions", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Response type", - "value": "ResponseType" - }, - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns/queueServices", - "metricName": "Transactions", - "metricNamespace": "Microsoft.Storage/storageAccounts/queueServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "D", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Transactions by storage type", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "transformations": [], - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": {}, - "custom": {}, - "thresholds": { - "mode": "absolute", - "steps": [] - }, - "unit": "short" - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 9, - "w": 12, - "x": 12, - "y": 5 - }, - "hiddenSeries": false, - "id": 14, - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": false, - "show": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Total" - ], - "aggregation": "Total", - "alias": "", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "ApiName", - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "Response type", - "value": "ResponseType" - }, - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns", - "metricName": "Transactions", - "metricNamespace": "Microsoft.Storage/storageAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Transactions by API Name", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "transformations": [], - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false + "custom": {}, + "mappings": [], + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "red", + "value": null }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 14 - }, - "id": 13, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltipOptions": { - "mode": "multi" + { + "color": "green", + "value": 100 + } + ] } }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average" - ], - "aggregation": "", - "alias": "Table capacity", - "allowedTimeGrainsMs": [ - 3600000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [], - "metricDefinition": "select", - "metricName": "select", - "metricNamespace": "Microsoft.Storage/storageAccounts/tableServices", - "resourceGroup": "select", - "resourceName": "select", - "timeGrain": "", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 hour", - "value": "PT1H" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average" - ], - "aggregation": "Average", - "alias": "Blob capacity", - "allowedTimeGrainsMs": [ - 3600000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Blob type", - "value": "BlobType" - }, - { - "text": "Blob tier", - "value": "Tier" - } - ], - "metricDefinition": "$ns/blobServices", - "metricName": "BlobCapacity", - "metricNamespace": "Microsoft.Storage/storageAccounts/blobServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 hour", - "value": "PT1H" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "B", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average" - ], - "aggregation": "Average", - "alias": "File capacity", - "allowedTimeGrainsMs": [ - 3600000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "File Share", - "value": "FileShare" - } - ], - "metricDefinition": "$ns/fileServices", - "metricName": "FileCapacity", - "metricNamespace": "Microsoft.Storage/storageAccounts/fileServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 hour", - "value": "PT1H" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "C", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average" - ], - "aggregation": "Average", - "alias": "Queue capacity", - "allowedTimeGrainsMs": [ - 3600000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [], - "metricDefinition": "$ns/queueServices", - "metricName": "QueueCapacity", - "metricNamespace": "Microsoft.Storage/storageAccounts/queueServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 hour", - "value": "PT1H" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "D", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Capacity by storage type", - "transformations": [], - "type": "timeseries" + "overrides": [] }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 12, - "x": 12, - "y": 14 - }, - "id": 12, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Minimum", - "Maximum" - ], - "aggregation": "Average", - "alias": "Table availability", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns/tableServices", - "metricName": "Availability", - "metricNamespace": "Microsoft.Storage/storageAccounts/tableServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Minimum", - "Maximum" - ], - "aggregation": "Average", - "alias": "Blob availability", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns/blobServices", - "metricName": "Availability", - "metricNamespace": "Microsoft.Storage/storageAccounts/blobServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "B", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Minimum", - "Maximum" - ], - "aggregation": "Average", - "alias": "File availability", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - }, - { - "text": "File Share", - "value": "FileShare" - } - ], - "metricDefinition": "$ns/fileServices", - "metricName": "Availability", - "metricNamespace": "Microsoft.Storage/storageAccounts/fileServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "C", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Minimum", - "Maximum" - ], - "aggregation": "Average", - "alias": "Queue availability", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns/queueServices", - "metricName": "Availability", - "metricNamespace": "Microsoft.Storage/storageAccounts/queueServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "D", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Availability by storage type", - "transformations": [], - "type": "timeseries" + "gridPos": { + "h": 4, + "w": 3, + "x": 0, + "y": 1 }, - { - "collapsed": false, - "datasource": "$ds", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 23 - }, - "id": 52, - "panels": [], - "title": "Failures", - "type": "row" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": {}, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Transactions ClientOtherError" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "red", - "mode": "fixed" - } - }, - { - "id": "displayName", - "value": "ClientOtherError" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Transactions Success" - }, - "properties": [ - { - "id": "displayName", - "value": "Success" - } - ] - } - ] - }, - "gridPos": { - "h": 6, - "w": 6, - "x": 0, - "y": 24 - }, - "id": 16, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "sum" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Total" - ], - "aggregation": "Total", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "ResponseType", - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "Response type", - "value": "ResponseType" - }, - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns", - "metricName": "Transactions", - "metricNamespace": "Microsoft.Storage/storageAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "", - "type": "stat" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "fixedColor": "red", - "mode": "fixed" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - } - ] - }, - "unit": "short" - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Transactions Success" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "green", - "mode": "fixed" - } - } - ] - } - ] - }, - "gridPos": { - "h": 6, - "w": 18, - "x": 6, - "y": 24 - }, - "id": 18, - "options": { - "graph": {}, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Total" - ], - "aggregation": "Total", - "alias": "", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "ResponseType", - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "Response type", - "value": "ResponseType" - }, - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns", - "metricName": "Transactions", - "metricNamespace": "Microsoft.Storage/storageAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "", - "type": "timeseries" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "align": null, - "filterable": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "blue", - "value": null - } - ] - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Total" - }, - "properties": [ - { - "id": "custom.displayMode", - "value": "basic" - } - ] - } - ] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 30 - }, - "id": 20, - "options": { - "showHeader": false - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Total" - ], - "aggregation": "Total", - "alias": "", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "ApiName", - "filter": "", - "operator": "eq" - }, - { - "dimension": "ResponseType", - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "Response type", - "value": "ResponseType" - }, - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns/blobServices", - "metricName": "Transactions", - "metricNamespace": "Microsoft.Storage/storageAccounts/blobServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "title": "Blob Services", - "transformations": [ - { - "id": "reduce", - "options": { - "reducers": [ - "sum" - ] - } - } - ], - "type": "table" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "align": null, - "filterable": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "blue", - "value": null - } - ] - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Total" - }, - "properties": [ - { - "id": "custom.displayMode", - "value": "basic" - } - ] - } - ] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 30 - }, - "id": 22, - "options": { - "showHeader": false - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Total" - ], - "aggregation": "Total", - "alias": "", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "ApiName", - "filter": "", - "operator": "eq" - }, - { - "dimension": "ResponseType", - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "Response type", - "value": "ResponseType" - }, - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - }, - { - "text": "File Share", - "value": "FileShare" - } - ], - "metricDefinition": "$ns/fileServices", - "metricName": "Transactions", - "metricNamespace": "Microsoft.Storage/storageAccounts/fileServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "title": "File Services", - "transformations": [ - { - "id": "reduce", - "options": { - "reducers": [ - "sum" - ] - } - } - ], - "type": "table" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "align": null, - "filterable": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "blue", - "value": null - } - ] - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Total" - }, - "properties": [ - { - "id": "custom.displayMode", - "value": "basic" - } - ] - } - ] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 38 - }, - "id": 24, - "options": { - "showHeader": false - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Total" - ], - "aggregation": "Total", - "alias": "", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "ApiName", - "filter": "", - "operator": "eq" - }, - { - "dimension": "ResponseType", - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "Response type", - "value": "ResponseType" - }, - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns/tableServices", - "metricName": "Transactions", - "metricNamespace": "Microsoft.Storage/storageAccounts/tableServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "title": "Table Services", - "transformations": [ - { - "id": "reduce", - "options": { - "reducers": [ - "sum" - ] - } - } - ], - "type": "table" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "align": null, - "filterable": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "blue", - "value": null - } - ] - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Total" - }, - "properties": [ - { - "id": "custom.displayMode", - "value": "basic" - } - ] - } - ] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 38 - }, - "id": 26, - "options": { - "showHeader": false - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Total" - ], - "aggregation": "Total", - "alias": "", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "ApiName", - "filter": "", - "operator": "eq" - }, - { - "dimension": "ResponseType", - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "Response type", - "value": "ResponseType" - }, - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns/queueServices", - "metricName": "Transactions", - "metricNamespace": "Microsoft.Storage/storageAccounts/queueServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - } - ], - "title": "Queue Services", - "transformations": [ - { - "id": "reduce", - "options": { - "reducers": [ - "sum" - ] - } - } - ], - "type": "table" - }, - { - "collapsed": false, - "datasource": "$ds", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 46 - }, - "id": 50, - "panels": [], - "title": "Performance", - "type": "row" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": {}, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "dark-green", - "value": null - } - ] - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Success Server Latency" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "blue", - "mode": "fixed" - } - } - ] - } - ] - }, - "gridPos": { - "h": 6, - "w": 6, - "x": 0, - "y": 47 - }, - "id": 28, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "sum" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Minimum", - "Maximum" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns", - "metricName": "SuccessE2ELatency", - "metricNamespace": "Microsoft.Storage/storageAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Minimum", - "Maximum" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns", - "metricName": "SuccessServerLatency", - "metricNamespace": "Microsoft.Storage/storageAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "B", - "subscription": "$sub" - } - ], - "title": "", - "type": "stat" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "dark-green", - "value": null - } - ] - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Success Server Latency" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "blue", - "mode": "fixed" - } - } - ] - } - ] - }, - "gridPos": { - "h": 6, - "w": 18, - "x": 6, - "y": 47 - }, - "id": 30, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Minimum", - "Maximum" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns", - "metricName": "SuccessE2ELatency", - "metricNamespace": "Microsoft.Storage/storageAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Minimum", - "Maximum" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns", - "metricName": "SuccessServerLatency", - "metricNamespace": "Microsoft.Storage/storageAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "B", - "subscription": "$sub" - } - ], - "title": "", - "type": "timeseries" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "align": null, - "filterable": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "blue", - "value": null - } - ] - }, - "unit": "ms" - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Mean" - }, - "properties": [ - { - "id": "custom.displayMode", - "value": "lcd-gauge" - }, - { - "id": "color", - "value": { - "mode": "continuous-GrYlRd" - } - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Max" - }, - "properties": [ - { - "id": "custom.displayMode", - "value": "gradient-gauge" - }, - { - "id": "color", - "value": { - "fixedColor": "red", - "mode": "continuous-GrYlRd" - } - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Min" - }, - "properties": [ - { - "id": "custom.displayMode", - "value": "gradient-gauge" - }, - { - "id": "color", - "value": { - "fixedColor": "green", - "mode": "continuous-GrYlRd" - } - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Field" - }, - "properties": [ - { - "id": "displayName", - "value": "Latency" - } - ] - } - ] - }, - "gridPos": { - "h": 11, - "w": 24, - "x": 0, - "y": 53 - }, - "id": 32, - "options": { - "showHeader": true - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Minimum", - "Maximum" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "ApiName", - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns", - "metricName": "SuccessE2ELatency", - "metricNamespace": "Microsoft.Storage/storageAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Minimum", - "Maximum" - ], - "aggregation": "Average", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "ApiName", - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns", - "metricName": "SuccessServerLatency", - "metricNamespace": "Microsoft.Storage/storageAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "B", - "subscription": "$sub" - } - ], - "title": "", - "transformations": [ - { - "id": "reduce", - "options": { - "includeTimeField": false, - "mode": "seriesToRows", - "reducers": [ - "mean", - "max", - "min" - ] - } - }, - { - "id": "sortBy", - "options": { - "fields": {}, - "sort": [ - { - "desc": true, - "field": "Mean" - } - ] - } - } - ], - "type": "table" - }, - { - "collapsed": false, - "datasource": "$ds", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 64 - }, - "id": 48, - "panels": [], - "title": "Availability", - "type": "row" - }, - { - "datasource": "$ds", - "description": "The data comes from Storage metrics. It measures the availability of requests on Storage accounts.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": {}, - "mappings": [], - "thresholds": { - "mode": "percentage", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "green", - "value": 100 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 24, - "x": 0, - "y": 65 - }, - "id": 34, - "options": { - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showThresholdLabels": false, - "showThresholdMarkers": false, - "text": {} - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Minimum", - "Maximum" - ], - "aggregation": "Average", - "alias": "Account Availability", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns", - "metricName": "Availability", - "metricNamespace": "Microsoft.Storage/storageAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Minimum", - "Maximum" - ], - "aggregation": "Average", - "alias": "Blob Availability", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns/blobServices", - "metricName": "Availability", - "metricNamespace": "Microsoft.Storage/storageAccounts/blobServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "B", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Minimum", - "Maximum" - ], - "aggregation": "Average", - "alias": "Table Availability", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns/tableServices", - "metricName": "Availability", - "metricNamespace": "Microsoft.Storage/storageAccounts/tableServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "C", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Minimum", - "Maximum" - ], - "aggregation": "Average", - "alias": "File Availability", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - }, - { - "text": "File Share", - "value": "FileShare" - } - ], - "metricDefinition": "$ns/fileServices", - "metricName": "Availability", - "metricNamespace": "Microsoft.Storage/storageAccounts/fileServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "D", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Minimum", - "Maximum" - ], - "aggregation": "Average", - "alias": "Queue Availability", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns/queueServices", - "metricName": "Availability", - "metricNamespace": "Microsoft.Storage/storageAccounts/queueServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "E", - "subscription": "$sub" - } - ], - "title": "", - "type": "gauge" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "align": null, - "filterable": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [] - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Mean" - }, - "properties": [ - { - "id": "unit", - "value": "percent" - }, - { - "id": "custom.displayMode", - "value": "color-background" - }, - { - "id": "color", - "value": { - "mode": "continuous-RdYlGr" - } - } - ] - } - ] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 73 - }, - "id": 36, - "maxDataPoints": 1, - "options": { - "showHeader": false - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Minimum", - "Maximum" - ], - "aggregation": "Average", - "alias": "", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "ApiName", - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns/blobServices", - "metricName": "Availability", - "metricNamespace": "Microsoft.Storage/storageAccounts/blobServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Minimum", - "Maximum" - ], - "aggregation": "Average", - "alias": "", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "ApiName", - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns/tableServices", - "metricName": "Availability", - "metricNamespace": "Microsoft.Storage/storageAccounts/tableServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "B", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Minimum", - "Maximum" - ], - "aggregation": "Average", - "alias": "", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "ApiName", - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - }, - { - "text": "File Share", - "value": "FileShare" - } - ], - "metricDefinition": "$ns/fileServices", - "metricName": "Availability", - "metricNamespace": "Microsoft.Storage/storageAccounts/fileServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "C", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Minimum", - "Maximum" - ], - "aggregation": "Average", - "alias": "", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [ - { - "dimension": "ApiName", - "filter": "", - "operator": "eq" - } - ], - "dimensions": [ - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns/queueServices", - "metricName": "Availability", - "metricNamespace": "Microsoft.Storage/storageAccounts/queueServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "D", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Availability by API name", - "transformations": [ - { - "id": "reduce", - "options": { - "includeTimeField": false, - "mode": "seriesToRows", - "reducers": [ - "mean" - ] - } - } - ], - "type": "table" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": {}, - "custom": {}, - "thresholds": { - "mode": "absolute", - "steps": [] - }, - "unit": "percent" - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 73 - }, - "hiddenSeries": false, - "id": 38, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Minimum", - "Maximum" - ], - "aggregation": "Average", - "alias": "Blob Availability", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns/blobServices", - "metricName": "Availability", - "metricNamespace": "Microsoft.Storage/storageAccounts/blobServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Minimum", - "Maximum" - ], - "aggregation": "Average", - "alias": "Table Availability", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns/tableServices", - "metricName": "Availability", - "metricNamespace": "Microsoft.Storage/storageAccounts/tableServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "B", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Minimum", - "Maximum" - ], - "aggregation": "Average", - "alias": "File Availability", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - }, - { - "text": "File Share", - "value": "FileShare" - } - ], - "metricDefinition": "$ns/fileServices", - "metricName": "Availability", - "metricNamespace": "Microsoft.Storage/storageAccounts/fileServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "C", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average", - "Minimum", - "Maximum" - ], - "aggregation": "Average", - "alias": "Queue Availability", - "allowedTimeGrainsMs": [ - 60000, - 300000, - 900000, - 1800000, - 3600000, - 21600000, - 43200000, - 86400000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Geo type", - "value": "GeoType" - }, - { - "text": "API name", - "value": "ApiName" - }, - { - "text": "Authentication", - "value": "Authentication" - } - ], - "metricDefinition": "$ns/queueServices", - "metricName": "Availability", - "metricNamespace": "Microsoft.Storage/storageAccounts/queueServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 minute", - "value": "PT1M" - }, - { - "text": "5 minutes", - "value": "PT5M" - }, - { - "text": "15 minutes", - "value": "PT15M" - }, - { - "text": "30 minutes", - "value": "PT30M" - }, - { - "text": "1 hour", - "value": "PT1H" - }, - { - "text": "6 hours", - "value": "PT6H" - }, - { - "text": "12 hours", - "value": "PT12H" - }, - { - "text": "1 day", - "value": "P1D" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "D", - "subscription": "$sub" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Availability Trend", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "transformations": [], - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "percent", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "collapsed": false, - "datasource": "$ds", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 81 - }, - "id": 46, - "panels": [], - "title": "Capacity", - "type": "row" - }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": {}, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "dark-blue", - "value": null - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 24, - "x": 0, - "y": 82 - }, - "id": 40, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average" - ], - "aggregation": "Average", - "alias": "Account Capacity", - "allowedTimeGrainsMs": [ - 3600000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [], - "metricDefinition": "$ns", - "metricName": "UsedCapacity", - "metricNamespace": "Microsoft.Storage/storageAccounts", - "resourceGroup": "$rg", - "resourceName": "$resource", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 hour", - "value": "PT1H" - } - ], - "top": "10" - }, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "A", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average" - ], - "aggregation": "Average", - "alias": "Blob Capacity", - "allowedTimeGrainsMs": [ - 3600000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Blob type", - "value": "BlobType" - }, - { - "text": "Blob tier", - "value": "Tier" - } - ], - "metricDefinition": "$ns/blobServices", - "metricName": "BlobCapacity", - "metricNamespace": "Microsoft.Storage/storageAccounts/blobServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 hour", - "value": "PT1H" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "B", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average" - ], - "aggregation": "Average", - "alias": "Table Capacity", - "allowedTimeGrainsMs": [ - 3600000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [], - "metricDefinition": "$ns/tableServices", - "metricName": "TableCapacity", - "metricNamespace": "Microsoft.Storage/storageAccounts/tableServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 hour", - "value": "PT1H" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "C", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average" - ], - "aggregation": "Average", - "alias": "File Capacity", - "allowedTimeGrainsMs": [ - 3600000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "File Share", - "value": "FileShare" - } - ], - "metricDefinition": "$ns/fileServices", - "metricName": "FileCapacity", - "metricNamespace": "Microsoft.Storage/storageAccounts/fileServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 hour", - "value": "PT1H" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "D", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average" - ], - "aggregation": "Average", - "alias": "Queue Capacity", - "allowedTimeGrainsMs": [ - 3600000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [], - "metricDefinition": "$ns/queueServices", - "metricName": "QueueCapacity", - "metricNamespace": "Microsoft.Storage/storageAccounts/queueServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 hour", - "value": "PT1H" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "E", - "subscription": "$sub" - } - ], - "title": "", - "type": "stat" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": {}, - "custom": {}, - "thresholds": { - "mode": "absolute", - "steps": [] - }, - "unit": "decbytes" - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 90 - }, - "hiddenSeries": false, - "id": 42, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, + "id": 7, + "options": { + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "/^Availability$/", "values": false }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.4.3", - "pointradius": 1, - "points": true, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average" - ], - "aggregation": "Average", - "alias": "Blob Capacity", - "allowedTimeGrainsMs": [ - 3600000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Blob type", - "value": "BlobType" - }, - { - "text": "Blob tier", - "value": "Tier" - } - ], - "metricDefinition": "$ns/blobServices", - "metricName": "BlobCapacity", - "metricNamespace": "Microsoft.Storage/storageAccounts/blobServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 hour", - "value": "PT1H" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "B", - "subscription": "$sub" + "showThresholdLabels": false, + "showThresholdMarkers": false, + "text": {} + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average" - ], - "aggregation": "Average", - "alias": "Table Capacity", - "allowedTimeGrainsMs": [ - 3600000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [], - "metricDefinition": "$ns/tableServices", - "metricName": "TableCapacity", - "metricNamespace": "Microsoft.Storage/storageAccounts/tableServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 hour", - "value": "PT1H" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "C", - "subscription": "$sub" + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average" - ], - "aggregation": "Average", - "alias": "File Capacity", - "allowedTimeGrainsMs": [ - 3600000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "File Share", - "value": "FileShare" - } - ], - "metricDefinition": "$ns/fileServices", - "metricName": "FileCapacity", - "metricNamespace": "Microsoft.Storage/storageAccounts/fileServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 hour", - "value": "PT1H" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "D", - "subscription": "$sub" + "azureMonitor": { + "aggOptions": ["Average", "Minimum", "Maximum"], + "aggregation": "Average", + "alias": "Availability", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns", + "metricName": "Availability", + "metricNamespace": "Microsoft.Storage/storageAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average" - ], - "aggregation": "Average", - "alias": "Queue Capacity", - "allowedTimeGrainsMs": [ - 3600000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [], - "metricDefinition": "$ns/queueServices", - "metricName": "QueueCapacity", - "metricNamespace": "Microsoft.Storage/storageAccounts/queueServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 hour", - "value": "PT1H" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "E", - "subscription": "$sub" + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Availability", + "transparent": true, + "type": "gauge" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "custom": {}, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Storage capacity", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 3, + "y": 1 + }, + "id": 6, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["sum"], + "fields": "", + "values": false }, - "yaxes": [ - { - "format": "decbytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true + "text": {}, + "textMode": "value_and_name" + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Total"], + "aggregation": "Total", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Response type", + "value": "ResponseType" + }, + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns", + "metricName": "Transactions", + "metricNamespace": "Microsoft.Storage/storageAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "PT5M", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "", + "transparent": true, + "type": "stat" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "purple", + "mode": "fixed" + }, + "custom": {}, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] } - ], - "yaxis": { - "align": false, - "alignLevel": null + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 6, + "y": 1 + }, + "id": 8, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["mean"], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "value_and_name" + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average", "Minimum", "Maximum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns", + "metricName": "SuccessE2ELatency", + "metricNamespace": "Microsoft.Storage/storageAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "", + "transparent": true, + "type": "stat" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "purple", + "mode": "fixed" + }, + "custom": {}, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 9, + "y": 1 + }, + "id": 9, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["mean"], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "value_and_name" + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average", "Minimum", "Maximum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns", + "metricName": "SuccessServerLatency", + "metricNamespace": "Microsoft.Storage/storageAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "", + "transparent": true, + "type": "stat" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "custom": {}, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 12, + "y": 1 + }, + "id": 10, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["sum"], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "value_and_name" + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Total", "Average", "Minimum", "Maximum"], + "aggregation": "Total", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns", + "metricName": "Ingress", + "metricNamespace": "Microsoft.Storage/storageAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "", + "transparent": true, + "type": "stat" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "custom": {}, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 15, + "y": 1 + }, + "id": 11, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["sum"], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "value_and_name" + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Total", "Average", "Minimum", "Maximum"], + "aggregation": "Total", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns", + "metricName": "Egress", + "metricNamespace": "Microsoft.Storage/storageAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "", + "transparent": true, + "type": "stat" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": {}, + "custom": {}, + "thresholds": { + "mode": "absolute", + "steps": [] + }, + "unit": "short" + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 5 + }, + "hiddenSeries": false, + "id": 2, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": true, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null as zero", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Total"], + "aggregation": "Total", + "alias": "Table transactions", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Response type", + "value": "ResponseType" + }, + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns/tableServices", + "metricName": "Transactions", + "metricNamespace": "Microsoft.Storage/storageAccounts/tableServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Total"], + "aggregation": "Total", + "alias": "Blob transactions", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Response type", + "value": "ResponseType" + }, + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns/blobServices", + "metricName": "Transactions", + "metricNamespace": "Microsoft.Storage/storageAccounts/blobServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "B", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Total"], + "aggregation": "Total", + "alias": "File transactions", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Response type", + "value": "ResponseType" + }, + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + }, + { + "text": "File Share", + "value": "FileShare" + } + ], + "metricDefinition": "$ns/fileServices", + "metricName": "Transactions", + "metricNamespace": "Microsoft.Storage/storageAccounts/fileServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "C", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Total"], + "aggregation": "Total", + "alias": "Queue transactions", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Response type", + "value": "ResponseType" + }, + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns/queueServices", + "metricName": "Transactions", + "metricNamespace": "Microsoft.Storage/storageAccounts/queueServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "D", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Transactions by storage type", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transformations": [], + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": {}, + "custom": {}, + "thresholds": { + "mode": "absolute", + "steps": [] + }, + "unit": "short" + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 5 + }, + "hiddenSeries": false, + "id": 14, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "total": true, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Total"], + "aggregation": "Total", + "alias": "", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "ApiName", + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "Response type", + "value": "ResponseType" + }, + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns", + "metricName": "Transactions", + "metricNamespace": "Microsoft.Storage/storageAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Transactions by API Name", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transformations": [], + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 14 + }, + "id": 13, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltipOptions": { + "mode": "multi" } }, - { - "datasource": "$ds", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "graph": false, - "legend": false, - "tooltip": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 4, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "always", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 90 - }, - "id": 44, - "options": { - "graph": {}, - "legend": { - "calcs": [ - "mean" + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average"], + "aggregation": "", + "alias": "Table capacity", + "allowedTimeGrainsMs": [3600000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "select", + "metricName": "select", + "metricNamespace": "Microsoft.Storage/storageAccounts/tableServices", + "resourceGroup": "select", + "resourceName": "select", + "timeGrain": "", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 hour", + "value": "PT1H" + } ], - "displayMode": "list", - "placement": "bottom" + "top": "10" }, - "tooltipOptions": { - "mode": "single" - } - }, - "pluginVersion": "7.4.3", - "targets": [ - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average" - ], - "aggregation": "Average", - "alias": "Blob Count", - "allowedTimeGrainsMs": [ - 3600000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "Blob type", - "value": "BlobType" - }, - { - "text": "Blob tier", - "value": "Tier" - } - ], - "metricDefinition": "$ns/blobServices", - "metricName": "BlobCount", - "metricNamespace": "Microsoft.Storage/storageAccounts/blobServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 hour", - "value": "PT1H" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "B", - "subscription": "$sub" + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average" - ], - "aggregation": "Average", - "alias": "Table Count", - "allowedTimeGrainsMs": [ - 3600000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [], - "metricDefinition": "$ns/tableServices", - "metricName": "TableCount", - "metricNamespace": "Microsoft.Storage/storageAccounts/tableServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 hour", - "value": "PT1H" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "C", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average" - ], - "aggregation": "Average", - "alias": "File Count", - "allowedTimeGrainsMs": [ - 3600000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [ - { - "text": "File Share", - "value": "FileShare" - } - ], - "metricDefinition": "$ns/fileServices", - "metricName": "FileCount", - "metricNamespace": "Microsoft.Storage/storageAccounts/fileServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 hour", - "value": "PT1H" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "D", - "subscription": "$sub" - }, - { - "appInsights": { - "dimension": [], - "metricName": "select", - "timeGrain": "auto" - }, - "azureLogAnalytics": { - "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", - "resultFormat": "time_series", - "workspace": "00000000-0000-0000-0000-000000000000" - }, - "azureMonitor": { - "aggOptions": [ - "Average" - ], - "aggregation": "Average", - "alias": "Queue Count", - "allowedTimeGrainsMs": [ - 3600000 - ], - "dimensionFilter": "*", - "dimensionFilters": [], - "dimensions": [], - "metricDefinition": "$ns/queueServices", - "metricName": "QueueCount", - "metricNamespace": "Microsoft.Storage/storageAccounts/queueServices", - "resourceGroup": "$rg", - "resourceName": "$resource/default", - "timeGrain": "auto", - "timeGrains": [ - { - "text": "auto", - "value": "auto" - }, - { - "text": "1 hour", - "value": "PT1H" - } - ], - "top": "10" - }, - "hide": false, - "insightsAnalytics": { - "query": "", - "resultFormat": "time_series" - }, - "queryType": "Azure Monitor", - "refId": "E", - "subscription": "$sub" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Storage count", - "type": "timeseries" - } - ], - "refresh": false, - "schemaVersion": 27, - "style": "dark", - "tags": [], - "templating": { - "list": [ - { - "current": { - }, - "description": null, - "error": null, - "hide": 0, - "includeAll": false, - "label": "Data Source", - "multi": false, - "name": "ds", - "options": [], - "query": "grafana-azure-monitor-datasource", - "queryValue": "", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "type": "datasource" + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" }, { - "allValue": null, - "current": {}, - "datasource": "$ds", - "definition": "subscriptions()", - "description": null, - "error": null, - "hide": 0, - "includeAll": false, - "label": "Subscription", - "multi": false, - "name": "sub", - "options": [], - "query": "subscriptions()", - "refresh": 2, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average"], + "aggregation": "Average", + "alias": "Blob capacity", + "allowedTimeGrainsMs": [3600000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Blob type", + "value": "BlobType" + }, + { + "text": "Blob tier", + "value": "Tier" + } + ], + "metricDefinition": "$ns/blobServices", + "metricName": "BlobCapacity", + "metricNamespace": "Microsoft.Storage/storageAccounts/blobServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 hour", + "value": "PT1H" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "B", + "subscription": "$sub" }, { - "description": null, - "error": null, - "hide": 2, - "label": "Namespace", - "name": "ns", - "query": "Microsoft.Storage/storageAccounts", - "skipUrlSync": false, - "type": "constant" + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average"], + "aggregation": "Average", + "alias": "File capacity", + "allowedTimeGrainsMs": [3600000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "File Share", + "value": "FileShare" + } + ], + "metricDefinition": "$ns/fileServices", + "metricName": "FileCapacity", + "metricNamespace": "Microsoft.Storage/storageAccounts/fileServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 hour", + "value": "PT1H" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "C", + "subscription": "$sub" }, { - "allValue": null, - "current": {}, - "datasource": "$ds", - "definition": "ResourceGroups($sub)", - "description": null, - "error": null, - "hide": 0, - "includeAll": false, - "label": "Resource Group", - "multi": false, - "name": "rg", - "options": [], - "query": "ResourceGroups($sub)", - "refresh": 2, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": null, - "current": {}, - "datasource": "$ds", - "definition": "ResourceNames($sub, $rg, $ns)", - "description": null, - "error": null, - "hide": 0, - "includeAll": false, - "label": "Resource", - "multi": false, - "name": "resource", - "options": [], - "query": "ResourceNames($sub, $rg, $ns)", - "refresh": 2, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average"], + "aggregation": "Average", + "alias": "Queue capacity", + "allowedTimeGrainsMs": [3600000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns/queueServices", + "metricName": "QueueCapacity", + "metricNamespace": "Microsoft.Storage/storageAccounts/queueServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 hour", + "value": "PT1H" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "D", + "subscription": "$sub" } - ] + ], + "timeFrom": null, + "timeShift": null, + "title": "Capacity by storage type", + "transformations": [], + "type": "timeseries" }, - "time": { - "from": "now-6h", - "to": "now" + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 14 + }, + "id": 12, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average", "Minimum", "Maximum"], + "aggregation": "Average", + "alias": "Table availability", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns/tableServices", + "metricName": "Availability", + "metricNamespace": "Microsoft.Storage/storageAccounts/tableServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average", "Minimum", "Maximum"], + "aggregation": "Average", + "alias": "Blob availability", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns/blobServices", + "metricName": "Availability", + "metricNamespace": "Microsoft.Storage/storageAccounts/blobServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "B", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average", "Minimum", "Maximum"], + "aggregation": "Average", + "alias": "File availability", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + }, + { + "text": "File Share", + "value": "FileShare" + } + ], + "metricDefinition": "$ns/fileServices", + "metricName": "Availability", + "metricNamespace": "Microsoft.Storage/storageAccounts/fileServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "C", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average", "Minimum", "Maximum"], + "aggregation": "Average", + "alias": "Queue availability", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns/queueServices", + "metricName": "Availability", + "metricNamespace": "Microsoft.Storage/storageAccounts/queueServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "D", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Availability by storage type", + "transformations": [], + "type": "timeseries" }, - "timepicker": {}, - "timezone": "", - "title": "Azure Storage Insights", - "uid": "3n2E8CrGk", - "version": 28 - } \ No newline at end of file + { + "collapsed": false, + "datasource": "$ds", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 23 + }, + "id": 52, + "panels": [], + "title": "Failures", + "type": "row" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": {}, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Transactions ClientOtherError" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "red", + "mode": "fixed" + } + }, + { + "id": "displayName", + "value": "ClientOtherError" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Transactions Success" + }, + "properties": [ + { + "id": "displayName", + "value": "Success" + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 0, + "y": 24 + }, + "id": 16, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["sum"], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Total"], + "aggregation": "Total", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "ResponseType", + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "Response type", + "value": "ResponseType" + }, + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns", + "metricName": "Transactions", + "metricNamespace": "Microsoft.Storage/storageAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "", + "type": "stat" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "red", + "mode": "fixed" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Transactions Success" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 18, + "x": 6, + "y": 24 + }, + "id": 18, + "options": { + "graph": {}, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Total"], + "aggregation": "Total", + "alias": "", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "ResponseType", + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "Response type", + "value": "ResponseType" + }, + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns", + "metricName": "Transactions", + "metricNamespace": "Microsoft.Storage/storageAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "", + "type": "timeseries" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": null, + "filterable": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "custom.displayMode", + "value": "basic" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 30 + }, + "id": 20, + "options": { + "showHeader": false + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Total"], + "aggregation": "Total", + "alias": "", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "ApiName", + "filter": "", + "operator": "eq" + }, + { + "dimension": "ResponseType", + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "Response type", + "value": "ResponseType" + }, + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns/blobServices", + "metricName": "Transactions", + "metricNamespace": "Microsoft.Storage/storageAccounts/blobServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Blob Services", + "transformations": [ + { + "id": "reduce", + "options": { + "reducers": ["sum"] + } + } + ], + "type": "table" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": null, + "filterable": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "custom.displayMode", + "value": "basic" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 30 + }, + "id": 22, + "options": { + "showHeader": false + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Total"], + "aggregation": "Total", + "alias": "", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "ApiName", + "filter": "", + "operator": "eq" + }, + { + "dimension": "ResponseType", + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "Response type", + "value": "ResponseType" + }, + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + }, + { + "text": "File Share", + "value": "FileShare" + } + ], + "metricDefinition": "$ns/fileServices", + "metricName": "Transactions", + "metricNamespace": "Microsoft.Storage/storageAccounts/fileServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "File Services", + "transformations": [ + { + "id": "reduce", + "options": { + "reducers": ["sum"] + } + } + ], + "type": "table" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": null, + "filterable": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "custom.displayMode", + "value": "basic" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 38 + }, + "id": 24, + "options": { + "showHeader": false + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Total"], + "aggregation": "Total", + "alias": "", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "ApiName", + "filter": "", + "operator": "eq" + }, + { + "dimension": "ResponseType", + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "Response type", + "value": "ResponseType" + }, + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns/tableServices", + "metricName": "Transactions", + "metricNamespace": "Microsoft.Storage/storageAccounts/tableServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Table Services", + "transformations": [ + { + "id": "reduce", + "options": { + "reducers": ["sum"] + } + } + ], + "type": "table" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": null, + "filterable": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "custom.displayMode", + "value": "basic" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 38 + }, + "id": 26, + "options": { + "showHeader": false + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Total"], + "aggregation": "Total", + "alias": "", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "ApiName", + "filter": "", + "operator": "eq" + }, + { + "dimension": "ResponseType", + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "Response type", + "value": "ResponseType" + }, + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns/queueServices", + "metricName": "Transactions", + "metricNamespace": "Microsoft.Storage/storageAccounts/queueServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + } + ], + "title": "Queue Services", + "transformations": [ + { + "id": "reduce", + "options": { + "reducers": ["sum"] + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "datasource": "$ds", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 46 + }, + "id": 50, + "panels": [], + "title": "Performance", + "type": "row" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": {}, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "dark-green", + "value": null + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Success Server Latency" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 0, + "y": 47 + }, + "id": 28, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["sum"], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average", "Minimum", "Maximum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns", + "metricName": "SuccessE2ELatency", + "metricNamespace": "Microsoft.Storage/storageAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average", "Minimum", "Maximum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns", + "metricName": "SuccessServerLatency", + "metricNamespace": "Microsoft.Storage/storageAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "B", + "subscription": "$sub" + } + ], + "title": "", + "type": "stat" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "dark-green", + "value": null + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Success Server Latency" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 18, + "x": 6, + "y": 47 + }, + "id": 30, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average", "Minimum", "Maximum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns", + "metricName": "SuccessE2ELatency", + "metricNamespace": "Microsoft.Storage/storageAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average", "Minimum", "Maximum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns", + "metricName": "SuccessServerLatency", + "metricNamespace": "Microsoft.Storage/storageAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "B", + "subscription": "$sub" + } + ], + "title": "", + "type": "timeseries" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": null, + "filterable": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + } + ] + }, + "unit": "ms" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Mean" + }, + "properties": [ + { + "id": "custom.displayMode", + "value": "lcd-gauge" + }, + { + "id": "color", + "value": { + "mode": "continuous-GrYlRd" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Max" + }, + "properties": [ + { + "id": "custom.displayMode", + "value": "gradient-gauge" + }, + { + "id": "color", + "value": { + "fixedColor": "red", + "mode": "continuous-GrYlRd" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Min" + }, + "properties": [ + { + "id": "custom.displayMode", + "value": "gradient-gauge" + }, + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "continuous-GrYlRd" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Field" + }, + "properties": [ + { + "id": "displayName", + "value": "Latency" + } + ] + } + ] + }, + "gridPos": { + "h": 11, + "w": 24, + "x": 0, + "y": 53 + }, + "id": 32, + "options": { + "showHeader": true + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average", "Minimum", "Maximum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "ApiName", + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns", + "metricName": "SuccessE2ELatency", + "metricNamespace": "Microsoft.Storage/storageAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average", "Minimum", "Maximum"], + "aggregation": "Average", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "ApiName", + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns", + "metricName": "SuccessServerLatency", + "metricNamespace": "Microsoft.Storage/storageAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "B", + "subscription": "$sub" + } + ], + "title": "", + "transformations": [ + { + "id": "reduce", + "options": { + "includeTimeField": false, + "mode": "seriesToRows", + "reducers": ["mean", "max", "min"] + } + }, + { + "id": "sortBy", + "options": { + "fields": {}, + "sort": [ + { + "desc": true, + "field": "Mean" + } + ] + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "datasource": "$ds", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 64 + }, + "id": 48, + "panels": [], + "title": "Availability", + "type": "row" + }, + { + "datasource": "$ds", + "description": "The data comes from Storage metrics. It measures the availability of requests on Storage accounts.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": {}, + "mappings": [], + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "green", + "value": 100 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 65 + }, + "id": 34, + "options": { + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": false, + "text": {} + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average", "Minimum", "Maximum"], + "aggregation": "Average", + "alias": "Account Availability", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns", + "metricName": "Availability", + "metricNamespace": "Microsoft.Storage/storageAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average", "Minimum", "Maximum"], + "aggregation": "Average", + "alias": "Blob Availability", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns/blobServices", + "metricName": "Availability", + "metricNamespace": "Microsoft.Storage/storageAccounts/blobServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "B", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average", "Minimum", "Maximum"], + "aggregation": "Average", + "alias": "Table Availability", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns/tableServices", + "metricName": "Availability", + "metricNamespace": "Microsoft.Storage/storageAccounts/tableServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "C", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average", "Minimum", "Maximum"], + "aggregation": "Average", + "alias": "File Availability", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + }, + { + "text": "File Share", + "value": "FileShare" + } + ], + "metricDefinition": "$ns/fileServices", + "metricName": "Availability", + "metricNamespace": "Microsoft.Storage/storageAccounts/fileServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "D", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average", "Minimum", "Maximum"], + "aggregation": "Average", + "alias": "Queue Availability", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns/queueServices", + "metricName": "Availability", + "metricNamespace": "Microsoft.Storage/storageAccounts/queueServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "E", + "subscription": "$sub" + } + ], + "title": "", + "type": "gauge" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": null, + "filterable": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Mean" + }, + "properties": [ + { + "id": "unit", + "value": "percent" + }, + { + "id": "custom.displayMode", + "value": "color-background" + }, + { + "id": "color", + "value": { + "mode": "continuous-RdYlGr" + } + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 73 + }, + "id": 36, + "maxDataPoints": 1, + "options": { + "showHeader": false + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average", "Minimum", "Maximum"], + "aggregation": "Average", + "alias": "", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "ApiName", + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns/blobServices", + "metricName": "Availability", + "metricNamespace": "Microsoft.Storage/storageAccounts/blobServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average", "Minimum", "Maximum"], + "aggregation": "Average", + "alias": "", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "ApiName", + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns/tableServices", + "metricName": "Availability", + "metricNamespace": "Microsoft.Storage/storageAccounts/tableServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "B", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average", "Minimum", "Maximum"], + "aggregation": "Average", + "alias": "", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "ApiName", + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + }, + { + "text": "File Share", + "value": "FileShare" + } + ], + "metricDefinition": "$ns/fileServices", + "metricName": "Availability", + "metricNamespace": "Microsoft.Storage/storageAccounts/fileServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "C", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average", "Minimum", "Maximum"], + "aggregation": "Average", + "alias": "", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [ + { + "dimension": "ApiName", + "filter": "", + "operator": "eq" + } + ], + "dimensions": [ + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns/queueServices", + "metricName": "Availability", + "metricNamespace": "Microsoft.Storage/storageAccounts/queueServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "D", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Availability by API name", + "transformations": [ + { + "id": "reduce", + "options": { + "includeTimeField": false, + "mode": "seriesToRows", + "reducers": ["mean"] + } + } + ], + "type": "table" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": {}, + "custom": {}, + "thresholds": { + "mode": "absolute", + "steps": [] + }, + "unit": "percent" + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 73 + }, + "hiddenSeries": false, + "id": 38, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": true, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average", "Minimum", "Maximum"], + "aggregation": "Average", + "alias": "Blob Availability", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns/blobServices", + "metricName": "Availability", + "metricNamespace": "Microsoft.Storage/storageAccounts/blobServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average", "Minimum", "Maximum"], + "aggregation": "Average", + "alias": "Table Availability", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns/tableServices", + "metricName": "Availability", + "metricNamespace": "Microsoft.Storage/storageAccounts/tableServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "B", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average", "Minimum", "Maximum"], + "aggregation": "Average", + "alias": "File Availability", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + }, + { + "text": "File Share", + "value": "FileShare" + } + ], + "metricDefinition": "$ns/fileServices", + "metricName": "Availability", + "metricNamespace": "Microsoft.Storage/storageAccounts/fileServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "C", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average", "Minimum", "Maximum"], + "aggregation": "Average", + "alias": "Queue Availability", + "allowedTimeGrainsMs": [60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Geo type", + "value": "GeoType" + }, + { + "text": "API name", + "value": "ApiName" + }, + { + "text": "Authentication", + "value": "Authentication" + } + ], + "metricDefinition": "$ns/queueServices", + "metricName": "Availability", + "metricNamespace": "Microsoft.Storage/storageAccounts/queueServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 minute", + "value": "PT1M" + }, + { + "text": "5 minutes", + "value": "PT5M" + }, + { + "text": "15 minutes", + "value": "PT15M" + }, + { + "text": "30 minutes", + "value": "PT30M" + }, + { + "text": "1 hour", + "value": "PT1H" + }, + { + "text": "6 hours", + "value": "PT6H" + }, + { + "text": "12 hours", + "value": "PT12H" + }, + { + "text": "1 day", + "value": "P1D" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "D", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Availability Trend", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "transformations": [], + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "percent", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "collapsed": false, + "datasource": "$ds", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 81 + }, + "id": 46, + "panels": [], + "title": "Capacity", + "type": "row" + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": {}, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "dark-blue", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 82 + }, + "id": 40, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average"], + "aggregation": "Average", + "alias": "Account Capacity", + "allowedTimeGrainsMs": [3600000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns", + "metricName": "UsedCapacity", + "metricNamespace": "Microsoft.Storage/storageAccounts", + "resourceGroup": "$rg", + "resourceName": "$resource", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 hour", + "value": "PT1H" + } + ], + "top": "10" + }, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "A", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average"], + "aggregation": "Average", + "alias": "Blob Capacity", + "allowedTimeGrainsMs": [3600000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Blob type", + "value": "BlobType" + }, + { + "text": "Blob tier", + "value": "Tier" + } + ], + "metricDefinition": "$ns/blobServices", + "metricName": "BlobCapacity", + "metricNamespace": "Microsoft.Storage/storageAccounts/blobServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 hour", + "value": "PT1H" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "B", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average"], + "aggregation": "Average", + "alias": "Table Capacity", + "allowedTimeGrainsMs": [3600000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns/tableServices", + "metricName": "TableCapacity", + "metricNamespace": "Microsoft.Storage/storageAccounts/tableServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 hour", + "value": "PT1H" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "C", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average"], + "aggregation": "Average", + "alias": "File Capacity", + "allowedTimeGrainsMs": [3600000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "File Share", + "value": "FileShare" + } + ], + "metricDefinition": "$ns/fileServices", + "metricName": "FileCapacity", + "metricNamespace": "Microsoft.Storage/storageAccounts/fileServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 hour", + "value": "PT1H" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "D", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average"], + "aggregation": "Average", + "alias": "Queue Capacity", + "allowedTimeGrainsMs": [3600000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns/queueServices", + "metricName": "QueueCapacity", + "metricNamespace": "Microsoft.Storage/storageAccounts/queueServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 hour", + "value": "PT1H" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "E", + "subscription": "$sub" + } + ], + "title": "", + "type": "stat" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": {}, + "custom": {}, + "thresholds": { + "mode": "absolute", + "steps": [] + }, + "unit": "decbytes" + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 90 + }, + "hiddenSeries": false, + "id": 42, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.3", + "pointradius": 1, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average"], + "aggregation": "Average", + "alias": "Blob Capacity", + "allowedTimeGrainsMs": [3600000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Blob type", + "value": "BlobType" + }, + { + "text": "Blob tier", + "value": "Tier" + } + ], + "metricDefinition": "$ns/blobServices", + "metricName": "BlobCapacity", + "metricNamespace": "Microsoft.Storage/storageAccounts/blobServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 hour", + "value": "PT1H" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "B", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average"], + "aggregation": "Average", + "alias": "Table Capacity", + "allowedTimeGrainsMs": [3600000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns/tableServices", + "metricName": "TableCapacity", + "metricNamespace": "Microsoft.Storage/storageAccounts/tableServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 hour", + "value": "PT1H" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "C", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average"], + "aggregation": "Average", + "alias": "File Capacity", + "allowedTimeGrainsMs": [3600000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "File Share", + "value": "FileShare" + } + ], + "metricDefinition": "$ns/fileServices", + "metricName": "FileCapacity", + "metricNamespace": "Microsoft.Storage/storageAccounts/fileServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 hour", + "value": "PT1H" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "D", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average"], + "aggregation": "Average", + "alias": "Queue Capacity", + "allowedTimeGrainsMs": [3600000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns/queueServices", + "metricName": "QueueCapacity", + "metricNamespace": "Microsoft.Storage/storageAccounts/queueServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 hour", + "value": "PT1H" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "E", + "subscription": "$sub" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Storage capacity", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "decbytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "datasource": "$ds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "graph": false, + "legend": false, + "tooltip": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 4, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "always", + "spanNulls": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 90 + }, + "id": 44, + "options": { + "graph": {}, + "legend": { + "calcs": ["mean"], + "displayMode": "list", + "placement": "bottom" + }, + "tooltipOptions": { + "mode": "single" + } + }, + "pluginVersion": "7.4.3", + "targets": [ + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average"], + "aggregation": "Average", + "alias": "Blob Count", + "allowedTimeGrainsMs": [3600000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "Blob type", + "value": "BlobType" + }, + { + "text": "Blob tier", + "value": "Tier" + } + ], + "metricDefinition": "$ns/blobServices", + "metricName": "BlobCount", + "metricNamespace": "Microsoft.Storage/storageAccounts/blobServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 hour", + "value": "PT1H" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "B", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average"], + "aggregation": "Average", + "alias": "Table Count", + "allowedTimeGrainsMs": [3600000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns/tableServices", + "metricName": "TableCount", + "metricNamespace": "Microsoft.Storage/storageAccounts/tableServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 hour", + "value": "PT1H" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "C", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average"], + "aggregation": "Average", + "alias": "File Count", + "allowedTimeGrainsMs": [3600000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [ + { + "text": "File Share", + "value": "FileShare" + } + ], + "metricDefinition": "$ns/fileServices", + "metricName": "FileCount", + "metricNamespace": "Microsoft.Storage/storageAccounts/fileServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 hour", + "value": "PT1H" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "D", + "subscription": "$sub" + }, + { + "appInsights": { + "dimension": [], + "metricName": "select", + "timeGrain": "auto" + }, + "azureLogAnalytics": { + "query": "//change this example to create your own time series query\n
//the table to query (e.g. Usage, Heartbeat, Perf)\n| where $__timeFilter(TimeGenerated) //this is a macro used to show the full chart’s time range, choose the datetime column here\n| summarize count() by , bin(TimeGenerated, $__interval) //change “group by column” to a column in your table, such as “Computer”. The $__interval macro is used to auto-select the time grain. Can also use 1h, 5m etc.\n| order by TimeGenerated asc", + "resultFormat": "time_series", + "workspace": "00000000-0000-0000-0000-000000000000" + }, + "azureMonitor": { + "aggOptions": ["Average"], + "aggregation": "Average", + "alias": "Queue Count", + "allowedTimeGrainsMs": [3600000], + "dimensionFilter": "*", + "dimensionFilters": [], + "dimensions": [], + "metricDefinition": "$ns/queueServices", + "metricName": "QueueCount", + "metricNamespace": "Microsoft.Storage/storageAccounts/queueServices", + "resourceGroup": "$rg", + "resourceName": "$resource/default", + "timeGrain": "auto", + "timeGrains": [ + { + "text": "auto", + "value": "auto" + }, + { + "text": "1 hour", + "value": "PT1H" + } + ], + "top": "10" + }, + "hide": false, + "insightsAnalytics": { + "query": "", + "resultFormat": "time_series" + }, + "queryType": "Azure Monitor", + "refId": "E", + "subscription": "$sub" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Storage count", + "type": "timeseries" + } + ], + "refresh": false, + "schemaVersion": 27, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "current": {}, + "description": null, + "error": null, + "hide": 0, + "includeAll": false, + "label": "Data Source", + "multi": false, + "name": "ds", + "options": [], + "query": "grafana-azure-monitor-datasource", + "queryValue": "", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "type": "datasource" + }, + { + "allValue": null, + "current": {}, + "datasource": "$ds", + "definition": "subscriptions()", + "description": null, + "error": null, + "hide": 0, + "includeAll": false, + "label": "Subscription", + "multi": false, + "name": "sub", + "options": [], + "query": "subscriptions()", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "description": null, + "error": null, + "hide": 2, + "label": "Namespace", + "name": "ns", + "query": "Microsoft.Storage/storageAccounts", + "skipUrlSync": false, + "type": "constant" + }, + { + "allValue": null, + "current": {}, + "datasource": "$ds", + "definition": "ResourceGroups($sub)", + "description": null, + "error": null, + "hide": 0, + "includeAll": false, + "label": "Resource Group", + "multi": false, + "name": "rg", + "options": [], + "query": "ResourceGroups($sub)", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": {}, + "datasource": "$ds", + "definition": "ResourceNames($sub, $rg, $ns)", + "description": null, + "error": null, + "hide": 0, + "includeAll": false, + "label": "Resource", + "multi": false, + "name": "resource", + "options": [], + "query": "ResourceNames($sub, $rg, $ns)", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-6h", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Azure Storage Insights", + "uid": "3n2E8CrGk", + "version": 28 +} diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/plugin.json b/public/app/plugins/datasource/grafana-azure-monitor-datasource/plugin.json index 94e596f1aec..3d8c70dd70e 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/plugin.json +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/plugin.json @@ -35,155 +35,6 @@ "updated": "2018-12-06" }, - "routes": [ - { - "path": "azuremonitor", - "method": "*", - "url": "https://management.azure.com", - "authType": "azure", - "tokenAuth": { - "scopes": ["https://management.azure.com/.default"], - "params": { - "azure_auth_type": "{{.JsonData.azureAuthType | orEmpty}}", - "azure_cloud": "AzureCloud", - "tenant_id": "{{.JsonData.tenantId | orEmpty}}", - "client_id": "{{.JsonData.clientId | orEmpty}}", - "client_secret": "{{.SecureJsonData.clientSecret | orEmpty}}" - } - }, - "headers": [{ "name": "x-ms-app", "content": "Grafana" }] - }, - { - "path": "govazuremonitor", - "method": "*", - "url": "https://management.usgovcloudapi.net", - "authType": "azure", - "tokenAuth": { - "scopes": ["https://management.usgovcloudapi.net/.default"], - "params": { - "azure_auth_type": "{{.JsonData.azureAuthType | orEmpty}}", - "azure_cloud": "AzureUSGovernment", - "tenant_id": "{{.JsonData.tenantId | orEmpty}}", - "client_id": "{{.JsonData.clientId | orEmpty}}", - "client_secret": "{{.SecureJsonData.clientSecret | orEmpty}}" - } - }, - "headers": [{ "name": "x-ms-app", "content": "Grafana" }] - }, - { - "path": "germanyazuremonitor", - "method": "*", - "url": "https://management.microsoftazure.de", - "authType": "azure", - "tokenAuth": { - "scopes": ["https://management.microsoftazure.de/.default"], - "params": { - "azure_auth_type": "{{.JsonData.azureAuthType | orEmpty}}", - "azure_cloud": "AzureGermanCloud", - "tenant_id": "{{.JsonData.tenantId | orEmpty}}", - "client_id": "{{.JsonData.clientId | orEmpty}}", - "client_secret": "{{.SecureJsonData.clientSecret | orEmpty}}" - } - }, - "headers": [{ "name": "x-ms-app", "content": "Grafana" }] - }, - { - "path": "chinaazuremonitor", - "method": "*", - "url": "https://management.chinacloudapi.cn", - "authType": "azure", - "tokenAuth": { - "scopes": ["https://management.chinacloudapi.cn/.default"], - "params": { - "azure_auth_type": "{{.JsonData.azureAuthType | orEmpty}}", - "azure_cloud": "AzureChinaCloud", - "tenant_id": "{{.JsonData.tenantId | orEmpty}}", - "client_id": "{{.JsonData.clientId | orEmpty}}", - "client_secret": "{{.SecureJsonData.clientSecret | orEmpty}}" - } - }, - "headers": [{ "name": "x-ms-app", "content": "Grafana" }] - }, - { - "path": "appinsights", - "method": "GET", - "url": "https://api.applicationinsights.io", - "headers": [ - { "name": "X-API-Key", "content": "{{.SecureJsonData.appInsightsApiKey}}" }, - { "name": "x-ms-app", "content": "Grafana" } - ] - }, - { - "path": "chinaappinsights", - "method": "GET", - "url": "https://api.applicationinsights.azure.cn", - "headers": [ - { "name": "X-API-Key", "content": "{{.SecureJsonData.appInsightsApiKey}}" }, - { "name": "x-ms-app", "content": "Grafana" } - ] - }, - { - "path": "loganalyticsazure", - "method": "GET", - "url": "https://api.loganalytics.io/", - "authType": "azure", - "tokenAuth": { - "scopes": ["https://api.loganalytics.io/.default"], - "params": { - "azure_auth_type": "{{.JsonData.azureAuthType | orEmpty}}", - "azure_cloud": "AzureCloud", - "tenant_id": "{{.JsonData.tenantId | orEmpty}}", - "client_id": "{{.JsonData.clientId | orEmpty}}", - "client_secret": "{{.SecureJsonData.clientSecret | orEmpty}}" - } - }, - "headers": [ - { "name": "x-ms-app", "content": "Grafana" }, - { "name": "Cache-Control", "content": "public, max-age=60" } - ] - }, - { - "path": "chinaloganalyticsazure", - "method": "GET", - "url": "https://api.loganalytics.azure.cn/", - "authType": "azure", - "tokenAuth": { - "scopes": ["https://api.loganalytics.azure.cn/.default"], - "params": { - "azure_auth_type": "{{.JsonData.azureAuthType | orEmpty}}", - "azure_cloud": "AzureChinaCloud", - "tenant_id": "{{.JsonData.tenantId | orEmpty}}", - "client_id": "{{.JsonData.clientId | orEmpty}}", - "client_secret": "{{.SecureJsonData.clientSecret | orEmpty}}" - } - }, - "headers": [ - { "name": "x-ms-app", "content": "Grafana" }, - { "name": "Cache-Control", "content": "public, max-age=60" } - ] - }, - { - "path": "govloganalyticsazure", - "method": "GET", - "url": "https://api.loganalytics.us/", - "authType": "azure", - "tokenAuth": { - "scopes": ["https://api.loganalytics.us/.default"], - "params": { - "azure_auth_type": "{{.JsonData.azureAuthType | orEmpty}}", - "azure_cloud": "AzureUSGovernment", - "tenant_id": "{{.JsonData.tenantId | orEmpty}}", - "client_id": "{{.JsonData.clientId | orEmpty}}", - "client_secret": "{{.SecureJsonData.clientSecret | orEmpty}}" - } - }, - "headers": [ - { "name": "x-ms-app", "content": "Grafana" }, - { "name": "Cache-Control", "content": "public, max-age=60" } - ] - } - ], - "dependencies": { "grafanaVersion": "5.2.x", "plugins": [] diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/resourcePicker/resourcePickerData.test.ts b/public/app/plugins/datasource/grafana-azure-monitor-datasource/resourcePicker/resourcePickerData.test.ts index fba4b60c059..7403a1068e1 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/resourcePicker/resourcePickerData.test.ts +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/resourcePicker/resourcePickerData.test.ts @@ -1,8 +1,3 @@ -import { of } from 'rxjs'; - -import { createFetchResponse } from 'test/helpers/createFetchResponse'; -import { backendSrv } from 'app/core/services/backend_srv'; - import ResourcePickerData from './resourcePickerData'; import { createMockARGResourceContainersResponse, @@ -11,47 +6,34 @@ import { import { ResourceRowType } from '../components/ResourcePicker/types'; import { createMockInstanceSetttings } from '../__mocks__/instanceSettings'; -jest.mock('@grafana/runtime', () => ({ - ...((jest.requireActual('@grafana/runtime') as unknown) as object), - getBackendSrv: () => backendSrv, -})); - const instanceSettings = createMockInstanceSetttings(); +const resourcePickerData = new ResourcePickerData(instanceSettings); +let postResource: jest.Mock; describe('AzureMonitor resourcePickerData', () => { describe('getResourcePickerData', () => { - let fetchMock: jest.SpyInstance; - beforeEach(() => { - fetchMock = jest.spyOn(backendSrv, 'fetch'); - fetchMock.mockImplementation(() => { - const data = createMockARGResourceContainersResponse(); - return of(createFetchResponse(data)); - }); + postResource = jest.fn().mockResolvedValue(createMockARGResourceContainersResponse()); + resourcePickerData.postResource = postResource; }); - afterEach(() => fetchMock.mockReset()); - it('calls ARG API', async () => { - const resourcePickerData = new ResourcePickerData(instanceSettings); await resourcePickerData.getResourcePickerData(); - expect(fetchMock).toHaveBeenCalled(); - const argQuery = fetchMock.mock.calls[0][0].data.query; + expect(postResource).toHaveBeenCalled(); + const argQuery = postResource.mock.calls[0][1].query; expect(argQuery).toContain(`where type == 'microsoft.resources/subscriptions'`); expect(argQuery).toContain(`where type == 'microsoft.resources/subscriptions/resourcegroups'`); }); it('returns only subscriptions at the top level', async () => { - const resourcePickerData = new ResourcePickerData(instanceSettings); const results = await resourcePickerData.getResourcePickerData(); expect(results.map((v) => v.id)).toEqual(['/subscriptions/abc-123', '/subscription/def-456']); }); it('nests resource groups under their subscriptions', async () => { - const resourcePickerData = new ResourcePickerData(instanceSettings); const results = await resourcePickerData.getResourcePickerData(); expect(results[0].children?.map((v) => v.id)).toEqual([ @@ -68,8 +50,6 @@ describe('AzureMonitor resourcePickerData', () => { }); describe('getResourcesForResourceGroup', () => { - let fetchMock: jest.SpyInstance; - const resourceRow = { id: '/subscription/def-456/resourceGroups/dev', name: 'Dev', @@ -78,27 +58,20 @@ describe('AzureMonitor resourcePickerData', () => { }; beforeEach(() => { - fetchMock = jest.spyOn(backendSrv, 'fetch'); - fetchMock.mockImplementation(() => { - const data = createARGResourcesResponse(); - return of(createFetchResponse(data)); - }); + postResource = jest.fn().mockResolvedValue(createARGResourcesResponse()); + resourcePickerData.postResource = postResource; }); - afterEach(() => fetchMock.mockReset()); - it('requests resources for the specified resource row', async () => { - const resourcePickerData = new ResourcePickerData(instanceSettings); await resourcePickerData.getResourcesForResourceGroup(resourceRow); - expect(fetchMock).toHaveBeenCalled(); - const argQuery = fetchMock.mock.calls[0][0].data.query; + expect(postResource).toHaveBeenCalled(); + const argQuery = postResource.mock.calls[0][1].query; expect(argQuery).toContain(resourceRow.id); }); it('returns formatted resources', async () => { - const resourcePickerData = new ResourcePickerData(instanceSettings); const results = await resourcePickerData.getResourcesForResourceGroup(resourceRow); expect(results.map((v) => v.id)).toEqual([ diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/resourcePicker/resourcePickerData.ts b/public/app/plugins/datasource/grafana-azure-monitor-datasource/resourcePicker/resourcePickerData.ts index be6fcc5624d..a535cf0cc94 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/resourcePicker/resourcePickerData.ts +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/resourcePicker/resourcePickerData.ts @@ -1,5 +1,5 @@ -import { FetchResponse, getBackendSrv } from '@grafana/runtime'; -import { getManagementApiRoute } from '../api/routes'; +import { DataSourceWithBackend } from '@grafana/runtime'; +import { DataSourceInstanceSettings } from '../../../../../../packages/grafana-data/src'; import { locationDisplayNames, logsSupportedLocationsKusto, @@ -8,24 +8,24 @@ import { } from '../azureMetadata'; import { ResourceRowType, ResourceRow, ResourceRowGroup } from '../components/ResourcePicker/types'; import { parseResourceURI } from '../components/ResourcePicker/utils'; -import { getAzureCloud } from '../credentials'; import { - AzureDataSourceInstanceSettings, + AzureDataSourceJsonData, AzureGraphResponse, + AzureMonitorQuery, AzureResourceSummaryItem, RawAzureResourceGroupItem, RawAzureResourceItem, } from '../types'; +import { routeNames } from '../utils/common'; const RESOURCE_GRAPH_URL = '/providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01'; -export default class ResourcePickerData { - private proxyUrl: string; - private cloud: string; +export default class ResourcePickerData extends DataSourceWithBackend { + private resourcePath: string; - constructor(instanceSettings: AzureDataSourceInstanceSettings) { - this.proxyUrl = instanceSettings.url!; - this.cloud = getAzureCloud(instanceSettings); + constructor(instanceSettings: DataSourceInstanceSettings) { + super(instanceSettings); + this.resourcePath = `${routeNames.resourceGraph}`; } static readonly templateVariableGroupID = '$$grafana-templateVariables$$'; @@ -54,29 +54,19 @@ export default class ResourcePickerData { | order by subscriptionURI asc `; - const { ok, data: response } = await this.makeResourceGraphRequest(query); - - // TODO: figure out desired error handling strategy - if (!ok) { - throw new Error('unable to fetch resource containers'); - } + const response = await this.makeResourceGraphRequest(query); return formatResourceGroupData(response.data); } async getResourcesForResourceGroup(resourceGroup: ResourceRow) { - const { ok, data: response } = await this.makeResourceGraphRequest(` + const { data: response } = await this.makeResourceGraphRequest(` resources | where id hasprefix "${resourceGroup.id}" | where type in (${logsSupportedResourceTypesKusto}) and location in (${logsSupportedLocationsKusto}) `); - // TODO: figure out desired error handling strategy - if (!ok) { - throw new Error('unable to fetch resource containers'); - } - - return formatResourceGroupChildren(response.data); + return formatResourceGroupChildren(response); } async getResourceURIDisplayProperties(resourceURI: string): Promise { @@ -113,51 +103,37 @@ export default class ResourcePickerData { | project subscriptionName, resourceGroupName, resourceName `; - const { ok, data: response } = await this.makeResourceGraphRequest(query); + const { data: response } = await this.makeResourceGraphRequest(query); - if (!ok || !response.data[0]) { + if (!response.length) { throw new Error('unable to fetch resource details'); } - return response.data[0]; + return response[0]; } async getResourceURIFromWorkspace(workspace: string) { - const { ok, data: response } = await this.makeResourceGraphRequest(` + const { data: response } = await this.makeResourceGraphRequest(` resources | where properties['customerId'] == "${workspace}" | project id `); - // TODO: figure out desired error handling strategy - if (!ok) { - throw new Error('unable to fetch resource containers'); - } - - if (!response.data.length) { + if (!response.length) { throw new Error('unable to find resource for workspace ' + workspace); } - return response.data[0].id; + return response[0].id; } - async makeResourceGraphRequest( - query: string, - maxRetries = 1 - ): Promise>> { + async makeResourceGraphRequest(query: string, maxRetries = 1): Promise> { try { - return await getBackendSrv() - .fetch>({ - url: this.proxyUrl + '/' + getManagementApiRoute(this.cloud) + RESOURCE_GRAPH_URL, - method: 'POST', - data: { - query: query, - options: { - resultFormat: 'objectArray', - }, - }, - }) - .toPromise(); + return await this.postResource(this.resourcePath + RESOURCE_GRAPH_URL, { + query: query, + options: { + resultFormat: 'objectArray', + }, + }); } catch (error) { if (maxRetries > 0) { return this.makeResourceGraphRequest(query, maxRetries - 1); diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/utils/common.ts b/public/app/plugins/datasource/grafana-azure-monitor-datasource/utils/common.ts index 8ea6a423ceb..07cb15a435c 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/utils/common.ts +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/utils/common.ts @@ -28,3 +28,12 @@ export function convertTimeGrainsToMs(timeGrains: T }); return allowedTimeGrainsMs; } + +// Route definitions shared with the backend. +// Check: /pkg/tsdb/azuremonitor/azuremonitor-resource-handler.go +export const routeNames = { + azureMonitor: 'azuremonitor', + logAnalytics: 'loganalytics', + appInsights: 'appinsights', + resourceGraph: 'resourcegraph', +};