custom-service-JONYR
qxz15oi 2021-04-13 13:36:18 +02:00
parent 563919171e
commit ecdf04bb38
38 changed files with 2210 additions and 0 deletions

View File

@ -0,0 +1,60 @@
config:
- CDnewComponentTag-PROD: default.json
- CDnewComponentTag-INT: default.json
#Prod alerting profiles for EMEA/NA/CN
#Dry-run needed for all hubs
CDnewComponentTag-PROD:
- name: CD_managementZone PROD
- tag: newComponentTag
- mzId: CD_managementZone/management-zone/CDnewComponentTag.id
- env: PROD
- skipDeployment: "true"
#Configuration
CDnewComponentTag-PROD.EMEA-Prod:
- name: CD_managementZone PROD
- tag: newComponentTag
- mzId: CD_managementZone/management-zone/CDnewComponentTag.id
- env: PROD
- skipDeployment: "false"
CDnewComponentTag-PROD.NA-Prod:
- name: CD_managementZone PROD
- tag: newComponentTag
- mzId: CD_managementZone/management-zone/CDnewComponentTag.id
- env: PROD
- skipDeployment: "false"
CDnewComponentTag-PROD.CN-Prod:
- name: CD_managementZone PROD
- tag: newComponentTag
- mzId: CD_managementZone/management-zone/CDnewComponentTag.id
- env: PROD
- skipDeployment: "false"
#INT alerting profiles for EMEA/NA/CN
#Dry-run needed for all hubs
CDnewComponentTag-INT:
- name: CD_managementZone INT
- tag: newComponentTag
- mzId: CD_managementZone/management-zone/CDnewComponentTag.id
- env: INT
- skipDeployment: "true"
#Configuration
CDnewComponentTag-INT.EMEA-PreProd:
- name: CD_managementZone INT
- tag: newComponentTag
- mzId: CD_managementZone/management-zone/CDnewComponentTag.id
- env: INT
- skipDeployment: "false"
CDnewComponentTag-INT.NA-PreProd:
- name: CD_managementZone INT
- tag: newComponentTag
- mzId: CD_managementZone/management-zone/CDnewComponentTag.id
- env: INT
- skipDeployment: "false"
CDnewComponentTag-INT.CN-PreProd:
- name: CD_managementZone INT
- tag: newComponentTag
- mzId: CD_managementZone/management-zone/CDnewComponentTag.id
- env: INT
- skipDeployment: "false"

View File

@ -0,0 +1,103 @@
{
"displayName": "{{.name}}",
"eventTypeFilters": [],
"managementZoneId": "{{.mzId}}",
"mzId": "{{.mzId}}",
"rules": [
{
"delayInMinutes": 0,
"severityLevel": "AVAILABILITY",
"tagFilter": {
"includeMode": "INCLUDE_ALL",
"tagFilters": [
{
"context": "CONTEXTLESS",
"key": "Component",
"value": "{{.tag}}"
},
{
"context": "CONTEXTLESS",
"key": "Environment",
"value": "{{.env}}"
}
]
}
},
{
"delayInMinutes": 10,
"severityLevel": "ERROR",
"tagFilter": {
"includeMode": "INCLUDE_ALL",
"tagFilters": [
{
"context": "CONTEXTLESS",
"key": "Component",
"value": "{{.tag}}"
},
{
"context": "CONTEXTLESS",
"key": "Environment",
"value": "{{.env}}"
}
]
}
},
{
"delayInMinutes": 30,
"severityLevel": "PERFORMANCE",
"tagFilter": {
"includeMode": "INCLUDE_ALL",
"tagFilters": [
{
"context": "CONTEXTLESS",
"key": "Component",
"value": "{{.tag}}"
},
{
"context": "CONTEXTLESS",
"key": "Environment",
"value": "{{.env}}"
}
]
}
},
{
"delayInMinutes": 30,
"severityLevel": "RESOURCE_CONTENTION",
"tagFilter": {
"includeMode": "INCLUDE_ALL",
"tagFilters": [
{
"context": "CONTEXTLESS",
"key": "Component",
"value": "{{.tag}}"
},
{
"context": "CONTEXTLESS",
"key": "Environment",
"value": "{{.env}}"
}
]
}
},
{
"delayInMinutes": 10,
"severityLevel": "CUSTOM_ALERT",
"tagFilter": {
"includeMode": "INCLUDE_ALL",
"tagFilters": [
{
"context": "CONTEXTLESS",
"key": "Component",
"value": "{{.tag}}"
},
{
"context": "CONTEXTLESS",
"key": "Environment",
"value": "{{.env}}"
}
]
}
}
]
}

View File

@ -0,0 +1,10 @@
## Custom metrics - Multidimensional Analysis
Under the Multidimensional Analysis you're able to save a view but not to create a metric. Instead, you can do it in here:
1. Create the metric within the Dynatrace UI using the Mutidimensional Analysis view.
2. Save the view and create a ticket for the OPAPM team [here](link). Please provide the following information:
- View created in the Dynatrace UI
- Your Dynatrace configuration folder (i.e. CD_<app_name>)
The OPAPM team will proceed creating the metric and updating your configuration in monaco.

View File

@ -0,0 +1,30 @@
## What is a custom service in Dynatrace?
- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.*
- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.*
- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.*
## How to create a custom service?
1. Open the file *custom-service-java.yaml* under your *CD_<app_name>/custom-service-java* configuration folder.
2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false".
3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...)
4. Commit and pull request to merge the branch to the master:
`git add <changes>`
`git commit -m "<app_name> configuration changes"`
`git push -u origin <branch>`
5. Restart the application where the custom service has been created.
6. Check if the custom service appears in Dynatrace.
Notes:
- As this configuration needs a restart, it's better to create it in a non-Prod application.
- The custom service will appear in Dynatrace iff there's traffic going through.
## What if i have multiple classes?
1. Clone *template-1-1.json* to a new one called *template-2-1.json*.
2. Edit *template-2-1.json* adding a 2nd rule separated with a coma.
3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e.
4. The template is ready to be used in the YAML file.
## What if i have multiple methods?
1. Same process as before, just call it template-1-2.json
2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json

View File

@ -0,0 +1,9 @@
config:
- customService1: template-1-1.json
customService1:
- name: myJOYNRService
- className: com.bmw.cc.conn.this.is.just.an.exampleClasss
- methodName: exampleJoynrMethod
- returnType: void
- skipDeployment: "true"

View File

@ -0,0 +1,23 @@
{
"enabled": true,
"name": "{{.name}}",
"processGroups": [],
"queueEntryPoint": false,
"queueEntryPointType": null,
"rules": [
{
"annotations": [],
"className": "{{.className}}",
"enabled": true,
"fileName": "",
"matcher": "EQUALS",
"methodRules": [
{
"argumentTypes": [],
"methodName": "{{.methodName}}",
"returnType": "{{.returnType}}"
}
]
}
]
}

View File

@ -0,0 +1,13 @@
## Update dashboard configuration
- Configuration changes (like in dashboards, alerting profiles) must be done via a pull request. Changing a dashboard just in the environment, will cause that it will be overwritten by Monaco.
- How to generate changes in your dashboards?
1. Modify the dashboard within the Dynatrace UI with the intended changes.
2. Copy the JSON of the dashboards. (Can be found under the dashboard settings)
3. Paste the copied JSON under the Monaco JSON, overwrite it.
4. Commit and pull request to merge the branch to the master:
```
git add <changes>
git commit -m "<app_name> configuration changes"
git push -u origin <branch>
```

View File

@ -0,0 +1,127 @@
config:
- CDnewComponentTag-PROD: default.json
- CDnewComponentTag-E2E: default.json
- CDnewComponentTag-INT: default.json
- CDnewComponentTag-TEST: default.json
#PROD dashboards for EMEA/NA/CN Prod
#Dry-run needed for all hubs
CDnewComponentTag-PROD:
- name: CD_managementZone PROD
- mzName: CD_managementZone/management-zone/CDnewComponentTag.name
- mzId: CD_managementZone/management-zone/CDnewComponentTag.id
- env: PROD
- skipDeployment: "true"
#Configuration
CDnewComponentTag-PROD.EMEA-Prod:
- name: CD_managementZone PROD
- mzName: CD_managementZone/management-zone/CDnewComponentTag.name
- mzId: CD_managementZone/management-zone/CDnewComponentTag.id
- tag: newComponentTag
- env: PROD
- skipDeployment: "false"
CDnewComponentTag-PROD.NA-Prod:
- name: CD_managementZone PROD
- mzName: CD_managementZone/management-zone/CDnewComponentTag.name
- mzId: CD_managementZone/management-zone/CDnewComponentTag.id
- tag: newComponentTag
- env: PROD
- skipDeployment: "false"
CDnewComponentTag-PROD.CN-Prod:
- name: CD_managementZone PROD
- mzName: CD_managementZone/management-zone/CDnewComponentTag.name
- mzId: CD_managementZone/management-zone/CDnewComponentTag.id
- tag: newComponentTag
- env: PROD
- skipDeployment: "false"
#E2E dashboards for EMEA/NA/CN E2E
#Dry-run needed for all hubs
CDnewComponentTag-E2E:
- name: CD_managementZone E2E
- mzName: CD_managementZone/management-zone/CDnewComponentTag.name
- mzId: CD_managementZone/management-zone/CDnewComponentTag.id
- env: E2E
- skipDeployment: "true"
#Configuration
CDnewComponentTag-E2E.EMEA-Prod:
- name: CD_managementZone E2E
- mzName: CD_managementZone/management-zone/CDnewComponentTag.name
- mzId: CD_managementZone/management-zone/CDnewComponentTag.id
- env: E2E
- tag: newComponentTag
- skipDeployment: "true"
CDnewComponentTag-E2E.NA-Prod:
- name: CD_managementZone E2E
- mzName: CD_managementZone/management-zone/CDnewComponentTag.name
- mzId: CD_managementZone/management-zone/CDnewComponentTag.id
- env: E2E
- tag: newComponentTag
- skipDeployment: "true"
CDnewComponentTag-E2E.CN-Prod:
- name: CD_managementZone E2E
- mzName: CD_managementZone/management-zone/CDnewComponentTag.name
- mzId: CD_managementZone/management-zone/CDnewComponentTag.id
- env: E2E
- tag: newComponentTag
- skipDeployment: "true"
#INT dashboards for EMEA/NA/CN
#Dry-run needed for all hubs
CDnewComponentTag-INT:
- name: CD_managementZone INT
- mzName: CD_managementZone/management-zone/CDnewComponentTag.name
- mzId: CD_managementZone/management-zone/CDnewComponentTag.id
- env: INT
- tag: newComponentTag
- skipDeployment: "true"
#Configuration
CDnewComponentTag-INT.EMEA-PreProd:
- name: CD_managementZone INT
- mzName: CD_managementZone/management-zone/CDnewComponentTag.name
- mzId: CD_managementZone/management-zone/CDnewComponentTag.id
- env: INT
- tag: newComponentTag
- skipDeployment: "false"
CDnewComponentTag-INT.NA-PreProd:
- name: CD_managementZone INT
- mzName: CD_managementZone/management-zone/CDnewComponentTag.name
- mzId: CD_managementZone/management-zone/CDnewComponentTag.id
- env: INT
- skipDeployment: "false"
CDnewComponentTag-INT.CN-PreProd:
- name: CD_managementZone INT
- mzName: CD_managementZone/management-zone/CDnewComponentTag.name
- mzId: CD_managementZone/management-zone/CDnewComponentTag.id
- env: INT
- skipDeployment: "false"
#TEST dashboards for EMEA/NA/CN
#Dry-run needed for all hubs
CDnewComponentTag-TEST:
- name: CD_managementZone TEST
- mzName: CD_managementZone/management-zone/CDnewComponentTag.name
- mzId: CD_managementZone/management-zone/CDnewComponentTag.id
- tag: newComponentTag
- env: TEST
- skipDeployment: "true"
#Configuration
CDnewComponentTag-TEST.EMEA-PreProd:
- name: CD_managementZone TEST
- mzName: CD_managementZone/management-zone/CDnewComponentTag.name
- mzId: CD_managementZone/management-zone/CDnewComponentTag.id
- tag: newComponentTag
- env: TEST
- skipDeployment: "false"
CDnewComponentTag-TEST.NA-PreProd:
- name: CD_managementZone TEST
- mzName: CD_managementZone/management-zone/CDnewComponentTag.name
- mzId: CD_managementZone/management-zone/CDnewComponentTag.id
- env: TEST
- skipDeployment: "false"
CDnewComponentTag-TEST.CN-PreProd:
- name: CD_managementZone TEST
- mzName: CD_managementZone/management-zone/CDnewComponentTag.name
- mzId: CD_managementZone/management-zone/CDnewComponentTag.id
- env: TEST
- skipDeployment: "false"

View File

@ -0,0 +1,308 @@
{
"metadata": {
"configurationVersions": [
3
],
"clusterVersion": "1.214.107.20210407-223952"
},
"dashboardMetadata": {
"name": "{{.name}}",
"shared": true,
"owner": "Ignacio.Goldman@partner.bmwgroup.com",
"dashboardFilter": {
"timeframe": "-24h to now"
},
"tags": [
"{{.tag}}"
]
},
"tiles": [
{
"name": "Custom chart",
"tileType": "CUSTOM_CHARTING",
"configured": true,
"bounds": {
"top": 228,
"left": 38,
"width": 1064,
"height": 304
},
"tileFilter": {},
"filterConfig": {
"type": "MIXED",
"customName": "Failure rate (HTTP 4xx/5xx errors)",
"defaultName": "Custom chart",
"chartConfig": {
"legendShown": true,
"type": "TIMESERIES",
"series": [
{
"metric": "builtin:service.errors.fourxx.rate",
"aggregation": "AVG",
"type": "BAR",
"entityType": "SERVICE",
"dimensions": [],
"sortAscending": false,
"sortColumn": false,
"aggregationRate": "TOTAL"
},
{
"metric": "builtin:service.errors.fivexx.rate",
"aggregation": "AVG",
"type": "BAR",
"entityType": "SERVICE",
"dimensions": [],
"sortAscending": false,
"sortColumn": true,
"aggregationRate": "TOTAL"
}
],
"resultMetadata": {
"nullbuiltin:service.errors.fivexx.rate|AVG|TOTAL|BAR|SERVICE": {
"lastModified": 1617956393463,
"customColor": "#ff0000"
},
"nullbuiltin:service.errors.fourxx.rate|AVG|TOTAL|BAR|SERVICE": {
"lastModified": 1617956441725,
"customColor": "#fff29a"
}
}
},
"filtersPerEntityType": {
"SERVICE": {
"AUTO_TAGS": [
"Environment:{{.env}}",
"Component:{{.tag}}"
]
}
}
}
},
{
"name": "Problems",
"tileType": "OPEN_PROBLEMS",
"configured": true,
"bounds": {
"top": 38,
"left": 950,
"width": 152,
"height": 152
},
"tileFilter": {
"managementZone": {
"id": "{{.mzId}}",
"name": "{{.mzName}}"
}
}
},
{
"name": "Overall Health",
"tileType": "HEADER",
"configured": true,
"bounds": {
"top": 0,
"left": 38,
"width": 1064,
"height": 38
},
"tileFilter": {}
},
{
"name": "Markdown",
"tileType": "MARKDOWN",
"configured": true,
"bounds": {
"top": 532,
"left": 38,
"width": 1064,
"height": 38
},
"tileFilter": {},
"markdown": "---\n"
},
{
"name": "Custom chart",
"tileType": "CUSTOM_CHARTING",
"configured": true,
"bounds": {
"top": 570,
"left": 38,
"width": 1064,
"height": 304
},
"tileFilter": {},
"filterConfig": {
"type": "MIXED",
"customName": "Response time, Request Count and Number of Errors",
"defaultName": "Custom chart",
"chartConfig": {
"legendShown": true,
"type": "TIMESERIES",
"series": [
{
"metric": "builtin:service.response.time",
"aggregation": "AVG",
"type": "LINE",
"entityType": "SERVICE",
"dimensions": [],
"sortAscending": false,
"sortColumn": false,
"aggregationRate": "TOTAL"
},
{
"metric": "builtin:service.requestCount.total",
"aggregation": "NONE",
"type": "BAR",
"entityType": "SERVICE",
"dimensions": [],
"sortAscending": false,
"sortColumn": false,
"aggregationRate": "TOTAL"
},
{
"metric": "builtin:service.errors.total.count",
"aggregation": "NONE",
"type": "BAR",
"entityType": "SERVICE",
"dimensions": [],
"sortAscending": false,
"sortColumn": true,
"aggregationRate": "TOTAL"
}
],
"resultMetadata": {
"nullbuiltin:service.requestCount.total|NONE|TOTAL|BAR|SERVICE": {
"lastModified": 1595275720776,
"customColor": "#008cdb"
},
"nullbuiltin:service.errors.total.count|NONE|TOTAL|BAR|SERVICE": {
"lastModified": 1595275955999,
"customColor": "#ef651f"
},
"nullbuiltin:service.response.time|AVG|TOTAL|LINE|SERVICE": {
"lastModified": 1595275686773,
"customColor": "#b4e5f9"
}
}
},
"filtersPerEntityType": {
"SERVICE": {
"AUTO_TAGS": [
"Environment:{{.env}}",
"Component:{{.tag}}"
]
}
}
}
},
{
"name": "Markdown",
"tileType": "MARKDOWN",
"configured": true,
"bounds": {
"top": 190,
"left": 38,
"width": 1064,
"height": 38
},
"tileFilter": {},
"markdown": "---\n"
},
{
"name": "",
"tileType": "DATABASES_OVERVIEW",
"configured": true,
"bounds": {
"top": 38,
"left": 646,
"width": 190,
"height": 152
},
"tileFilter": {},
"filterConfig": {
"type": "DATABASE",
"customName": "Databases",
"defaultName": "Databases",
"chartConfig": {
"legendShown": true,
"type": "TIMESERIES",
"series": [],
"resultMetadata": {}
},
"filtersPerEntityType": {
"DATABASE": {
"AUTO_TAGS": [
"Environment:{{.env}}",
"Component:{{.tag}}"
]
}
}
},
"chartVisible": true
},
{
"name": "",
"tileType": "SERVICES",
"configured": true,
"bounds": {
"top": 38,
"left": 342,
"width": 190,
"height": 152
},
"tileFilter": {},
"filterConfig": {
"type": "SERVICE",
"customName": "Services",
"defaultName": "Services",
"chartConfig": {
"legendShown": true,
"type": "TIMESERIES",
"series": [],
"resultMetadata": {}
},
"filtersPerEntityType": {
"SERVICE": {
"AUTO_TAGS": [
"Environment:{{.env}}",
"Component:{{.tag}}"
]
}
}
},
"chartVisible": true
},
{
"name": "",
"tileType": "HOSTS",
"configured": true,
"bounds": {
"top": 38,
"left": 38,
"width": 190,
"height": 152
},
"tileFilter": {},
"filterConfig": {
"type": "HOST",
"customName": "Hosts",
"defaultName": "Hosts",
"chartConfig": {
"legendShown": true,
"type": "TIMESERIES",
"series": [],
"resultMetadata": {}
},
"filtersPerEntityType": {
"HOST": {
"AUTO_TAGS": [
"Environment:{{.env}}",
"Component:{{.tag}}"
]
}
}
},
"chartVisible": true
}
]
}

View File

@ -0,0 +1,76 @@
## Management Zones configuration
### Excluding noisy services
*If you find services that are not relevant for the analysis, you can exclude them from the MZ.*
#### HealthResource, PingResource, PrometheusResource services
*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude*
*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.*
**How to exclude HealthResource?**
1. Open the file *default.json* configuration under the *CD_<app_name>/management-zone/* folder.
2. Copy the following rule template:
```
{
"comparisonInfo": {
"caseSensitive": true,
"negate": true,
"operator": "CONTAINS",
"type": "STRING",
"value": "HealthResource"
},
"key": {
"attribute": "SERVICE_NAME"
}
}
```
2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this:
```
{
"conditions": [
{
"comparisonInfo": {
"negate": false,
"operator": "EQUALS",
"type": "TAG",
"value": {
"context": "CONTEXTLESS",
"key": "Component",
"value": "{{.tag}}"
},
{
"comparisonInfo": {
"caseSensitive": true,
"negate": true,
"operator": "CONTAINS",
"type": "STRING",
"value": "HealthResource"
},
"key": {
"attribute": "SERVICE_NAME"
}
}
},
"key": {
"attribute": "SERVICE_TAGS"
}
}
],
"enabled": true,
"propagationTypes": [
"SERVICE_TO_PROCESS_GROUP_LIKE",
"SERVICE_TO_HOST_LIKE"
],
"type": "SERVICE"
}
```
3. Commit and pull request to merge the branch to the master:
```
git add <changes>
git commit -m "<app_name> configuration changes"
git push -u origin <branch>
```
Note: you can use the same logic to exclude (or include) any other entity to your Management Zone.

View File

@ -0,0 +1,76 @@
{
"dimensionalRules": [],
"name": "{{.name}}",
"rules": [
{
"conditions": [
{
"comparisonInfo": {
"negate": false,
"operator": "EQUALS",
"type": "TAG",
"value": {
"context": "CONTEXTLESS",
"key": "Component",
"value": "{{.tag}}"
}
},
"key": {
"attribute": "SERVICE_TAGS"
}
}
],
"enabled": true,
"propagationTypes": [
"SERVICE_TO_PROCESS_GROUP_LIKE",
"SERVICE_TO_HOST_LIKE"
],
"type": "SERVICE"
},
{
"conditions": [
{
"comparisonInfo": {
"negate": false,
"operator": "EQUALS",
"type": "TAG",
"value": {
"context": "CONTEXTLESS",
"key": "Component",
"value": "{{.tag}}"
}
},
"key": {
"attribute": "PROCESS_GROUP_TAGS"
}
}
],
"enabled": true,
"propagationTypes": [
"PROCESS_GROUP_TO_HOST"
],
"type": "PROCESS_GROUP"
},
{
"conditions": [
{
"comparisonInfo": {
"negate": false,
"operator": "EQUALS",
"type": "TAG",
"value": {
"context": "CONTEXTLESS",
"key": "Component",
"value": "{{.tag}}"
}
},
"key": {
"attribute": "HOST_TAGS"
}
}
],
"enabled": true,
"type": "HOST"
}
]
}

View File

@ -0,0 +1,6 @@
config:
- CDnewComponentTag: default.json
CDnewComponentTag:
- name: CD_managementZone
- tag: newComponentTag

View File

@ -0,0 +1,60 @@
## Configure Notification System
### MS Teams - Default
*Let's suppose you would like to start receiving alerts from Dynatrace via MS Teams just for your *EMEA PROD*.*
1. Open *notification.yaml* under your application configuration folder. By default, all notification systems are configured via MS Teams with an
https://empty webhook (not configured).
2. Create an incoming webhook in MS Teams. [How to?](https://www.dynatrace.com/support/help/shortlink/set-up-msteams-integration#configuration-in-microsoft-teams)
3. Add the incoming webhook under the webhook parameter for the `<app_name>-PROD.EMEA-Prod`:
```
<app_name>-PROD.EMEA-Prod:
- name: CD_<app_name> PROD
- alertingProfile: CD_<app_name>/alerting-profile/CD<app_name>-PROD.id
- webhook: <Add webhook here>
- skipDeployment: "false"
```
4. Save and commit changes:
```
git add <changes>
git commit -m "<app_name> configuration changes"
git push -u origin <branch>
```
Note: If you want to enable MS Teams for any other hub/stage, follow the same steps but make sure you're under the right configuration:
`<app_name>-<stage>.<dynatrace-env>-<stage>:`
### Email
*The team prefers to be alerted via email, not MS Teams*
1. Keep the MS Teams integration disabled, with the https://empty webhook:
```
<app_name>-PROD.EMEA-Prod:
- name: CD_<app_name> PROD
- alertingProfile: CD_<app_name>/alerting-profile/CD<app_name>-PROD.id
- webhook: https://empty
- skipDeployment: "false"
```
2. Create a new configuration template under config, using the email template:
```
config:
- CD<app_name>email: email.json
```
3. Describe the configuration below, using the following template:
```
CD<app_name>email.EMEA-Prod:
- name: CD_<app_name> PROD
- alertingProfile: CD_<app_name>/alerting-profile/CD<app_name>-PROD.id
- receivers: distributionEmailexample@bmw.de`
```
4. Save and commit changes:
```
git add <changes>
git commit -m "<app_name> configuration changes"
git push -u origin <branch>
```
### ITSM
Coming soon!

View File

@ -0,0 +1,13 @@
{
"active": true,
"alertingProfile": "{{.alertingProfile}}",
"bccReceivers": [],
"body": "{ProblemDetailsHTML}",
"ccReceivers": [],
"name": "{{.name}}",
"receivers": [
"{{.receivers}}"
],
"subject": "{State} Problem {ProblemID}: {ImpactedEntity}",
"type": "EMAIL"
}

View File

@ -0,0 +1,11 @@
{
"acceptAnyCertificate": false,
"active": true,
"alertingProfile": "{{.alertingProfile}}",
"headers": [],
"name": "{{.name}}",
"notifyEventMergesEnabled": false,
"payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}",
"type": "WEBHOOK",
"url": "{{.webhook}}"
}

View File

@ -0,0 +1,51 @@
config:
- CDnewComponentTag-PROD: msTeams.json
- CDnewComponentTag-INT: msTeams.json
#Prod notification system for EMEA/NA/CN
#Dry-run needed for all hubs
CDnewComponentTag-PROD:
- name: CD_managementZone PROD
- alertingProfile: CD_managementZone/alerting-profile/CDnewComponentTag-PROD.id
- webhook: https://empty
- skipDeployment: "true"
#Configuration
CDnewComponentTag-PROD.EMEA-Prod:
- name: CD_managementZone PROD
- alertingProfile: CD_managementZone/alerting-profile/CDnewComponentTag-PROD.id
- webhook: https://empty
- skipDeployment: "false"
CDnewComponentTag-PROD.NA-Prod:
- name: CD_managementZone PROD
- alertingProfile: CD_managementZone/alerting-profile/CDnewComponentTag-PROD.id
- webhook: https://empty
- skipDeployment: "false"
CDnewComponentTag-PROD.CN-Prod:
- name: CD_managementZone PROD
- alertingProfile: CD_managementZone/alerting-profile/CDnewComponentTag-PROD.id
- webhook: https://empty
- skipDeployment: "false"
#INT notification system for EMEA/NA/CN
#Dry-run needed for all hubs
CDnewComponentTag-INT:
- name: CD_managementZone INT
- alertingProfile: CD_managementZone/alerting-profile/CDnewComponentTag-INT.id
- webhook: https://empty
- skipDeployment: "true"
#Configuration
CDnewComponentTag-INT.EMEA-PreProd:
- name: CD_managementZone INT
- alertingProfile: CD_managementZone/alerting-profile/CDnewComponentTag-INT.id
- webhook: https://empty
- skipDeployment: "false"
CDnewComponentTag-INT.NA-PreProd:
- name: CD_managementZone INT
- alertingProfile: CD_managementZone/alerting-profile/CDnewComponentTag-INT.id
- webhook: https://empty
- skipDeployment: "false"
CDnewComponentTag-INT.CN-PreProd:
- name: CD_managementZone INT
- alertingProfile: CD_managementZone/alerting-profile/CDnewComponentTag-INT.id
- webhook: https://empty
- skipDeployment: "false"

View File

@ -0,0 +1,37 @@
# Synthetic Configuration
To calculate the Availability KPI, a synthetic must be configured.
1. Modify the synthetic-monitor.yaml file, providing:
- **Endpoint**: url intended to check the availability.
- **Location**:
- *synthetic private location*: If the endpoint is reachable within the BMW network.
```
- location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id
```
- *synthetic public location*: If the endpoint is reachable from the internet.
```
- location: GEOLOCATION-45AB48D9D6925ECC
```
2. Change `skipDeployment` to false.
i.e.
```
config:
- my-synthetic: default.json
my-synthetic:
- name: CD_BMW - bmw.com
- mzName: CD_google/management-zone/CDgoogle.name
- mzId: CD_google/management-zone/CDgoogle.id
- endpoint: https://google.com
- location: GEOLOCATION-45AB48D9D6925ECC
- skipDeployment: "false"
```
3. Commit and pull request to merge the branch to the master:
```
git add <changes>
git commit -m "<app_name> configuration changes"
git push -u origin <branch>
```

View File

@ -0,0 +1,82 @@
{
"anomalyDetection": {
"loadingTimeThresholds": {
"enabled": false,
"thresholds": [
{
"type": "TOTAL",
"valueMs": 0
}
]
},
"outageHandling": {
"globalOutage": true,
"localOutage": false,
"localOutagePolicy": {
"affectedLocations": 1,
"consecutiveRuns": 3
}
}
},
"automaticallyAssignedApps": [],
"enabled": true,
"frequencyMin": 1,
"locations": [
"{{.location}}"
],
"managementZones": [
{
"id": "{{.mzId}}",
"name": "{{.mzName}}"
}
],
"manuallyAssignedApps": [],
"name": "{{.name}}",
"requests": [
{
"entityId": "HTTP_CHECK_STEP-0BA53EC80CD7EE5A",
"name": "{{.name}}",
"sequenceNumber": 1
}
],
"script": {
"requests": [
{
"configuration": {
"acceptAnyCertificate": true,
"followRedirects": true,
"requestHeaders": [
{
"name": "accept",
"value": "application/json"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "api_key",
"value": "355DE89C-7B72-4EA3-BDD8-157C79EB2C23"
}
]
},
"description": "{{.name}}",
"method": "GET",
"url": "{{.endpoint}}",
"validation": {
"rules": [
{
"passIfFound": true,
"type": "httpStatusesList",
"value": "200"
}
],
"rulesChaining": "or"
}
}
],
"version": "1.0"
},
"tags": [],
"type": "HTTP"
}

View File

@ -0,0 +1,10 @@
config:
- newComponentTag: default.json
newComponentTag:
- name: CD_managementZone - <synthetic-name>
- mzName: CD_managementZone/management-zone/CDnewComponentTag.name
- mzId: CD_managementZone/management-zone/CDnewComponentTag.id
- endpoint: <url>
- location: <location>
- skipDeployment: "true"

View File

@ -0,0 +1,60 @@
config:
- CDabc-PROD: default.json
- CDabc-INT: default.json
#Prod alerting profiles for EMEA/NA/CN
#Dry-run needed for all hubs
CDabc-PROD:
- name: CD_ABC PROD
- tag: abc
- mzId: CD_ABC/management-zone/CDabc.id
- env: PROD
- skipDeployment: "true"
#Configuration
CDabc-PROD.EMEA-Prod:
- name: CD_ABC PROD
- tag: abc
- mzId: CD_ABC/management-zone/CDabc.id
- env: PROD
- skipDeployment: "false"
CDabc-PROD.NA-Prod:
- name: CD_ABC PROD
- tag: abc
- mzId: CD_ABC/management-zone/CDabc.id
- env: PROD
- skipDeployment: "false"
CDabc-PROD.CN-Prod:
- name: CD_ABC PROD
- tag: abc
- mzId: CD_ABC/management-zone/CDabc.id
- env: PROD
- skipDeployment: "false"
#INT alerting profiles for EMEA/NA/CN
#Dry-run needed for all hubs
CDabc-INT:
- name: CD_ABC INT
- tag: abc
- mzId: CD_ABC/management-zone/CDabc.id
- env: INT
- skipDeployment: "true"
#Configuration
CDabc-INT.EMEA-PreProd:
- name: CD_ABC INT
- tag: abc
- mzId: CD_ABC/management-zone/CDabc.id
- env: INT
- skipDeployment: "false"
CDabc-INT.NA-PreProd:
- name: CD_ABC INT
- tag: abc
- mzId: CD_ABC/management-zone/CDabc.id
- env: INT
- skipDeployment: "false"
CDabc-INT.CN-PreProd:
- name: CD_ABC INT
- tag: abc
- mzId: CD_ABC/management-zone/CDabc.id
- env: INT
- skipDeployment: "false"

View File

@ -0,0 +1,103 @@
{
"displayName": "{{.name}}",
"eventTypeFilters": [],
"managementZoneId": "{{.mzId}}",
"mzId": "{{.mzId}}",
"rules": [
{
"delayInMinutes": 0,
"severityLevel": "AVAILABILITY",
"tagFilter": {
"includeMode": "INCLUDE_ALL",
"tagFilters": [
{
"context": "CONTEXTLESS",
"key": "Component",
"value": "{{.tag}}"
},
{
"context": "CONTEXTLESS",
"key": "Environment",
"value": "{{.env}}"
}
]
}
},
{
"delayInMinutes": 10,
"severityLevel": "ERROR",
"tagFilter": {
"includeMode": "INCLUDE_ALL",
"tagFilters": [
{
"context": "CONTEXTLESS",
"key": "Component",
"value": "{{.tag}}"
},
{
"context": "CONTEXTLESS",
"key": "Environment",
"value": "{{.env}}"
}
]
}
},
{
"delayInMinutes": 30,
"severityLevel": "PERFORMANCE",
"tagFilter": {
"includeMode": "INCLUDE_ALL",
"tagFilters": [
{
"context": "CONTEXTLESS",
"key": "Component",
"value": "{{.tag}}"
},
{
"context": "CONTEXTLESS",
"key": "Environment",
"value": "{{.env}}"
}
]
}
},
{
"delayInMinutes": 30,
"severityLevel": "RESOURCE_CONTENTION",
"tagFilter": {
"includeMode": "INCLUDE_ALL",
"tagFilters": [
{
"context": "CONTEXTLESS",
"key": "Component",
"value": "{{.tag}}"
},
{
"context": "CONTEXTLESS",
"key": "Environment",
"value": "{{.env}}"
}
]
}
},
{
"delayInMinutes": 10,
"severityLevel": "CUSTOM_ALERT",
"tagFilter": {
"includeMode": "INCLUDE_ALL",
"tagFilters": [
{
"context": "CONTEXTLESS",
"key": "Component",
"value": "{{.tag}}"
},
{
"context": "CONTEXTLESS",
"key": "Environment",
"value": "{{.env}}"
}
]
}
}
]
}

View File

@ -0,0 +1,10 @@
## Custom metrics - Multidimensional Analysis
Under the Multidimensional Analysis you're able to save a view but not to create a metric. Instead, you can do it in here:
1. Create the metric within the Dynatrace UI using the Mutidimensional Analysis view.
2. Save the view and create a ticket for the OPAPM team [here](link). Please provide the following information:
- View created in the Dynatrace UI
- Your Dynatrace configuration folder (i.e. CD_<app_name>)
The OPAPM team will proceed creating the metric and updating your configuration in monaco.

View File

@ -0,0 +1,30 @@
## What is a custom service in Dynatrace?
- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.*
- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.*
- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.*
## How to create a custom service?
1. Open the file *custom-service-java.yaml* under your *CD_<app_name>/custom-service-java* configuration folder.
2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false".
3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...)
4. Commit and pull request to merge the branch to the master:
`git add <changes>`
`git commit -m "<app_name> configuration changes"`
`git push -u origin <branch>`
5. Restart the application where the custom service has been created.
6. Check if the custom service appears in Dynatrace.
Notes:
- As this configuration needs a restart, it's better to create it in a non-Prod application.
- The custom service will appear in Dynatrace iff there's traffic going through.
## What if i have multiple classes?
1. Clone *template-1-1.json* to a new one called *template-2-1.json*.
2. Edit *template-2-1.json* adding a 2nd rule separated with a coma.
3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e.
4. The template is ready to be used in the YAML file.
## What if i have multiple methods?
1. Same process as before, just call it template-1-2.json
2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json

View File

@ -0,0 +1,9 @@
config:
- customService1: template-1-1.json
customService1:
- name: myJOYNRService
- className: com.bmw.cc.conn.this.is.just.an.exampleClasss
- methodName: exampleJoynrMethod
- returnType: void
- skipDeployment: "true"

View File

@ -0,0 +1,23 @@
{
"enabled": true,
"name": "{{.name}}",
"processGroups": [],
"queueEntryPoint": false,
"queueEntryPointType": null,
"rules": [
{
"annotations": [],
"className": "{{.className}}",
"enabled": true,
"fileName": "",
"matcher": "EQUALS",
"methodRules": [
{
"argumentTypes": [],
"methodName": "{{.methodName}}",
"returnType": "{{.returnType}}"
}
]
}
]
}

View File

@ -0,0 +1,13 @@
## Update dashboard configuration
- Configuration changes (like in dashboards, alerting profiles) must be done via a pull request. Changing a dashboard just in the environment, will cause that it will be overwritten by Monaco.
- How to generate changes in your dashboards?
1. Modify the dashboard within the Dynatrace UI with the intended changes.
2. Copy the JSON of the dashboards. (Can be found under the dashboard settings)
3. Paste the copied JSON under the Monaco JSON, overwrite it.
4. Commit and pull request to merge the branch to the master:
```
git add <changes>
git commit -m "<app_name> configuration changes"
git push -u origin <branch>
```

View File

@ -0,0 +1,127 @@
config:
- CDabc-PROD: default.json
- CDabc-E2E: default.json
- CDabc-INT: default.json
- CDabc-TEST: default.json
#PROD dashboards for EMEA/NA/CN Prod
#Dry-run needed for all hubs
CDabc-PROD:
- name: CD_ABC PROD
- mzName: CD_ABC/management-zone/CDabc.name
- mzId: CD_ABC/management-zone/CDabc.id
- env: PROD
- skipDeployment: "true"
#Configuration
CDabc-PROD.EMEA-Prod:
- name: CD_ABC PROD
- mzName: CD_ABC/management-zone/CDabc.name
- mzId: CD_ABC/management-zone/CDabc.id
- tag: abc
- env: PROD
- skipDeployment: "false"
CDabc-PROD.NA-Prod:
- name: CD_ABC PROD
- mzName: CD_ABC/management-zone/CDabc.name
- mzId: CD_ABC/management-zone/CDabc.id
- tag: abc
- env: PROD
- skipDeployment: "false"
CDabc-PROD.CN-Prod:
- name: CD_ABC PROD
- mzName: CD_ABC/management-zone/CDabc.name
- mzId: CD_ABC/management-zone/CDabc.id
- tag: abc
- env: PROD
- skipDeployment: "false"
#E2E dashboards for EMEA/NA/CN E2E
#Dry-run needed for all hubs
CDabc-E2E:
- name: CD_ABC E2E
- mzName: CD_ABC/management-zone/CDabc.name
- mzId: CD_ABC/management-zone/CDabc.id
- env: E2E
- skipDeployment: "true"
#Configuration
CDabc-E2E.EMEA-Prod:
- name: CD_ABC E2E
- mzName: CD_ABC/management-zone/CDabc.name
- mzId: CD_ABC/management-zone/CDabc.id
- env: E2E
- tag: abc
- skipDeployment: "false"
CDabc-E2E.NA-Prod:
- name: CD_ABC E2E
- mzName: CD_ABC/management-zone/CDabc.name
- mzId: CD_ABC/management-zone/CDabc.id
- env: E2E
- tag: abc
- skipDeployment: "false"
CDabc-E2E.CN-Prod:
- name: CD_ABC E2E
- mzName: CD_ABC/management-zone/CDabc.name
- mzId: CD_ABC/management-zone/CDabc.id
- env: E2E
- tag: abc
- skipDeployment: "false"
#INT dashboards for EMEA/NA/CN
#Dry-run needed for all hubs
CDabc-INT:
- name: CD_ABC INT
- mzName: CD_ABC/management-zone/CDabc.name
- mzId: CD_ABC/management-zone/CDabc.id
- env: INT
- tag: abc
- skipDeployment: "true"
#Configuration
CDabc-INT.EMEA-PreProd:
- name: CD_ABC INT
- mzName: CD_ABC/management-zone/CDabc.name
- mzId: CD_ABC/management-zone/CDabc.id
- env: INT
- tag: abc
- skipDeployment: "false"
CDabc-INT.NA-PreProd:
- name: CD_ABC INT
- mzName: CD_ABC/management-zone/CDabc.name
- mzId: CD_ABC/management-zone/CDabc.id
- env: INT
- skipDeployment: "false"
CDabc-INT.CN-PreProd:
- name: CD_ABC INT
- mzName: CD_ABC/management-zone/CDabc.name
- mzId: CD_ABC/management-zone/CDabc.id
- env: INT
- skipDeployment: "false"
#TEST dashboards for EMEA/NA/CN
#Dry-run needed for all hubs
CDabc-TEST:
- name: CD_ABC TEST
- mzName: CD_ABC/management-zone/CDabc.name
- mzId: CD_ABC/management-zone/CDabc.id
- tag: abc
- env: TEST
- skipDeployment: "true"
#Configuration
CDabc-TEST.EMEA-PreProd:
- name: CD_ABC TEST
- mzName: CD_ABC/management-zone/CDabc.name
- mzId: CD_ABC/management-zone/CDabc.id
- tag: abc
- env: TEST
- skipDeployment: "false"
CDabc-TEST.NA-PreProd:
- name: CD_ABC TEST
- mzName: CD_ABC/management-zone/CDabc.name
- mzId: CD_ABC/management-zone/CDabc.id
- env: TEST
- skipDeployment: "false"
CDabc-TEST.CN-PreProd:
- name: CD_ABC TEST
- mzName: CD_ABC/management-zone/CDabc.name
- mzId: CD_ABC/management-zone/CDabc.id
- env: TEST
- skipDeployment: "false"

View File

@ -0,0 +1,308 @@
{
"metadata": {
"configurationVersions": [
3
],
"clusterVersion": "1.214.107.20210407-223952"
},
"dashboardMetadata": {
"name": "{{.name}}",
"shared": true,
"owner": "Ignacio.Goldman@partner.bmwgroup.com",
"dashboardFilter": {
"timeframe": "-24h to now"
},
"tags": [
"{{.tag}}"
]
},
"tiles": [
{
"name": "Custom chart",
"tileType": "CUSTOM_CHARTING",
"configured": true,
"bounds": {
"top": 228,
"left": 38,
"width": 1064,
"height": 304
},
"tileFilter": {},
"filterConfig": {
"type": "MIXED",
"customName": "Failure rate (HTTP 4xx/5xx errors)",
"defaultName": "Custom chart",
"chartConfig": {
"legendShown": true,
"type": "TIMESERIES",
"series": [
{
"metric": "builtin:service.errors.fourxx.rate",
"aggregation": "AVG",
"type": "BAR",
"entityType": "SERVICE",
"dimensions": [],
"sortAscending": false,
"sortColumn": false,
"aggregationRate": "TOTAL"
},
{
"metric": "builtin:service.errors.fivexx.rate",
"aggregation": "AVG",
"type": "BAR",
"entityType": "SERVICE",
"dimensions": [],
"sortAscending": false,
"sortColumn": true,
"aggregationRate": "TOTAL"
}
],
"resultMetadata": {
"nullbuiltin:service.errors.fivexx.rate|AVG|TOTAL|BAR|SERVICE": {
"lastModified": 1617956393463,
"customColor": "#ff0000"
},
"nullbuiltin:service.errors.fourxx.rate|AVG|TOTAL|BAR|SERVICE": {
"lastModified": 1617956441725,
"customColor": "#fff29a"
}
}
},
"filtersPerEntityType": {
"SERVICE": {
"AUTO_TAGS": [
"Environment:{{.env}}",
"Component:{{.tag}}"
]
}
}
}
},
{
"name": "Problems",
"tileType": "OPEN_PROBLEMS",
"configured": true,
"bounds": {
"top": 38,
"left": 950,
"width": 152,
"height": 152
},
"tileFilter": {
"managementZone": {
"id": "3832313249744862960",
"name": "CD_vehicle-service"
}
}
},
{
"name": "Overall Health",
"tileType": "HEADER",
"configured": true,
"bounds": {
"top": 0,
"left": 38,
"width": 1064,
"height": 38
},
"tileFilter": {}
},
{
"name": "Markdown",
"tileType": "MARKDOWN",
"configured": true,
"bounds": {
"top": 532,
"left": 38,
"width": 1064,
"height": 38
},
"tileFilter": {},
"markdown": "---\n"
},
{
"name": "Custom chart",
"tileType": "CUSTOM_CHARTING",
"configured": true,
"bounds": {
"top": 570,
"left": 38,
"width": 1064,
"height": 304
},
"tileFilter": {},
"filterConfig": {
"type": "MIXED",
"customName": "Response time, Request Count and Number of Errors",
"defaultName": "Custom chart",
"chartConfig": {
"legendShown": true,
"type": "TIMESERIES",
"series": [
{
"metric": "builtin:service.response.time",
"aggregation": "AVG",
"type": "LINE",
"entityType": "SERVICE",
"dimensions": [],
"sortAscending": false,
"sortColumn": false,
"aggregationRate": "TOTAL"
},
{
"metric": "builtin:service.requestCount.total",
"aggregation": "NONE",
"type": "BAR",
"entityType": "SERVICE",
"dimensions": [],
"sortAscending": false,
"sortColumn": false,
"aggregationRate": "TOTAL"
},
{
"metric": "builtin:service.errors.total.count",
"aggregation": "NONE",
"type": "BAR",
"entityType": "SERVICE",
"dimensions": [],
"sortAscending": false,
"sortColumn": true,
"aggregationRate": "TOTAL"
}
],
"resultMetadata": {
"nullbuiltin:service.requestCount.total|NONE|TOTAL|BAR|SERVICE": {
"lastModified": 1595275720776,
"customColor": "#008cdb"
},
"nullbuiltin:service.errors.total.count|NONE|TOTAL|BAR|SERVICE": {
"lastModified": 1595275955999,
"customColor": "#ef651f"
},
"nullbuiltin:service.response.time|AVG|TOTAL|LINE|SERVICE": {
"lastModified": 1595275686773,
"customColor": "#b4e5f9"
}
}
},
"filtersPerEntityType": {
"SERVICE": {
"AUTO_TAGS": [
"Environment:{{.env}}",
"Component:{{.tag}}"
]
}
}
}
},
{
"name": "Markdown",
"tileType": "MARKDOWN",
"configured": true,
"bounds": {
"top": 190,
"left": 38,
"width": 1064,
"height": 38
},
"tileFilter": {},
"markdown": "---\n"
},
{
"name": "",
"tileType": "DATABASES_OVERVIEW",
"configured": true,
"bounds": {
"top": 38,
"left": 646,
"width": 190,
"height": 152
},
"tileFilter": {},
"filterConfig": {
"type": "DATABASE",
"customName": "Databases",
"defaultName": "Databases",
"chartConfig": {
"legendShown": true,
"type": "TIMESERIES",
"series": [],
"resultMetadata": {}
},
"filtersPerEntityType": {
"DATABASE": {
"AUTO_TAGS": [
"Environment:{{.env}}",
"Component:{{.tag}}"
]
}
}
},
"chartVisible": true
},
{
"name": "",
"tileType": "SERVICES",
"configured": true,
"bounds": {
"top": 38,
"left": 342,
"width": 190,
"height": 152
},
"tileFilter": {},
"filterConfig": {
"type": "SERVICE",
"customName": "Services",
"defaultName": "Services",
"chartConfig": {
"legendShown": true,
"type": "TIMESERIES",
"series": [],
"resultMetadata": {}
},
"filtersPerEntityType": {
"SERVICE": {
"AUTO_TAGS": [
"Environment:{{.env}}",
"Component:{{.tag}}"
]
}
}
},
"chartVisible": true
},
{
"name": "",
"tileType": "HOSTS",
"configured": true,
"bounds": {
"top": 38,
"left": 38,
"width": 190,
"height": 152
},
"tileFilter": {},
"filterConfig": {
"type": "HOST",
"customName": "Hosts",
"defaultName": "Hosts",
"chartConfig": {
"legendShown": true,
"type": "TIMESERIES",
"series": [],
"resultMetadata": {}
},
"filtersPerEntityType": {
"HOST": {
"AUTO_TAGS": [
"Environment:{{.env}}",
"Component:{{.tag}}"
]
}
}
},
"chartVisible": true
}
]
}

View File

@ -0,0 +1,76 @@
## Management Zones configuration
### Excluding noisy services
*If you find services that are not relevant for the analysis, you can exclude them from the MZ.*
#### HealthResource, PingResource, PrometheusResource services
*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude*
*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.*
**How to exclude HealthResource?**
1. Open the file *default.json* configuration under the *CD_<app_name>/management-zone/* folder.
2. Copy the following rule template:
```
{
"comparisonInfo": {
"caseSensitive": true,
"negate": true,
"operator": "CONTAINS",
"type": "STRING",
"value": "HealthResource"
},
"key": {
"attribute": "SERVICE_NAME"
}
}
```
2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this:
```
{
"conditions": [
{
"comparisonInfo": {
"negate": false,
"operator": "EQUALS",
"type": "TAG",
"value": {
"context": "CONTEXTLESS",
"key": "Component",
"value": "{{.tag}}"
},
{
"comparisonInfo": {
"caseSensitive": true,
"negate": true,
"operator": "CONTAINS",
"type": "STRING",
"value": "HealthResource"
},
"key": {
"attribute": "SERVICE_NAME"
}
}
},
"key": {
"attribute": "SERVICE_TAGS"
}
}
],
"enabled": true,
"propagationTypes": [
"SERVICE_TO_PROCESS_GROUP_LIKE",
"SERVICE_TO_HOST_LIKE"
],
"type": "SERVICE"
}
```
3. Commit and pull request to merge the branch to the master:
```
git add <changes>
git commit -m "<app_name> configuration changes"
git push -u origin <branch>
```
Note: you can use the same logic to exclude (or include) any other entity to your Management Zone.

View File

@ -0,0 +1,76 @@
{
"dimensionalRules": [],
"name": "{{.name}}",
"rules": [
{
"conditions": [
{
"comparisonInfo": {
"negate": false,
"operator": "EQUALS",
"type": "TAG",
"value": {
"context": "CONTEXTLESS",
"key": "Component",
"value": "{{.tag}}"
}
},
"key": {
"attribute": "SERVICE_TAGS"
}
}
],
"enabled": true,
"propagationTypes": [
"SERVICE_TO_PROCESS_GROUP_LIKE",
"SERVICE_TO_HOST_LIKE"
],
"type": "SERVICE"
},
{
"conditions": [
{
"comparisonInfo": {
"negate": false,
"operator": "EQUALS",
"type": "TAG",
"value": {
"context": "CONTEXTLESS",
"key": "Component",
"value": "{{.tag}}"
}
},
"key": {
"attribute": "PROCESS_GROUP_TAGS"
}
}
],
"enabled": true,
"propagationTypes": [
"PROCESS_GROUP_TO_HOST"
],
"type": "PROCESS_GROUP"
},
{
"conditions": [
{
"comparisonInfo": {
"negate": false,
"operator": "EQUALS",
"type": "TAG",
"value": {
"context": "CONTEXTLESS",
"key": "Component",
"value": "{{.tag}}"
}
},
"key": {
"attribute": "HOST_TAGS"
}
}
],
"enabled": true,
"type": "HOST"
}
]
}

View File

@ -0,0 +1,6 @@
config:
- CDabc: default.json
CDabc:
- name: CD_ABC
- tag: abc

View File

@ -0,0 +1,60 @@
## Configure Notification System
### MS Teams - Default
*Let's suppose you would like to start receiving alerts from Dynatrace via MS Teams just for your *EMEA PROD*.*
1. Open *notification.yaml* under your application configuration folder. By default, all notification systems are configured via MS Teams with an
https://empty webhook (not configured).
2. Create an incoming webhook in MS Teams. [How to?](https://www.dynatrace.com/support/help/shortlink/set-up-msteams-integration#configuration-in-microsoft-teams)
3. Add the incoming webhook under the webhook parameter for the `<app_name>-PROD.EMEA-Prod`:
```
<app_name>-PROD.EMEA-Prod:
- name: CD_<app_name> PROD
- alertingProfile: CD_<app_name>/alerting-profile/CD<app_name>-PROD.id
- webhook: <Add webhook here>
- skipDeployment: "false"
```
4. Save and commit changes:
```
git add <changes>
git commit -m "<app_name> configuration changes"
git push -u origin <branch>
```
Note: If you want to enable MS Teams for any other hub/stage, follow the same steps but make sure you're under the right configuration:
`<app_name>-<stage>.<dynatrace-env>-<stage>:`
### Email
*The team prefers to be alerted via email, not MS Teams*
1. Keep the MS Teams integration disabled, with the https://empty webhook:
```
<app_name>-PROD.EMEA-Prod:
- name: CD_<app_name> PROD
- alertingProfile: CD_<app_name>/alerting-profile/CD<app_name>-PROD.id
- webhook: https://empty
- skipDeployment: "false"
```
2. Create a new configuration template under config, using the email template:
```
config:
- CD<app_name>email: email.json
```
3. Describe the configuration below, using the following template:
```
CD<app_name>email.EMEA-Prod:
- name: CD_<app_name> PROD
- alertingProfile: CD_<app_name>/alerting-profile/CD<app_name>-PROD.id
- receivers: distributionEmailexample@bmw.de`
```
4. Save and commit changes:
```
git add <changes>
git commit -m "<app_name> configuration changes"
git push -u origin <branch>
```
### ITSM
Coming soon!

View File

@ -0,0 +1,13 @@
{
"active": true,
"alertingProfile": "{{.alertingProfile}}",
"bccReceivers": [],
"body": "{ProblemDetailsHTML}",
"ccReceivers": [],
"name": "{{.name}}",
"receivers": [
"{{.receivers}}"
],
"subject": "{State} Problem {ProblemID}: {ImpactedEntity}",
"type": "EMAIL"
}

View File

@ -0,0 +1,11 @@
{
"acceptAnyCertificate": false,
"active": true,
"alertingProfile": "{{.alertingProfile}}",
"headers": [],
"name": "{{.name}}",
"notifyEventMergesEnabled": false,
"payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}",
"type": "WEBHOOK",
"url": "{{.webhook}}"
}

View File

@ -0,0 +1,51 @@
config:
- CDabc-PROD: msTeams.json
- CDabc-INT: msTeams.json
#Prod notification system for EMEA/NA/CN
#Dry-run needed for all hubs
CDabc-PROD:
- name: CD_ABC PROD
- alertingProfile: CD_ABC/alerting-profile/CDabc-PROD.id
- webhook: https://empty
- skipDeployment: "true"
#Configuration
CDabc-PROD.EMEA-Prod:
- name: CD_ABC PROD
- alertingProfile: CD_ABC/alerting-profile/CDabc-PROD.id
- webhook: https://empty
- skipDeployment: "false"
CDabc-PROD.NA-Prod:
- name: CD_ABC PROD
- alertingProfile: CD_ABC/alerting-profile/CDabc-PROD.id
- webhook: https://empty
- skipDeployment: "false"
CDabc-PROD.CN-Prod:
- name: CD_ABC PROD
- alertingProfile: CD_ABC/alerting-profile/CDabc-PROD.id
- webhook: https://empty
- skipDeployment: "false"
#INT notification system for EMEA/NA/CN
#Dry-run needed for all hubs
CDabc-INT:
- name: CD_ABC INT
- alertingProfile: CD_ABC/alerting-profile/CDabc-INT.id
- webhook: https://empty
- skipDeployment: "true"
#Configuration
CDabc-INT.EMEA-PreProd:
- name: CD_ABC INT
- alertingProfile: CD_ABC/alerting-profile/CDabc-INT.id
- webhook: https://empty
- skipDeployment: "false"
CDabc-INT.NA-PreProd:
- name: CD_ABC INT
- alertingProfile: CD_ABC/alerting-profile/CDabc-INT.id
- webhook: https://empty
- skipDeployment: "false"
CDabc-INT.CN-PreProd:
- name: CD_ABC INT
- alertingProfile: CD_ABC/alerting-profile/CDabc-INT.id
- webhook: https://empty
- skipDeployment: "false"

View File

@ -0,0 +1,37 @@
# Synthetic Configuration
To calculate the Availability KPI, a synthetic must be configured.
1. Modify the synthetic-monitor.yaml file, providing:
- **Endpoint**: url intended to check the availability.
- **Location**:
- *synthetic private location*: If the endpoint is reachable within the BMW network.
```
- location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id
```
- *synthetic public location*: If the endpoint is reachable from the internet.
```
- location: GEOLOCATION-45AB48D9D6925ECC
```
2. Change `skipDeployment` to false.
i.e.
```
config:
- my-synthetic: default.json
my-synthetic:
- name: CD_BMW - bmw.com
- mzName: CD_google/management-zone/CDgoogle.name
- mzId: CD_google/management-zone/CDgoogle.id
- endpoint: https://google.com
- location: GEOLOCATION-45AB48D9D6925ECC
- skipDeployment: "false"
```
3. Commit and pull request to merge the branch to the master:
```
git add <changes>
git commit -m "<app_name> configuration changes"
git push -u origin <branch>
```

View File

@ -0,0 +1,82 @@
{
"anomalyDetection": {
"loadingTimeThresholds": {
"enabled": false,
"thresholds": [
{
"type": "TOTAL",
"valueMs": 0
}
]
},
"outageHandling": {
"globalOutage": true,
"localOutage": false,
"localOutagePolicy": {
"affectedLocations": 1,
"consecutiveRuns": 3
}
}
},
"automaticallyAssignedApps": [],
"enabled": true,
"frequencyMin": 1,
"locations": [
"{{.location}}"
],
"managementZones": [
{
"id": "{{.mzId}}",
"name": "{{.mzName}}"
}
],
"manuallyAssignedApps": [],
"name": "{{.name}}",
"requests": [
{
"entityId": "HTTP_CHECK_STEP-0BA53EC80CD7EE5A",
"name": "{{.name}}",
"sequenceNumber": 1
}
],
"script": {
"requests": [
{
"configuration": {
"acceptAnyCertificate": true,
"followRedirects": true,
"requestHeaders": [
{
"name": "accept",
"value": "application/json"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "api_key",
"value": "355DE89C-7B72-4EA3-BDD8-157C79EB2C23"
}
]
},
"description": "{{.name}}",
"method": "GET",
"url": "{{.endpoint}}",
"validation": {
"rules": [
{
"passIfFound": true,
"type": "httpStatusesList",
"value": "200"
}
],
"rulesChaining": "or"
}
}
],
"version": "1.0"
},
"tags": [],
"type": "HTTP"
}

View File

@ -0,0 +1,10 @@
config:
- abc: default.json
abc:
- name: CD_ABC - <synthetic-name>
- mzName: CD_ABC/management-zone/CDabc.name
- mzId: CD_ABC/management-zone/CDabc.id
- endpoint: <url>
- location: <location>
- skipDeployment: "true"