openshift/runtime/previously onborded applications all compiling and with templates - READMEs linking the confluence for custom services & synthetics
parent
a51b7fc6ad
commit
8d850d1ce1
|
|
@ -0,0 +1,60 @@
|
||||||
|
config:
|
||||||
|
- CDAPIGW-PROD: default.json
|
||||||
|
- CDAPIGW-INT: default.json
|
||||||
|
|
||||||
|
#Prod alerting profiles for EMEA/NA/CN
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDAPIGW-PROD:
|
||||||
|
- name: CD_APIGW PROD
|
||||||
|
- tag: APIGW
|
||||||
|
- mzId: CD_APIGW/management-zone/CDAPIGW.id
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDAPIGW-PROD.EMEA-Prod:
|
||||||
|
- name: CD_APIGW PROD
|
||||||
|
- tag: APIGW
|
||||||
|
- mzId: CD_APIGW/management-zone/CDAPIGW.id
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDAPIGW-PROD.NA-Prod:
|
||||||
|
- name: CD_APIGW PROD
|
||||||
|
- tag: APIGW
|
||||||
|
- mzId: CD_APIGW/management-zone/CDAPIGW.id
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDAPIGW-PROD.CN-Prod:
|
||||||
|
- name: CD_APIGW PROD
|
||||||
|
- tag: APIGW
|
||||||
|
- mzId: CD_APIGW/management-zone/CDAPIGW.id
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "false"
|
||||||
|
|
||||||
|
|
||||||
|
#INT alerting profiles for EMEA/NA/CN
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDAPIGW-INT:
|
||||||
|
- name: CD_APIGW INT
|
||||||
|
- tag: APIGW
|
||||||
|
- mzId: CD_APIGW/management-zone/CDAPIGW.id
|
||||||
|
- env: INT
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDAPIGW-INT.EMEA-PreProd:
|
||||||
|
- name: CD_APIGW INT
|
||||||
|
- tag: APIGW
|
||||||
|
- mzId: CD_APIGW/management-zone/CDAPIGW.id
|
||||||
|
- env: INT
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDAPIGW-INT.NA-PreProd:
|
||||||
|
- name: CD_APIGW INT
|
||||||
|
- tag: APIGW
|
||||||
|
- mzId: CD_APIGW/management-zone/CDAPIGW.id
|
||||||
|
- env: INT
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDAPIGW-INT.CN-PreProd:
|
||||||
|
- name: CD_APIGW INT
|
||||||
|
- tag: APIGW
|
||||||
|
- mzId: CD_APIGW/management-zone/CDAPIGW.id
|
||||||
|
- env: INT
|
||||||
|
- skipDeployment: "false"
|
||||||
|
|
@ -98,25 +98,6 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
|
||||||
{
|
|
||||||
"delayInMinutes": 0,
|
|
||||||
"severityLevel": "MONITORING_UNAVAILABLE",
|
|
||||||
"tagFilter": {
|
|
||||||
"includeMode": "INCLUDE_ALL",
|
|
||||||
"tagFilters": [
|
|
||||||
{
|
|
||||||
"context": "CONTEXTLESS",
|
|
||||||
"key": "Component",
|
|
||||||
"value": "{{.tag}}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"context": "CONTEXTLESS",
|
|
||||||
"key": "Environment",
|
|
||||||
"value": "{{.env}}"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -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.
|
||||||
|
|
@ -0,0 +1,67 @@
|
||||||
|
### Process Group Detection Rules and Naming
|
||||||
|
|
||||||
|
#### Detection Rule or Naming?
|
||||||
|
|
||||||
|
For the explanation, we're using a real example of the Infotainment application:
|
||||||
|
|
||||||
|
!(PGNaming1)[../../../../img/PGNaming1.PNG]
|
||||||
|
|
||||||
|
Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking
|
||||||
|
the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your
|
||||||
|
application Management Zone.
|
||||||
|
|
||||||
|
In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in**
|
||||||
|
**this case, you MUST follow this guideline**
|
||||||
|
|
||||||
|
Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are
|
||||||
|
part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have?
|
||||||
|
|
||||||
|
If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the **
|
||||||
|
**same application**
|
||||||
|
|
||||||
|
Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming
|
||||||
|
the process group in the same way
|
||||||
|
|
||||||
|
*Same application*
|
||||||
|
- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of
|
||||||
|
seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring
|
||||||
|
- Solution: create a process group detection rule. Contact Dynatrace Expert
|
||||||
|
|
||||||
|
*Different application*
|
||||||
|
- Problem: Dynatrace is just naming in the same way applications that are different.
|
||||||
|
- Solution: This case is less severe, since it can be fixed with a process group naming rule.
|
||||||
|
|
||||||
|
|
||||||
|
What about our example?
|
||||||
|
!(PGNaming2)[../../../../img/PGNaming2.PNG]
|
||||||
|
!(PGNaming3)[../../../../img/PGNaming3.PNG]
|
||||||
|
|
||||||
|
Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload
|
||||||
|
within the metadata of each Process Group.
|
||||||
|
|
||||||
|
#### How to create a Process Group Detection Rule
|
||||||
|
1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this:
|
||||||
|
```
|
||||||
|
config:
|
||||||
|
- CDInfotainmentRule1: template.json
|
||||||
|
|
||||||
|
CDInfotainmentRule1:
|
||||||
|
- name: Infotainment Rule 1
|
||||||
|
- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName}
|
||||||
|
- tag: Infotainment
|
||||||
|
- skipDeployment: false
|
||||||
|
```
|
||||||
|
The result of the rule will be renaming the PG to this:
|
||||||
|
```
|
||||||
|
bon-information-prod ipa
|
||||||
|
bon-information-prod rsl
|
||||||
|
```
|
||||||
|
|
||||||
|
Other possible placeholders that you can use are for example:
|
||||||
|
{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$}
|
||||||
|
{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-}
|
||||||
|
{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$}
|
||||||
|
{ProcessGroup:KubernetesNamespace}
|
||||||
|
{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?}
|
||||||
|
|
||||||
|
You can combine different ones. Check the (documentation)[link] for more
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
config:
|
||||||
|
- CDAPIGW: template.json
|
||||||
|
|
||||||
|
CDAPIGW:
|
||||||
|
- name: MyProcessNamingRule
|
||||||
|
- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}"
|
||||||
|
- tag: APIGW
|
||||||
|
- skipDeployment: "true"
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
"displayName": "{{.name}}",
|
||||||
|
"enabled": true,
|
||||||
|
"metadata": {
|
||||||
|
"clusterVersion": "1.214.107.20210407-223952",
|
||||||
|
"configurationVersions": [
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"nameFormat": "{{.nameFormat}}",
|
||||||
|
"rules": [
|
||||||
|
{
|
||||||
|
"comparisonInfo": {
|
||||||
|
"negate": false,
|
||||||
|
"operator": "EQUALS",
|
||||||
|
"type": "TAG",
|
||||||
|
"value": {
|
||||||
|
"context": "CONTEXTLESS",
|
||||||
|
"key": "Component",
|
||||||
|
"value": "{{.tag}}"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"key": {
|
||||||
|
"attribute": "PROCESS_GROUP_TAGS"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type": "PROCESS_GROUP"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
### Service Naming Rules
|
||||||
|
|
||||||
|
A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same:
|
||||||
|
*DataDownloadV1*
|
||||||
|
*DataDownloadV1*
|
||||||
|
|
||||||
|
If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service.
|
||||||
|
|
||||||
|
*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process*
|
||||||
|
*Group detection rule*
|
||||||
|
|
||||||
|
In the case the PG are PROD and E2E, then we need to create a rule that looks like this:
|
||||||
|
|
||||||
|
```
|
||||||
|
config:
|
||||||
|
- CDInfotainmentRule1: template.json
|
||||||
|
|
||||||
|
CDInfotainmentRule1:
|
||||||
|
- name: Infotainment Rule 1
|
||||||
|
- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$}
|
||||||
|
- tag: Infotainment
|
||||||
|
- skipDeployment: false
|
||||||
|
```
|
||||||
|
|
||||||
|
The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in:
|
||||||
|
*DataDownloadV1 - prod*
|
||||||
|
*DataDownloadV1 - e2e*
|
||||||
|
|
||||||
|
Now, services will be easy to identify.
|
||||||
|
|
||||||
|
You can create rules based on any property/metadata. Some other placeholder's eamples:
|
||||||
|
{Service:DatabaseName} - E2E
|
||||||
|
{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment}
|
||||||
|
{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$}
|
||||||
|
{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
config:
|
||||||
|
- CDAPIGW: template.json
|
||||||
|
|
||||||
|
CDAPIGW:
|
||||||
|
- name: MyProcessNamingRule
|
||||||
|
- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}"
|
||||||
|
- tag: APIGW
|
||||||
|
- skipDeployment: "true"
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
"displayName": "{{.name}}",
|
||||||
|
"enabled": true,
|
||||||
|
"metadata": {
|
||||||
|
"clusterVersion": "1.214.107.20210407-223952",
|
||||||
|
"configurationVersions": [
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"nameFormat": "{{.nameFormat}}",
|
||||||
|
"rules": [
|
||||||
|
{
|
||||||
|
"comparisonInfo": {
|
||||||
|
"negate": false,
|
||||||
|
"operator": "EQUALS",
|
||||||
|
"type": "TAG",
|
||||||
|
"value": {
|
||||||
|
"context": "CONTEXTLESS",
|
||||||
|
"key": "Component",
|
||||||
|
"value": "{{.tag}}"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"key": {
|
||||||
|
"attribute": "SERVICE_TAGS"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type": "SERVICE"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
|
||||||
|
### How to configure custom services?
|
||||||
|
|
||||||
|
Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services.
|
||||||
|
|
@ -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"
|
||||||
|
|
@ -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}}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -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>
|
||||||
|
```
|
||||||
|
|
@ -0,0 +1,127 @@
|
||||||
|
config:
|
||||||
|
- CDAPIGW-PROD: default.json
|
||||||
|
- CDAPIGW-E2E: default.json
|
||||||
|
- CDAPIGW-INT: default.json
|
||||||
|
- CDAPIGW-TEST: default.json
|
||||||
|
|
||||||
|
#PROD dashboards for EMEA/NA/CN Prod
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDAPIGW-PROD:
|
||||||
|
- name: CD_APIGW PROD
|
||||||
|
- mzName: CD_APIGW/management-zone/CDAPIGW.name
|
||||||
|
- mzId: CD_APIGW/management-zone/CDAPIGW.id
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDAPIGW-PROD.EMEA-Prod:
|
||||||
|
- name: CD_APIGW PROD
|
||||||
|
- mzName: CD_APIGW/management-zone/CDAPIGW.name
|
||||||
|
- mzId: CD_APIGW/management-zone/CDAPIGW.id
|
||||||
|
- tag: APIGW
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDAPIGW-PROD.NA-Prod:
|
||||||
|
- name: CD_APIGW PROD
|
||||||
|
- mzName: CD_APIGW/management-zone/CDAPIGW.name
|
||||||
|
- mzId: CD_APIGW/management-zone/CDAPIGW.id
|
||||||
|
- tag: APIGW
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDAPIGW-PROD.CN-Prod:
|
||||||
|
- name: CD_APIGW PROD
|
||||||
|
- mzName: CD_APIGW/management-zone/CDAPIGW.name
|
||||||
|
- mzId: CD_APIGW/management-zone/CDAPIGW.id
|
||||||
|
- tag: APIGW
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "false"
|
||||||
|
|
||||||
|
#E2E dashboards for EMEA/NA/CN E2E
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDAPIGW-E2E:
|
||||||
|
- name: CD_APIGW E2E
|
||||||
|
- mzName: CD_APIGW/management-zone/CDAPIGW.name
|
||||||
|
- mzId: CD_APIGW/management-zone/CDAPIGW.id
|
||||||
|
- env: E2E
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDAPIGW-E2E.EMEA-Prod:
|
||||||
|
- name: CD_APIGW E2E
|
||||||
|
- mzName: CD_APIGW/management-zone/CDAPIGW.name
|
||||||
|
- mzId: CD_APIGW/management-zone/CDAPIGW.id
|
||||||
|
- env: E2E
|
||||||
|
- tag: APIGW
|
||||||
|
- skipDeployment: "true"
|
||||||
|
CDAPIGW-E2E.NA-Prod:
|
||||||
|
- name: CD_APIGW E2E
|
||||||
|
- mzName: CD_APIGW/management-zone/CDAPIGW.name
|
||||||
|
- mzId: CD_APIGW/management-zone/CDAPIGW.id
|
||||||
|
- env: E2E
|
||||||
|
- tag: APIGW
|
||||||
|
- skipDeployment: "true"
|
||||||
|
CDAPIGW-E2E.CN-Prod:
|
||||||
|
- name: CD_APIGW E2E
|
||||||
|
- mzName: CD_APIGW/management-zone/CDAPIGW.name
|
||||||
|
- mzId: CD_APIGW/management-zone/CDAPIGW.id
|
||||||
|
- env: E2E
|
||||||
|
- tag: APIGW
|
||||||
|
- skipDeployment: "true"
|
||||||
|
|
||||||
|
#INT dashboards for EMEA/NA/CN
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDAPIGW-INT:
|
||||||
|
- name: CD_APIGW INT
|
||||||
|
- mzName: CD_APIGW/management-zone/CDAPIGW.name
|
||||||
|
- mzId: CD_APIGW/management-zone/CDAPIGW.id
|
||||||
|
- env: INT
|
||||||
|
- tag: APIGW
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDAPIGW-INT.EMEA-PreProd:
|
||||||
|
- name: CD_APIGW INT
|
||||||
|
- mzName: CD_APIGW/management-zone/CDAPIGW.name
|
||||||
|
- mzId: CD_APIGW/management-zone/CDAPIGW.id
|
||||||
|
- env: INT
|
||||||
|
- tag: APIGW
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDAPIGW-INT.NA-PreProd:
|
||||||
|
- name: CD_APIGW INT
|
||||||
|
- mzName: CD_APIGW/management-zone/CDAPIGW.name
|
||||||
|
- mzId: CD_APIGW/management-zone/CDAPIGW.id
|
||||||
|
- env: INT
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDAPIGW-INT.CN-PreProd:
|
||||||
|
- name: CD_APIGW INT
|
||||||
|
- mzName: CD_APIGW/management-zone/CDAPIGW.name
|
||||||
|
- mzId: CD_APIGW/management-zone/CDAPIGW.id
|
||||||
|
- env: INT
|
||||||
|
- skipDeployment: "false"
|
||||||
|
|
||||||
|
#TEST dashboards for EMEA/NA/CN
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDAPIGW-TEST:
|
||||||
|
- name: CD_APIGW TEST
|
||||||
|
- mzName: CD_APIGW/management-zone/CDAPIGW.name
|
||||||
|
- mzId: CD_APIGW/management-zone/CDAPIGW.id
|
||||||
|
- tag: APIGW
|
||||||
|
- env: TEST
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDAPIGW-TEST.EMEA-PreProd:
|
||||||
|
- name: CD_APIGW TEST
|
||||||
|
- mzName: CD_APIGW/management-zone/CDAPIGW.name
|
||||||
|
- mzId: CD_APIGW/management-zone/CDAPIGW.id
|
||||||
|
- tag: APIGW
|
||||||
|
- env: TEST
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDAPIGW-TEST.NA-PreProd:
|
||||||
|
- name: CD_APIGW TEST
|
||||||
|
- mzName: CD_APIGW/management-zone/CDAPIGW.name
|
||||||
|
- mzId: CD_APIGW/management-zone/CDAPIGW.id
|
||||||
|
- env: TEST
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDAPIGW-TEST.CN-PreProd:
|
||||||
|
- name: CD_APIGW TEST
|
||||||
|
- mzName: CD_APIGW/management-zone/CDAPIGW.name
|
||||||
|
- mzId: CD_APIGW/management-zone/CDAPIGW.id
|
||||||
|
- env: TEST
|
||||||
|
- skipDeployment: "false"
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -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!
|
||||||
|
|
@ -0,0 +1,51 @@
|
||||||
|
config:
|
||||||
|
- CDAPIGW-PROD: msTeams.json
|
||||||
|
- CDAPIGW-INT: msTeams.json
|
||||||
|
|
||||||
|
#Prod notification system for EMEA/NA/CN
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDAPIGW-PROD:
|
||||||
|
- name: CD_APIGW PROD
|
||||||
|
- alertingProfile: CD_APIGW/alerting-profile/CDAPIGW-PROD.id
|
||||||
|
- webhook: https://empty
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDAPIGW-PROD.EMEA-Prod:
|
||||||
|
- name: CD_APIGW PROD
|
||||||
|
- alertingProfile: CD_APIGW/alerting-profile/CDAPIGW-PROD.id
|
||||||
|
- webhook: https://empty
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDAPIGW-PROD.NA-Prod:
|
||||||
|
- name: CD_APIGW PROD
|
||||||
|
- alertingProfile: CD_APIGW/alerting-profile/CDAPIGW-PROD.id
|
||||||
|
- webhook: https://empty
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDAPIGW-PROD.CN-Prod:
|
||||||
|
- name: CD_APIGW PROD
|
||||||
|
- alertingProfile: CD_APIGW/alerting-profile/CDAPIGW-PROD.id
|
||||||
|
- webhook: https://empty
|
||||||
|
- skipDeployment: "false"
|
||||||
|
|
||||||
|
#INT notification system for EMEA/NA/CN
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDAPIGW-INT:
|
||||||
|
- name: CD_APIGW INT
|
||||||
|
- alertingProfile: CD_APIGW/alerting-profile/CDAPIGW-INT.id
|
||||||
|
- webhook: https://empty
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDAPIGW-INT.EMEA-PreProd:
|
||||||
|
- name: CD_APIGW INT
|
||||||
|
- alertingProfile: CD_APIGW/alerting-profile/CDAPIGW-INT.id
|
||||||
|
- webhook: https://empty
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDAPIGW-INT.NA-PreProd:
|
||||||
|
- name: CD_APIGW INT
|
||||||
|
- alertingProfile: CD_APIGW/alerting-profile/CDAPIGW-INT.id
|
||||||
|
- webhook: https://empty
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDAPIGW-INT.CN-PreProd:
|
||||||
|
- name: CD_APIGW INT
|
||||||
|
- alertingProfile: CD_APIGW/alerting-profile/CDAPIGW-INT.id
|
||||||
|
- webhook: https://empty
|
||||||
|
- skipDeployment: "false"
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
|
||||||
|
### How to configure synthetics?
|
||||||
|
|
||||||
|
Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics.
|
||||||
|
|
@ -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"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
config:
|
||||||
|
- APIGW: default.json
|
||||||
|
|
||||||
|
APIGW:
|
||||||
|
- name: CD_APIGW - <synthetic-name>
|
||||||
|
- mzName: CD_APIGW/management-zone/CDAPIGW.name
|
||||||
|
- mzId: CD_APIGW/management-zone/CDAPIGW.id
|
||||||
|
- endpoint: <url>
|
||||||
|
- location: <location>
|
||||||
|
- skipDeployment: "true"
|
||||||
|
|
@ -0,0 +1,60 @@
|
||||||
|
config:
|
||||||
|
- CDAPIM-PROD: default.json
|
||||||
|
- CDAPIM-INT: default.json
|
||||||
|
|
||||||
|
#Prod alerting profiles for EMEA/NA/CN
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDAPIM-PROD:
|
||||||
|
- name: CD_APIM PROD
|
||||||
|
- tag: APIM
|
||||||
|
- mzId: CD_APIM/management-zone/CDAPIM.id
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDAPIM-PROD.EMEA-Prod:
|
||||||
|
- name: CD_APIM PROD
|
||||||
|
- tag: APIM
|
||||||
|
- mzId: CD_APIM/management-zone/CDAPIM.id
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDAPIM-PROD.NA-Prod:
|
||||||
|
- name: CD_APIM PROD
|
||||||
|
- tag: APIM
|
||||||
|
- mzId: CD_APIM/management-zone/CDAPIM.id
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDAPIM-PROD.CN-Prod:
|
||||||
|
- name: CD_APIM PROD
|
||||||
|
- tag: APIM
|
||||||
|
- mzId: CD_APIM/management-zone/CDAPIM.id
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "false"
|
||||||
|
|
||||||
|
|
||||||
|
#INT alerting profiles for EMEA/NA/CN
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDAPIM-INT:
|
||||||
|
- name: CD_APIM INT
|
||||||
|
- tag: APIM
|
||||||
|
- mzId: CD_APIM/management-zone/CDAPIM.id
|
||||||
|
- env: INT
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDAPIM-INT.EMEA-PreProd:
|
||||||
|
- name: CD_APIM INT
|
||||||
|
- tag: APIM
|
||||||
|
- mzId: CD_APIM/management-zone/CDAPIM.id
|
||||||
|
- env: INT
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDAPIM-INT.NA-PreProd:
|
||||||
|
- name: CD_APIM INT
|
||||||
|
- tag: APIM
|
||||||
|
- mzId: CD_APIM/management-zone/CDAPIM.id
|
||||||
|
- env: INT
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDAPIM-INT.CN-PreProd:
|
||||||
|
- name: CD_APIM INT
|
||||||
|
- tag: APIM
|
||||||
|
- mzId: CD_APIM/management-zone/CDAPIM.id
|
||||||
|
- env: INT
|
||||||
|
- skipDeployment: "false"
|
||||||
|
|
@ -8,12 +8,17 @@
|
||||||
"delayInMinutes": 0,
|
"delayInMinutes": 0,
|
||||||
"severityLevel": "AVAILABILITY",
|
"severityLevel": "AVAILABILITY",
|
||||||
"tagFilter": {
|
"tagFilter": {
|
||||||
"includeMode": "INCLUDE_ANY",
|
"includeMode": "INCLUDE_ALL",
|
||||||
"tagFilters": [
|
"tagFilters": [
|
||||||
{
|
{
|
||||||
"context": "CONTEXTLESS",
|
"context": "CONTEXTLESS",
|
||||||
"key": "Component",
|
"key": "Component",
|
||||||
"value": "{{.tag}}"
|
"value": "{{.tag}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"context": "CONTEXTLESS",
|
||||||
|
"key": "Environment",
|
||||||
|
"value": "{{.env}}"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -22,12 +27,17 @@
|
||||||
"delayInMinutes": 10,
|
"delayInMinutes": 10,
|
||||||
"severityLevel": "ERROR",
|
"severityLevel": "ERROR",
|
||||||
"tagFilter": {
|
"tagFilter": {
|
||||||
"includeMode": "INCLUDE_ANY",
|
"includeMode": "INCLUDE_ALL",
|
||||||
"tagFilters": [
|
"tagFilters": [
|
||||||
{
|
{
|
||||||
"context": "CONTEXTLESS",
|
"context": "CONTEXTLESS",
|
||||||
"key": "Component",
|
"key": "Component",
|
||||||
"value": "{{.tag}}"
|
"value": "{{.tag}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"context": "CONTEXTLESS",
|
||||||
|
"key": "Environment",
|
||||||
|
"value": "{{.env}}"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -36,12 +46,17 @@
|
||||||
"delayInMinutes": 30,
|
"delayInMinutes": 30,
|
||||||
"severityLevel": "PERFORMANCE",
|
"severityLevel": "PERFORMANCE",
|
||||||
"tagFilter": {
|
"tagFilter": {
|
||||||
"includeMode": "INCLUDE_ANY",
|
"includeMode": "INCLUDE_ALL",
|
||||||
"tagFilters": [
|
"tagFilters": [
|
||||||
{
|
{
|
||||||
"context": "CONTEXTLESS",
|
"context": "CONTEXTLESS",
|
||||||
"key": "Component",
|
"key": "Component",
|
||||||
"value": "{{.tag}}"
|
"value": "{{.tag}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"context": "CONTEXTLESS",
|
||||||
|
"key": "Environment",
|
||||||
|
"value": "{{.env}}"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -50,12 +65,17 @@
|
||||||
"delayInMinutes": 30,
|
"delayInMinutes": 30,
|
||||||
"severityLevel": "RESOURCE_CONTENTION",
|
"severityLevel": "RESOURCE_CONTENTION",
|
||||||
"tagFilter": {
|
"tagFilter": {
|
||||||
"includeMode": "INCLUDE_ANY",
|
"includeMode": "INCLUDE_ALL",
|
||||||
"tagFilters": [
|
"tagFilters": [
|
||||||
{
|
{
|
||||||
"context": "CONTEXTLESS",
|
"context": "CONTEXTLESS",
|
||||||
"key": "Component",
|
"key": "Component",
|
||||||
"value": "{{.tag}}"
|
"value": "{{.tag}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"context": "CONTEXTLESS",
|
||||||
|
"key": "Environment",
|
||||||
|
"value": "{{.env}}"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -64,26 +84,17 @@
|
||||||
"delayInMinutes": 10,
|
"delayInMinutes": 10,
|
||||||
"severityLevel": "CUSTOM_ALERT",
|
"severityLevel": "CUSTOM_ALERT",
|
||||||
"tagFilter": {
|
"tagFilter": {
|
||||||
"includeMode": "INCLUDE_ANY",
|
"includeMode": "INCLUDE_ALL",
|
||||||
"tagFilters": [
|
"tagFilters": [
|
||||||
{
|
{
|
||||||
"context": "CONTEXTLESS",
|
"context": "CONTEXTLESS",
|
||||||
"key": "Component",
|
"key": "Component",
|
||||||
"value": "{{.tag}}"
|
"value": "{{.tag}}"
|
||||||
}
|
},
|
||||||
]
|
{
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"delayInMinutes": 0,
|
|
||||||
"severityLevel": "MONITORING_UNAVAILABLE",
|
|
||||||
"tagFilter": {
|
|
||||||
"includeMode": "INCLUDE_ANY",
|
|
||||||
"tagFilters": [
|
|
||||||
{
|
|
||||||
"context": "CONTEXTLESS",
|
"context": "CONTEXTLESS",
|
||||||
"key": "Component",
|
"key": "Environment",
|
||||||
"value": "{{.tag}}"
|
"value": "{{.env}}"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -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.
|
||||||
|
|
@ -0,0 +1,67 @@
|
||||||
|
### Process Group Detection Rules and Naming
|
||||||
|
|
||||||
|
#### Detection Rule or Naming?
|
||||||
|
|
||||||
|
For the explanation, we're using a real example of the Infotainment application:
|
||||||
|
|
||||||
|
!(PGNaming1)[../../../../img/PGNaming1.PNG]
|
||||||
|
|
||||||
|
Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking
|
||||||
|
the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your
|
||||||
|
application Management Zone.
|
||||||
|
|
||||||
|
In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in**
|
||||||
|
**this case, you MUST follow this guideline**
|
||||||
|
|
||||||
|
Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are
|
||||||
|
part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have?
|
||||||
|
|
||||||
|
If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the **
|
||||||
|
**same application**
|
||||||
|
|
||||||
|
Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming
|
||||||
|
the process group in the same way
|
||||||
|
|
||||||
|
*Same application*
|
||||||
|
- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of
|
||||||
|
seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring
|
||||||
|
- Solution: create a process group detection rule. Contact Dynatrace Expert
|
||||||
|
|
||||||
|
*Different application*
|
||||||
|
- Problem: Dynatrace is just naming in the same way applications that are different.
|
||||||
|
- Solution: This case is less severe, since it can be fixed with a process group naming rule.
|
||||||
|
|
||||||
|
|
||||||
|
What about our example?
|
||||||
|
!(PGNaming2)[../../../../img/PGNaming2.PNG]
|
||||||
|
!(PGNaming3)[../../../../img/PGNaming3.PNG]
|
||||||
|
|
||||||
|
Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload
|
||||||
|
within the metadata of each Process Group.
|
||||||
|
|
||||||
|
#### How to create a Process Group Detection Rule
|
||||||
|
1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this:
|
||||||
|
```
|
||||||
|
config:
|
||||||
|
- CDInfotainmentRule1: template.json
|
||||||
|
|
||||||
|
CDInfotainmentRule1:
|
||||||
|
- name: Infotainment Rule 1
|
||||||
|
- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName}
|
||||||
|
- tag: Infotainment
|
||||||
|
- skipDeployment: false
|
||||||
|
```
|
||||||
|
The result of the rule will be renaming the PG to this:
|
||||||
|
```
|
||||||
|
bon-information-prod ipa
|
||||||
|
bon-information-prod rsl
|
||||||
|
```
|
||||||
|
|
||||||
|
Other possible placeholders that you can use are for example:
|
||||||
|
{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$}
|
||||||
|
{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-}
|
||||||
|
{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$}
|
||||||
|
{ProcessGroup:KubernetesNamespace}
|
||||||
|
{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?}
|
||||||
|
|
||||||
|
You can combine different ones. Check the (documentation)[link] for more
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
config:
|
||||||
|
- CDAPIM: template.json
|
||||||
|
|
||||||
|
CDAPIM:
|
||||||
|
- name: MyProcessNamingRule
|
||||||
|
- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}"
|
||||||
|
- tag: APIM
|
||||||
|
- skipDeployment: "true"
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
"displayName": "{{.name}}",
|
||||||
|
"enabled": true,
|
||||||
|
"metadata": {
|
||||||
|
"clusterVersion": "1.214.107.20210407-223952",
|
||||||
|
"configurationVersions": [
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"nameFormat": "{{.nameFormat}}",
|
||||||
|
"rules": [
|
||||||
|
{
|
||||||
|
"comparisonInfo": {
|
||||||
|
"negate": false,
|
||||||
|
"operator": "EQUALS",
|
||||||
|
"type": "TAG",
|
||||||
|
"value": {
|
||||||
|
"context": "CONTEXTLESS",
|
||||||
|
"key": "Component",
|
||||||
|
"value": "{{.tag}}"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"key": {
|
||||||
|
"attribute": "PROCESS_GROUP_TAGS"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type": "PROCESS_GROUP"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
### Service Naming Rules
|
||||||
|
|
||||||
|
A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same:
|
||||||
|
*DataDownloadV1*
|
||||||
|
*DataDownloadV1*
|
||||||
|
|
||||||
|
If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service.
|
||||||
|
|
||||||
|
*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process*
|
||||||
|
*Group detection rule*
|
||||||
|
|
||||||
|
In the case the PG are PROD and E2E, then we need to create a rule that looks like this:
|
||||||
|
|
||||||
|
```
|
||||||
|
config:
|
||||||
|
- CDInfotainmentRule1: template.json
|
||||||
|
|
||||||
|
CDInfotainmentRule1:
|
||||||
|
- name: Infotainment Rule 1
|
||||||
|
- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$}
|
||||||
|
- tag: Infotainment
|
||||||
|
- skipDeployment: false
|
||||||
|
```
|
||||||
|
|
||||||
|
The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in:
|
||||||
|
*DataDownloadV1 - prod*
|
||||||
|
*DataDownloadV1 - e2e*
|
||||||
|
|
||||||
|
Now, services will be easy to identify.
|
||||||
|
|
||||||
|
You can create rules based on any property/metadata. Some other placeholder's eamples:
|
||||||
|
{Service:DatabaseName} - E2E
|
||||||
|
{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment}
|
||||||
|
{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$}
|
||||||
|
{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
config:
|
||||||
|
- CDAPIM: template.json
|
||||||
|
|
||||||
|
CDAPIM:
|
||||||
|
- name: MyProcessNamingRule
|
||||||
|
- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}"
|
||||||
|
- tag: APIM
|
||||||
|
- skipDeployment: "true"
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
"displayName": "{{.name}}",
|
||||||
|
"enabled": true,
|
||||||
|
"metadata": {
|
||||||
|
"clusterVersion": "1.214.107.20210407-223952",
|
||||||
|
"configurationVersions": [
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"nameFormat": "{{.nameFormat}}",
|
||||||
|
"rules": [
|
||||||
|
{
|
||||||
|
"comparisonInfo": {
|
||||||
|
"negate": false,
|
||||||
|
"operator": "EQUALS",
|
||||||
|
"type": "TAG",
|
||||||
|
"value": {
|
||||||
|
"context": "CONTEXTLESS",
|
||||||
|
"key": "Component",
|
||||||
|
"value": "{{.tag}}"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"key": {
|
||||||
|
"attribute": "SERVICE_TAGS"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type": "SERVICE"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
|
||||||
|
### How to configure custom services?
|
||||||
|
|
||||||
|
Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services.
|
||||||
|
|
@ -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"
|
||||||
|
|
@ -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}}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -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>
|
||||||
|
```
|
||||||
|
|
@ -0,0 +1,127 @@
|
||||||
|
config:
|
||||||
|
- CDAPIM-PROD: default.json
|
||||||
|
- CDAPIM-E2E: default.json
|
||||||
|
- CDAPIM-INT: default.json
|
||||||
|
- CDAPIM-TEST: default.json
|
||||||
|
|
||||||
|
#PROD dashboards for EMEA/NA/CN Prod
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDAPIM-PROD:
|
||||||
|
- name: CD_APIM PROD
|
||||||
|
- mzName: CD_APIM/management-zone/CDAPIM.name
|
||||||
|
- mzId: CD_APIM/management-zone/CDAPIM.id
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDAPIM-PROD.EMEA-Prod:
|
||||||
|
- name: CD_APIM PROD
|
||||||
|
- mzName: CD_APIM/management-zone/CDAPIM.name
|
||||||
|
- mzId: CD_APIM/management-zone/CDAPIM.id
|
||||||
|
- tag: APIM
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDAPIM-PROD.NA-Prod:
|
||||||
|
- name: CD_APIM PROD
|
||||||
|
- mzName: CD_APIM/management-zone/CDAPIM.name
|
||||||
|
- mzId: CD_APIM/management-zone/CDAPIM.id
|
||||||
|
- tag: APIM
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDAPIM-PROD.CN-Prod:
|
||||||
|
- name: CD_APIM PROD
|
||||||
|
- mzName: CD_APIM/management-zone/CDAPIM.name
|
||||||
|
- mzId: CD_APIM/management-zone/CDAPIM.id
|
||||||
|
- tag: APIM
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "false"
|
||||||
|
|
||||||
|
#E2E dashboards for EMEA/NA/CN E2E
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDAPIM-E2E:
|
||||||
|
- name: CD_APIM E2E
|
||||||
|
- mzName: CD_APIM/management-zone/CDAPIM.name
|
||||||
|
- mzId: CD_APIM/management-zone/CDAPIM.id
|
||||||
|
- env: E2E
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDAPIM-E2E.EMEA-Prod:
|
||||||
|
- name: CD_APIM E2E
|
||||||
|
- mzName: CD_APIM/management-zone/CDAPIM.name
|
||||||
|
- mzId: CD_APIM/management-zone/CDAPIM.id
|
||||||
|
- env: E2E
|
||||||
|
- tag: APIM
|
||||||
|
- skipDeployment: "true"
|
||||||
|
CDAPIM-E2E.NA-Prod:
|
||||||
|
- name: CD_APIM E2E
|
||||||
|
- mzName: CD_APIM/management-zone/CDAPIM.name
|
||||||
|
- mzId: CD_APIM/management-zone/CDAPIM.id
|
||||||
|
- env: E2E
|
||||||
|
- tag: APIM
|
||||||
|
- skipDeployment: "true"
|
||||||
|
CDAPIM-E2E.CN-Prod:
|
||||||
|
- name: CD_APIM E2E
|
||||||
|
- mzName: CD_APIM/management-zone/CDAPIM.name
|
||||||
|
- mzId: CD_APIM/management-zone/CDAPIM.id
|
||||||
|
- env: E2E
|
||||||
|
- tag: APIM
|
||||||
|
- skipDeployment: "true"
|
||||||
|
|
||||||
|
#INT dashboards for EMEA/NA/CN
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDAPIM-INT:
|
||||||
|
- name: CD_APIM INT
|
||||||
|
- mzName: CD_APIM/management-zone/CDAPIM.name
|
||||||
|
- mzId: CD_APIM/management-zone/CDAPIM.id
|
||||||
|
- env: INT
|
||||||
|
- tag: APIM
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDAPIM-INT.EMEA-PreProd:
|
||||||
|
- name: CD_APIM INT
|
||||||
|
- mzName: CD_APIM/management-zone/CDAPIM.name
|
||||||
|
- mzId: CD_APIM/management-zone/CDAPIM.id
|
||||||
|
- env: INT
|
||||||
|
- tag: APIM
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDAPIM-INT.NA-PreProd:
|
||||||
|
- name: CD_APIM INT
|
||||||
|
- mzName: CD_APIM/management-zone/CDAPIM.name
|
||||||
|
- mzId: CD_APIM/management-zone/CDAPIM.id
|
||||||
|
- env: INT
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDAPIM-INT.CN-PreProd:
|
||||||
|
- name: CD_APIM INT
|
||||||
|
- mzName: CD_APIM/management-zone/CDAPIM.name
|
||||||
|
- mzId: CD_APIM/management-zone/CDAPIM.id
|
||||||
|
- env: INT
|
||||||
|
- skipDeployment: "false"
|
||||||
|
|
||||||
|
#TEST dashboards for EMEA/NA/CN
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDAPIM-TEST:
|
||||||
|
- name: CD_APIM TEST
|
||||||
|
- mzName: CD_APIM/management-zone/CDAPIM.name
|
||||||
|
- mzId: CD_APIM/management-zone/CDAPIM.id
|
||||||
|
- tag: APIM
|
||||||
|
- env: TEST
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDAPIM-TEST.EMEA-PreProd:
|
||||||
|
- name: CD_APIM TEST
|
||||||
|
- mzName: CD_APIM/management-zone/CDAPIM.name
|
||||||
|
- mzId: CD_APIM/management-zone/CDAPIM.id
|
||||||
|
- tag: APIM
|
||||||
|
- env: TEST
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDAPIM-TEST.NA-PreProd:
|
||||||
|
- name: CD_APIM TEST
|
||||||
|
- mzName: CD_APIM/management-zone/CDAPIM.name
|
||||||
|
- mzId: CD_APIM/management-zone/CDAPIM.id
|
||||||
|
- env: TEST
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDAPIM-TEST.CN-PreProd:
|
||||||
|
- name: CD_APIM TEST
|
||||||
|
- mzName: CD_APIM/management-zone/CDAPIM.name
|
||||||
|
- mzId: CD_APIM/management-zone/CDAPIM.id
|
||||||
|
- env: TEST
|
||||||
|
- skipDeployment: "false"
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -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!
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"alertingProfile": "{{.alertingProfile}}",
|
||||||
|
"bccReceivers": [],
|
||||||
|
"body": "{ProblemDetailsHTML}",
|
||||||
|
"ccReceivers": [],
|
||||||
|
"name": "{{.name}}",
|
||||||
|
"receivers": [
|
||||||
|
"{{.receivers}}"
|
||||||
|
],
|
||||||
|
"subject": "{State} Problem {ProblemID}: {ImpactedEntity}",
|
||||||
|
"type": "EMAIL"
|
||||||
|
}
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"acceptAnyCertificate": false,
|
"acceptAnyCertificate": false,
|
||||||
"active": true,
|
"active": true,
|
||||||
"alertingProfile": "{{.apid}}",
|
"alertingProfile": "{{.alertingProfile}}",
|
||||||
"headers": [],
|
"headers": [],
|
||||||
"name": "{{.name}}",
|
"name": "{{.name}}",
|
||||||
"notifyEventMergesEnabled": false,
|
"notifyEventMergesEnabled": false,
|
||||||
|
|
@ -0,0 +1,51 @@
|
||||||
|
config:
|
||||||
|
- CDAPIM-PROD: msTeams.json
|
||||||
|
- CDAPIM-INT: msTeams.json
|
||||||
|
|
||||||
|
#Prod notification system for EMEA/NA/CN
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDAPIM-PROD:
|
||||||
|
- name: CD_APIM PROD
|
||||||
|
- alertingProfile: CD_APIM/alerting-profile/CDAPIM-PROD.id
|
||||||
|
- webhook: https://empty
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDAPIM-PROD.EMEA-Prod:
|
||||||
|
- name: CD_APIM PROD
|
||||||
|
- alertingProfile: CD_APIM/alerting-profile/CDAPIM-PROD.id
|
||||||
|
- webhook: https://empty
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDAPIM-PROD.NA-Prod:
|
||||||
|
- name: CD_APIM PROD
|
||||||
|
- alertingProfile: CD_APIM/alerting-profile/CDAPIM-PROD.id
|
||||||
|
- webhook: https://empty
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDAPIM-PROD.CN-Prod:
|
||||||
|
- name: CD_APIM PROD
|
||||||
|
- alertingProfile: CD_APIM/alerting-profile/CDAPIM-PROD.id
|
||||||
|
- webhook: https://empty
|
||||||
|
- skipDeployment: "false"
|
||||||
|
|
||||||
|
#INT notification system for EMEA/NA/CN
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDAPIM-INT:
|
||||||
|
- name: CD_APIM INT
|
||||||
|
- alertingProfile: CD_APIM/alerting-profile/CDAPIM-INT.id
|
||||||
|
- webhook: https://empty
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDAPIM-INT.EMEA-PreProd:
|
||||||
|
- name: CD_APIM INT
|
||||||
|
- alertingProfile: CD_APIM/alerting-profile/CDAPIM-INT.id
|
||||||
|
- webhook: https://empty
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDAPIM-INT.NA-PreProd:
|
||||||
|
- name: CD_APIM INT
|
||||||
|
- alertingProfile: CD_APIM/alerting-profile/CDAPIM-INT.id
|
||||||
|
- webhook: https://empty
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDAPIM-INT.CN-PreProd:
|
||||||
|
- name: CD_APIM INT
|
||||||
|
- alertingProfile: CD_APIM/alerting-profile/CDAPIM-INT.id
|
||||||
|
- webhook: https://empty
|
||||||
|
- skipDeployment: "false"
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
|
||||||
|
### How to configure synthetics?
|
||||||
|
|
||||||
|
Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics.
|
||||||
|
|
@ -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"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
config:
|
||||||
|
- APIM: default.json
|
||||||
|
|
||||||
|
APIM:
|
||||||
|
- name: CD_APIM - <synthetic-name>
|
||||||
|
- mzName: CD_APIM/management-zone/CDAPIM.name
|
||||||
|
- mzId: CD_APIM/management-zone/CDAPIM.id
|
||||||
|
- endpoint: <url>
|
||||||
|
- location: <location>
|
||||||
|
- skipDeployment: "true"
|
||||||
|
|
@ -1,92 +0,0 @@
|
||||||
{
|
|
||||||
"displayName": "{{.name}}",
|
|
||||||
"eventTypeFilters": [],
|
|
||||||
"managementZoneId": "{{.mzId}}",
|
|
||||||
"mzId": "{{.mzId}}",
|
|
||||||
"rules": [
|
|
||||||
{
|
|
||||||
"delayInMinutes": 0,
|
|
||||||
"severityLevel": "AVAILABILITY",
|
|
||||||
"tagFilter": {
|
|
||||||
"includeMode": "INCLUDE_ANY",
|
|
||||||
"tagFilters": [
|
|
||||||
{
|
|
||||||
"context": "CONTEXTLESS",
|
|
||||||
"key": "Component",
|
|
||||||
"value": "{{.tag}}"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"delayInMinutes": 10,
|
|
||||||
"severityLevel": "ERROR",
|
|
||||||
"tagFilter": {
|
|
||||||
"includeMode": "INCLUDE_ANY",
|
|
||||||
"tagFilters": [
|
|
||||||
{
|
|
||||||
"context": "CONTEXTLESS",
|
|
||||||
"key": "Component",
|
|
||||||
"value": "{{.tag}}"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"delayInMinutes": 30,
|
|
||||||
"severityLevel": "PERFORMANCE",
|
|
||||||
"tagFilter": {
|
|
||||||
"includeMode": "INCLUDE_ANY",
|
|
||||||
"tagFilters": [
|
|
||||||
{
|
|
||||||
"context": "CONTEXTLESS",
|
|
||||||
"key": "Component",
|
|
||||||
"value": "{{.tag}}"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"delayInMinutes": 30,
|
|
||||||
"severityLevel": "RESOURCE_CONTENTION",
|
|
||||||
"tagFilter": {
|
|
||||||
"includeMode": "INCLUDE_ANY",
|
|
||||||
"tagFilters": [
|
|
||||||
{
|
|
||||||
"context": "CONTEXTLESS",
|
|
||||||
"key": "Component",
|
|
||||||
"value": "{{.tag}}"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"delayInMinutes": 10,
|
|
||||||
"severityLevel": "CUSTOM_ALERT",
|
|
||||||
"tagFilter": {
|
|
||||||
"includeMode": "INCLUDE_ANY",
|
|
||||||
"tagFilters": [
|
|
||||||
{
|
|
||||||
"context": "CONTEXTLESS",
|
|
||||||
"key": "Component",
|
|
||||||
"value": "{{.tag}}"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"delayInMinutes": 0,
|
|
||||||
"severityLevel": "MONITORING_UNAVAILABLE",
|
|
||||||
"tagFilter": {
|
|
||||||
"includeMode": "INCLUDE_ANY",
|
|
||||||
"tagFilters": [
|
|
||||||
{
|
|
||||||
"context": "CONTEXTLESS",
|
|
||||||
"key": "Component",
|
|
||||||
"value": "{{.tag}}"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
@ -1,6 +1,60 @@
|
||||||
CDASBC-HAL:
|
config:
|
||||||
- name: CD_ASBC-HAL/management-zone/CDASBC-HAL.name
|
- CDASBC-HAL-PROD: default.json
|
||||||
|
- CDASBC-HAL-INT: default.json
|
||||||
|
|
||||||
|
#Prod alerting profiles for EMEA/NA/CN
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDASBC-HAL-PROD:
|
||||||
|
- name: CD_ASBC-HAL PROD
|
||||||
- tag: ASBC-HAL
|
- tag: ASBC-HAL
|
||||||
- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id
|
- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id
|
||||||
config:
|
- env: PROD
|
||||||
- CDASBC-HAL: ASBC-HAL.json
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDASBC-HAL-PROD.EMEA-Prod:
|
||||||
|
- name: CD_ASBC-HAL PROD
|
||||||
|
- tag: ASBC-HAL
|
||||||
|
- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDASBC-HAL-PROD.NA-Prod:
|
||||||
|
- name: CD_ASBC-HAL PROD
|
||||||
|
- tag: ASBC-HAL
|
||||||
|
- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDASBC-HAL-PROD.CN-Prod:
|
||||||
|
- name: CD_ASBC-HAL PROD
|
||||||
|
- tag: ASBC-HAL
|
||||||
|
- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "false"
|
||||||
|
|
||||||
|
|
||||||
|
#INT alerting profiles for EMEA/NA/CN
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDASBC-HAL-INT:
|
||||||
|
- name: CD_ASBC-HAL INT
|
||||||
|
- tag: ASBC-HAL
|
||||||
|
- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id
|
||||||
|
- env: INT
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDASBC-HAL-INT.EMEA-PreProd:
|
||||||
|
- name: CD_ASBC-HAL INT
|
||||||
|
- tag: ASBC-HAL
|
||||||
|
- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id
|
||||||
|
- env: INT
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDASBC-HAL-INT.NA-PreProd:
|
||||||
|
- name: CD_ASBC-HAL INT
|
||||||
|
- tag: ASBC-HAL
|
||||||
|
- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id
|
||||||
|
- env: INT
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDASBC-HAL-INT.CN-PreProd:
|
||||||
|
- name: CD_ASBC-HAL INT
|
||||||
|
- tag: ASBC-HAL
|
||||||
|
- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id
|
||||||
|
- env: INT
|
||||||
|
- skipDeployment: "false"
|
||||||
|
|
@ -8,12 +8,17 @@
|
||||||
"delayInMinutes": 0,
|
"delayInMinutes": 0,
|
||||||
"severityLevel": "AVAILABILITY",
|
"severityLevel": "AVAILABILITY",
|
||||||
"tagFilter": {
|
"tagFilter": {
|
||||||
"includeMode": "INCLUDE_ANY",
|
"includeMode": "INCLUDE_ALL",
|
||||||
"tagFilters": [
|
"tagFilters": [
|
||||||
{
|
{
|
||||||
"context": "CONTEXTLESS",
|
"context": "CONTEXTLESS",
|
||||||
"key": "Component",
|
"key": "Component",
|
||||||
"value": "{{.tag}}"
|
"value": "{{.tag}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"context": "CONTEXTLESS",
|
||||||
|
"key": "Environment",
|
||||||
|
"value": "{{.env}}"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -22,12 +27,17 @@
|
||||||
"delayInMinutes": 10,
|
"delayInMinutes": 10,
|
||||||
"severityLevel": "ERROR",
|
"severityLevel": "ERROR",
|
||||||
"tagFilter": {
|
"tagFilter": {
|
||||||
"includeMode": "INCLUDE_ANY",
|
"includeMode": "INCLUDE_ALL",
|
||||||
"tagFilters": [
|
"tagFilters": [
|
||||||
{
|
{
|
||||||
"context": "CONTEXTLESS",
|
"context": "CONTEXTLESS",
|
||||||
"key": "Component",
|
"key": "Component",
|
||||||
"value": "{{.tag}}"
|
"value": "{{.tag}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"context": "CONTEXTLESS",
|
||||||
|
"key": "Environment",
|
||||||
|
"value": "{{.env}}"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -36,12 +46,17 @@
|
||||||
"delayInMinutes": 30,
|
"delayInMinutes": 30,
|
||||||
"severityLevel": "PERFORMANCE",
|
"severityLevel": "PERFORMANCE",
|
||||||
"tagFilter": {
|
"tagFilter": {
|
||||||
"includeMode": "INCLUDE_ANY",
|
"includeMode": "INCLUDE_ALL",
|
||||||
"tagFilters": [
|
"tagFilters": [
|
||||||
{
|
{
|
||||||
"context": "CONTEXTLESS",
|
"context": "CONTEXTLESS",
|
||||||
"key": "Component",
|
"key": "Component",
|
||||||
"value": "{{.tag}}"
|
"value": "{{.tag}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"context": "CONTEXTLESS",
|
||||||
|
"key": "Environment",
|
||||||
|
"value": "{{.env}}"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -50,12 +65,17 @@
|
||||||
"delayInMinutes": 30,
|
"delayInMinutes": 30,
|
||||||
"severityLevel": "RESOURCE_CONTENTION",
|
"severityLevel": "RESOURCE_CONTENTION",
|
||||||
"tagFilter": {
|
"tagFilter": {
|
||||||
"includeMode": "INCLUDE_ANY",
|
"includeMode": "INCLUDE_ALL",
|
||||||
"tagFilters": [
|
"tagFilters": [
|
||||||
{
|
{
|
||||||
"context": "CONTEXTLESS",
|
"context": "CONTEXTLESS",
|
||||||
"key": "Component",
|
"key": "Component",
|
||||||
"value": "{{.tag}}"
|
"value": "{{.tag}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"context": "CONTEXTLESS",
|
||||||
|
"key": "Environment",
|
||||||
|
"value": "{{.env}}"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -64,26 +84,17 @@
|
||||||
"delayInMinutes": 10,
|
"delayInMinutes": 10,
|
||||||
"severityLevel": "CUSTOM_ALERT",
|
"severityLevel": "CUSTOM_ALERT",
|
||||||
"tagFilter": {
|
"tagFilter": {
|
||||||
"includeMode": "INCLUDE_ANY",
|
"includeMode": "INCLUDE_ALL",
|
||||||
"tagFilters": [
|
"tagFilters": [
|
||||||
{
|
{
|
||||||
"context": "CONTEXTLESS",
|
"context": "CONTEXTLESS",
|
||||||
"key": "Component",
|
"key": "Component",
|
||||||
"value": "{{.tag}}"
|
"value": "{{.tag}}"
|
||||||
}
|
},
|
||||||
]
|
{
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"delayInMinutes": 0,
|
|
||||||
"severityLevel": "MONITORING_UNAVAILABLE",
|
|
||||||
"tagFilter": {
|
|
||||||
"includeMode": "INCLUDE_ANY",
|
|
||||||
"tagFilters": [
|
|
||||||
{
|
|
||||||
"context": "CONTEXTLESS",
|
"context": "CONTEXTLESS",
|
||||||
"key": "Component",
|
"key": "Environment",
|
||||||
"value": "{{.tag}}"
|
"value": "{{.env}}"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -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.
|
||||||
|
|
@ -0,0 +1,67 @@
|
||||||
|
### Process Group Detection Rules and Naming
|
||||||
|
|
||||||
|
#### Detection Rule or Naming?
|
||||||
|
|
||||||
|
For the explanation, we're using a real example of the Infotainment application:
|
||||||
|
|
||||||
|
!(PGNaming1)[../../../../img/PGNaming1.PNG]
|
||||||
|
|
||||||
|
Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking
|
||||||
|
the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your
|
||||||
|
application Management Zone.
|
||||||
|
|
||||||
|
In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in**
|
||||||
|
**this case, you MUST follow this guideline**
|
||||||
|
|
||||||
|
Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are
|
||||||
|
part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have?
|
||||||
|
|
||||||
|
If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the **
|
||||||
|
**same application**
|
||||||
|
|
||||||
|
Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming
|
||||||
|
the process group in the same way
|
||||||
|
|
||||||
|
*Same application*
|
||||||
|
- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of
|
||||||
|
seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring
|
||||||
|
- Solution: create a process group detection rule. Contact Dynatrace Expert
|
||||||
|
|
||||||
|
*Different application*
|
||||||
|
- Problem: Dynatrace is just naming in the same way applications that are different.
|
||||||
|
- Solution: This case is less severe, since it can be fixed with a process group naming rule.
|
||||||
|
|
||||||
|
|
||||||
|
What about our example?
|
||||||
|
!(PGNaming2)[../../../../img/PGNaming2.PNG]
|
||||||
|
!(PGNaming3)[../../../../img/PGNaming3.PNG]
|
||||||
|
|
||||||
|
Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload
|
||||||
|
within the metadata of each Process Group.
|
||||||
|
|
||||||
|
#### How to create a Process Group Detection Rule
|
||||||
|
1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this:
|
||||||
|
```
|
||||||
|
config:
|
||||||
|
- CDInfotainmentRule1: template.json
|
||||||
|
|
||||||
|
CDInfotainmentRule1:
|
||||||
|
- name: Infotainment Rule 1
|
||||||
|
- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName}
|
||||||
|
- tag: Infotainment
|
||||||
|
- skipDeployment: false
|
||||||
|
```
|
||||||
|
The result of the rule will be renaming the PG to this:
|
||||||
|
```
|
||||||
|
bon-information-prod ipa
|
||||||
|
bon-information-prod rsl
|
||||||
|
```
|
||||||
|
|
||||||
|
Other possible placeholders that you can use are for example:
|
||||||
|
{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$}
|
||||||
|
{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-}
|
||||||
|
{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$}
|
||||||
|
{ProcessGroup:KubernetesNamespace}
|
||||||
|
{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?}
|
||||||
|
|
||||||
|
You can combine different ones. Check the (documentation)[link] for more
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
config:
|
||||||
|
- CDASBC-HAL: template.json
|
||||||
|
|
||||||
|
CDASBC-HAL:
|
||||||
|
- name: MyProcessNamingRule
|
||||||
|
- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}"
|
||||||
|
- tag: ASBC-HAL
|
||||||
|
- skipDeployment: "true"
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
"displayName": "{{.name}}",
|
||||||
|
"enabled": true,
|
||||||
|
"metadata": {
|
||||||
|
"clusterVersion": "1.214.107.20210407-223952",
|
||||||
|
"configurationVersions": [
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"nameFormat": "{{.nameFormat}}",
|
||||||
|
"rules": [
|
||||||
|
{
|
||||||
|
"comparisonInfo": {
|
||||||
|
"negate": false,
|
||||||
|
"operator": "EQUALS",
|
||||||
|
"type": "TAG",
|
||||||
|
"value": {
|
||||||
|
"context": "CONTEXTLESS",
|
||||||
|
"key": "Component",
|
||||||
|
"value": "{{.tag}}"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"key": {
|
||||||
|
"attribute": "PROCESS_GROUP_TAGS"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type": "PROCESS_GROUP"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
### Service Naming Rules
|
||||||
|
|
||||||
|
A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same:
|
||||||
|
*DataDownloadV1*
|
||||||
|
*DataDownloadV1*
|
||||||
|
|
||||||
|
If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service.
|
||||||
|
|
||||||
|
*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process*
|
||||||
|
*Group detection rule*
|
||||||
|
|
||||||
|
In the case the PG are PROD and E2E, then we need to create a rule that looks like this:
|
||||||
|
|
||||||
|
```
|
||||||
|
config:
|
||||||
|
- CDInfotainmentRule1: template.json
|
||||||
|
|
||||||
|
CDInfotainmentRule1:
|
||||||
|
- name: Infotainment Rule 1
|
||||||
|
- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$}
|
||||||
|
- tag: Infotainment
|
||||||
|
- skipDeployment: false
|
||||||
|
```
|
||||||
|
|
||||||
|
The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in:
|
||||||
|
*DataDownloadV1 - prod*
|
||||||
|
*DataDownloadV1 - e2e*
|
||||||
|
|
||||||
|
Now, services will be easy to identify.
|
||||||
|
|
||||||
|
You can create rules based on any property/metadata. Some other placeholder's eamples:
|
||||||
|
{Service:DatabaseName} - E2E
|
||||||
|
{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment}
|
||||||
|
{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$}
|
||||||
|
{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
config:
|
||||||
|
- CDASBC-HAL: template.json
|
||||||
|
|
||||||
|
CDASBC-HAL:
|
||||||
|
- name: MyProcessNamingRule
|
||||||
|
- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}"
|
||||||
|
- tag: ASBC-HAL
|
||||||
|
- skipDeployment: "true"
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
"displayName": "{{.name}}",
|
||||||
|
"enabled": true,
|
||||||
|
"metadata": {
|
||||||
|
"clusterVersion": "1.214.107.20210407-223952",
|
||||||
|
"configurationVersions": [
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"nameFormat": "{{.nameFormat}}",
|
||||||
|
"rules": [
|
||||||
|
{
|
||||||
|
"comparisonInfo": {
|
||||||
|
"negate": false,
|
||||||
|
"operator": "EQUALS",
|
||||||
|
"type": "TAG",
|
||||||
|
"value": {
|
||||||
|
"context": "CONTEXTLESS",
|
||||||
|
"key": "Component",
|
||||||
|
"value": "{{.tag}}"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"key": {
|
||||||
|
"attribute": "SERVICE_TAGS"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type": "SERVICE"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
|
||||||
|
### How to configure custom services?
|
||||||
|
|
||||||
|
Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services.
|
||||||
|
|
@ -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"
|
||||||
|
|
@ -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}}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -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>
|
||||||
|
```
|
||||||
|
|
@ -0,0 +1,127 @@
|
||||||
|
config:
|
||||||
|
- CDASBC-HAL-PROD: default.json
|
||||||
|
- CDASBC-HAL-E2E: default.json
|
||||||
|
- CDASBC-HAL-INT: default.json
|
||||||
|
- CDASBC-HAL-TEST: default.json
|
||||||
|
|
||||||
|
#PROD dashboards for EMEA/NA/CN Prod
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDASBC-HAL-PROD:
|
||||||
|
- name: CD_ASBC-HAL PROD
|
||||||
|
- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name
|
||||||
|
- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDASBC-HAL-PROD.EMEA-Prod:
|
||||||
|
- name: CD_ASBC-HAL PROD
|
||||||
|
- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name
|
||||||
|
- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id
|
||||||
|
- tag: ASBC-HAL
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDASBC-HAL-PROD.NA-Prod:
|
||||||
|
- name: CD_ASBC-HAL PROD
|
||||||
|
- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name
|
||||||
|
- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id
|
||||||
|
- tag: ASBC-HAL
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDASBC-HAL-PROD.CN-Prod:
|
||||||
|
- name: CD_ASBC-HAL PROD
|
||||||
|
- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name
|
||||||
|
- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id
|
||||||
|
- tag: ASBC-HAL
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "false"
|
||||||
|
|
||||||
|
#E2E dashboards for EMEA/NA/CN E2E
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDASBC-HAL-E2E:
|
||||||
|
- name: CD_ASBC-HAL E2E
|
||||||
|
- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name
|
||||||
|
- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id
|
||||||
|
- env: E2E
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDASBC-HAL-E2E.EMEA-Prod:
|
||||||
|
- name: CD_ASBC-HAL E2E
|
||||||
|
- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name
|
||||||
|
- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id
|
||||||
|
- env: E2E
|
||||||
|
- tag: ASBC-HAL
|
||||||
|
- skipDeployment: "true"
|
||||||
|
CDASBC-HAL-E2E.NA-Prod:
|
||||||
|
- name: CD_ASBC-HAL E2E
|
||||||
|
- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name
|
||||||
|
- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id
|
||||||
|
- env: E2E
|
||||||
|
- tag: ASBC-HAL
|
||||||
|
- skipDeployment: "true"
|
||||||
|
CDASBC-HAL-E2E.CN-Prod:
|
||||||
|
- name: CD_ASBC-HAL E2E
|
||||||
|
- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name
|
||||||
|
- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id
|
||||||
|
- env: E2E
|
||||||
|
- tag: ASBC-HAL
|
||||||
|
- skipDeployment: "true"
|
||||||
|
|
||||||
|
#INT dashboards for EMEA/NA/CN
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDASBC-HAL-INT:
|
||||||
|
- name: CD_ASBC-HAL INT
|
||||||
|
- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name
|
||||||
|
- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id
|
||||||
|
- env: INT
|
||||||
|
- tag: ASBC-HAL
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDASBC-HAL-INT.EMEA-PreProd:
|
||||||
|
- name: CD_ASBC-HAL INT
|
||||||
|
- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name
|
||||||
|
- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id
|
||||||
|
- env: INT
|
||||||
|
- tag: ASBC-HAL
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDASBC-HAL-INT.NA-PreProd:
|
||||||
|
- name: CD_ASBC-HAL INT
|
||||||
|
- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name
|
||||||
|
- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id
|
||||||
|
- env: INT
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDASBC-HAL-INT.CN-PreProd:
|
||||||
|
- name: CD_ASBC-HAL INT
|
||||||
|
- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name
|
||||||
|
- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id
|
||||||
|
- env: INT
|
||||||
|
- skipDeployment: "false"
|
||||||
|
|
||||||
|
#TEST dashboards for EMEA/NA/CN
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDASBC-HAL-TEST:
|
||||||
|
- name: CD_ASBC-HAL TEST
|
||||||
|
- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name
|
||||||
|
- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id
|
||||||
|
- tag: ASBC-HAL
|
||||||
|
- env: TEST
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDASBC-HAL-TEST.EMEA-PreProd:
|
||||||
|
- name: CD_ASBC-HAL TEST
|
||||||
|
- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name
|
||||||
|
- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id
|
||||||
|
- tag: ASBC-HAL
|
||||||
|
- env: TEST
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDASBC-HAL-TEST.NA-PreProd:
|
||||||
|
- name: CD_ASBC-HAL TEST
|
||||||
|
- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name
|
||||||
|
- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id
|
||||||
|
- env: TEST
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDASBC-HAL-TEST.CN-PreProd:
|
||||||
|
- name: CD_ASBC-HAL TEST
|
||||||
|
- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name
|
||||||
|
- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id
|
||||||
|
- env: TEST
|
||||||
|
- skipDeployment: "false"
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -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!
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"alertingProfile": "{{.alertingProfile}}",
|
||||||
|
"bccReceivers": [],
|
||||||
|
"body": "{ProblemDetailsHTML}",
|
||||||
|
"ccReceivers": [],
|
||||||
|
"name": "{{.name}}",
|
||||||
|
"receivers": [
|
||||||
|
"{{.receivers}}"
|
||||||
|
],
|
||||||
|
"subject": "{State} Problem {ProblemID}: {ImpactedEntity}",
|
||||||
|
"type": "EMAIL"
|
||||||
|
}
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
{
|
{
|
||||||
"acceptAnyCertificate": false,
|
"acceptAnyCertificate": false,
|
||||||
"active": true,
|
"active": true,
|
||||||
"alertingProfile": "{{.apid}}",
|
"alertingProfile": "{{.alertingProfile}}",
|
||||||
"headers": [],
|
"headers": [],
|
||||||
"name": "{{.name}}",
|
"name": "{{.name}}",
|
||||||
"notifyEventMergesEnabled": false,
|
"notifyEventMergesEnabled": false,
|
||||||
"payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}",
|
"payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}",
|
||||||
"type": "WEBHOOK",
|
"type": "WEBHOOK",
|
||||||
"url": "https://msggroup.webhook.office.com/webhookb2/empty"
|
"url": "{{.webhook}}"
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,51 @@
|
||||||
|
config:
|
||||||
|
- CDASBC-HAL-PROD: msTeams.json
|
||||||
|
- CDASBC-HAL-INT: msTeams.json
|
||||||
|
|
||||||
|
#Prod notification system for EMEA/NA/CN
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDASBC-HAL-PROD:
|
||||||
|
- name: CD_ASBC-HAL PROD
|
||||||
|
- alertingProfile: CD_ASBC-HAL/alerting-profile/CDASBC-HAL-PROD.id
|
||||||
|
- webhook: https://empty
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDASBC-HAL-PROD.EMEA-Prod:
|
||||||
|
- name: CD_ASBC-HAL PROD
|
||||||
|
- alertingProfile: CD_ASBC-HAL/alerting-profile/CDASBC-HAL-PROD.id
|
||||||
|
- webhook: https://empty
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDASBC-HAL-PROD.NA-Prod:
|
||||||
|
- name: CD_ASBC-HAL PROD
|
||||||
|
- alertingProfile: CD_ASBC-HAL/alerting-profile/CDASBC-HAL-PROD.id
|
||||||
|
- webhook: https://empty
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDASBC-HAL-PROD.CN-Prod:
|
||||||
|
- name: CD_ASBC-HAL PROD
|
||||||
|
- alertingProfile: CD_ASBC-HAL/alerting-profile/CDASBC-HAL-PROD.id
|
||||||
|
- webhook: https://empty
|
||||||
|
- skipDeployment: "false"
|
||||||
|
|
||||||
|
#INT notification system for EMEA/NA/CN
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDASBC-HAL-INT:
|
||||||
|
- name: CD_ASBC-HAL INT
|
||||||
|
- alertingProfile: CD_ASBC-HAL/alerting-profile/CDASBC-HAL-INT.id
|
||||||
|
- webhook: https://empty
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDASBC-HAL-INT.EMEA-PreProd:
|
||||||
|
- name: CD_ASBC-HAL INT
|
||||||
|
- alertingProfile: CD_ASBC-HAL/alerting-profile/CDASBC-HAL-INT.id
|
||||||
|
- webhook: https://empty
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDASBC-HAL-INT.NA-PreProd:
|
||||||
|
- name: CD_ASBC-HAL INT
|
||||||
|
- alertingProfile: CD_ASBC-HAL/alerting-profile/CDASBC-HAL-INT.id
|
||||||
|
- webhook: https://empty
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDASBC-HAL-INT.CN-PreProd:
|
||||||
|
- name: CD_ASBC-HAL INT
|
||||||
|
- alertingProfile: CD_ASBC-HAL/alerting-profile/CDASBC-HAL-INT.id
|
||||||
|
- webhook: https://empty
|
||||||
|
- skipDeployment: "false"
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
|
||||||
|
### How to configure synthetics?
|
||||||
|
|
||||||
|
Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics.
|
||||||
|
|
@ -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"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
config:
|
||||||
|
- ASBC-HAL: default.json
|
||||||
|
|
||||||
|
ASBC-HAL:
|
||||||
|
- name: CD_ASBC-HAL - <synthetic-name>
|
||||||
|
- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name
|
||||||
|
- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id
|
||||||
|
- endpoint: <url>
|
||||||
|
- location: <location>
|
||||||
|
- skipDeployment: "true"
|
||||||
|
|
@ -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.
|
||||||
|
|
@ -0,0 +1,67 @@
|
||||||
|
### Process Group Detection Rules and Naming
|
||||||
|
|
||||||
|
#### Detection Rule or Naming?
|
||||||
|
|
||||||
|
For the explanation, we're using a real example of the Infotainment application:
|
||||||
|
|
||||||
|
!(PGNaming1)[../../../../img/PGNaming1.PNG]
|
||||||
|
|
||||||
|
Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking
|
||||||
|
the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your
|
||||||
|
application Management Zone.
|
||||||
|
|
||||||
|
In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in**
|
||||||
|
**this case, you MUST follow this guideline**
|
||||||
|
|
||||||
|
Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are
|
||||||
|
part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have?
|
||||||
|
|
||||||
|
If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the **
|
||||||
|
**same application**
|
||||||
|
|
||||||
|
Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming
|
||||||
|
the process group in the same way
|
||||||
|
|
||||||
|
*Same application*
|
||||||
|
- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of
|
||||||
|
seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring
|
||||||
|
- Solution: create a process group detection rule. Contact Dynatrace Expert
|
||||||
|
|
||||||
|
*Different application*
|
||||||
|
- Problem: Dynatrace is just naming in the same way applications that are different.
|
||||||
|
- Solution: This case is less severe, since it can be fixed with a process group naming rule.
|
||||||
|
|
||||||
|
|
||||||
|
What about our example?
|
||||||
|
!(PGNaming2)[../../../../img/PGNaming2.PNG]
|
||||||
|
!(PGNaming3)[../../../../img/PGNaming3.PNG]
|
||||||
|
|
||||||
|
Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload
|
||||||
|
within the metadata of each Process Group.
|
||||||
|
|
||||||
|
#### How to create a Process Group Detection Rule
|
||||||
|
1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this:
|
||||||
|
```
|
||||||
|
config:
|
||||||
|
- CDInfotainmentRule1: template.json
|
||||||
|
|
||||||
|
CDInfotainmentRule1:
|
||||||
|
- name: Infotainment Rule 1
|
||||||
|
- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName}
|
||||||
|
- tag: Infotainment
|
||||||
|
- skipDeployment: false
|
||||||
|
```
|
||||||
|
The result of the rule will be renaming the PG to this:
|
||||||
|
```
|
||||||
|
bon-information-prod ipa
|
||||||
|
bon-information-prod rsl
|
||||||
|
```
|
||||||
|
|
||||||
|
Other possible placeholders that you can use are for example:
|
||||||
|
{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$}
|
||||||
|
{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-}
|
||||||
|
{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$}
|
||||||
|
{ProcessGroup:KubernetesNamespace}
|
||||||
|
{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?}
|
||||||
|
|
||||||
|
You can combine different ones. Check the (documentation)[link] for more
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
config:
|
||||||
|
- CDASBC-RSU: template.json
|
||||||
|
|
||||||
|
CDASBC-RSU:
|
||||||
|
- name: MyProcessNamingRule
|
||||||
|
- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}"
|
||||||
|
- tag: ASBC-RSU
|
||||||
|
- skipDeployment: "true"
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
"displayName": "{{.name}}",
|
||||||
|
"enabled": true,
|
||||||
|
"metadata": {
|
||||||
|
"clusterVersion": "1.214.107.20210407-223952",
|
||||||
|
"configurationVersions": [
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"nameFormat": "{{.nameFormat}}",
|
||||||
|
"rules": [
|
||||||
|
{
|
||||||
|
"comparisonInfo": {
|
||||||
|
"negate": false,
|
||||||
|
"operator": "EQUALS",
|
||||||
|
"type": "TAG",
|
||||||
|
"value": {
|
||||||
|
"context": "CONTEXTLESS",
|
||||||
|
"key": "Component",
|
||||||
|
"value": "{{.tag}}"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"key": {
|
||||||
|
"attribute": "PROCESS_GROUP_TAGS"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type": "PROCESS_GROUP"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
### Service Naming Rules
|
||||||
|
|
||||||
|
A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same:
|
||||||
|
*DataDownloadV1*
|
||||||
|
*DataDownloadV1*
|
||||||
|
|
||||||
|
If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service.
|
||||||
|
|
||||||
|
*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process*
|
||||||
|
*Group detection rule*
|
||||||
|
|
||||||
|
In the case the PG are PROD and E2E, then we need to create a rule that looks like this:
|
||||||
|
|
||||||
|
```
|
||||||
|
config:
|
||||||
|
- CDInfotainmentRule1: template.json
|
||||||
|
|
||||||
|
CDInfotainmentRule1:
|
||||||
|
- name: Infotainment Rule 1
|
||||||
|
- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$}
|
||||||
|
- tag: Infotainment
|
||||||
|
- skipDeployment: false
|
||||||
|
```
|
||||||
|
|
||||||
|
The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in:
|
||||||
|
*DataDownloadV1 - prod*
|
||||||
|
*DataDownloadV1 - e2e*
|
||||||
|
|
||||||
|
Now, services will be easy to identify.
|
||||||
|
|
||||||
|
You can create rules based on any property/metadata. Some other placeholder's eamples:
|
||||||
|
{Service:DatabaseName} - E2E
|
||||||
|
{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment}
|
||||||
|
{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$}
|
||||||
|
{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
config:
|
||||||
|
- CDASBC-RSU: template.json
|
||||||
|
|
||||||
|
CDASBC-RSU:
|
||||||
|
- name: MyProcessNamingRule
|
||||||
|
- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}"
|
||||||
|
- tag: ASBC-RSU
|
||||||
|
- skipDeployment: "true"
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
"displayName": "{{.name}}",
|
||||||
|
"enabled": true,
|
||||||
|
"metadata": {
|
||||||
|
"clusterVersion": "1.214.107.20210407-223952",
|
||||||
|
"configurationVersions": [
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"nameFormat": "{{.nameFormat}}",
|
||||||
|
"rules": [
|
||||||
|
{
|
||||||
|
"comparisonInfo": {
|
||||||
|
"negate": false,
|
||||||
|
"operator": "EQUALS",
|
||||||
|
"type": "TAG",
|
||||||
|
"value": {
|
||||||
|
"context": "CONTEXTLESS",
|
||||||
|
"key": "Component",
|
||||||
|
"value": "{{.tag}}"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"key": {
|
||||||
|
"attribute": "SERVICE_TAGS"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type": "SERVICE"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
|
||||||
|
### How to configure custom services?
|
||||||
|
|
||||||
|
Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services.
|
||||||
|
|
@ -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"
|
||||||
|
|
@ -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}}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -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>
|
||||||
|
```
|
||||||
|
|
@ -0,0 +1,127 @@
|
||||||
|
config:
|
||||||
|
- CDASBC-RSU-PROD: default.json
|
||||||
|
- CDASBC-RSU-E2E: default.json
|
||||||
|
- CDASBC-RSU-INT: default.json
|
||||||
|
- CDASBC-RSU-TEST: default.json
|
||||||
|
|
||||||
|
#PROD dashboards for EMEA/NA/CN Prod
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDASBC-RSU-PROD:
|
||||||
|
- name: CD_ASBC-RSU PROD
|
||||||
|
- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name
|
||||||
|
- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDASBC-RSU-PROD.EMEA-Prod:
|
||||||
|
- name: CD_ASBC-RSU PROD
|
||||||
|
- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name
|
||||||
|
- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id
|
||||||
|
- tag: ASBC-RSU
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDASBC-RSU-PROD.NA-Prod:
|
||||||
|
- name: CD_ASBC-RSU PROD
|
||||||
|
- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name
|
||||||
|
- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id
|
||||||
|
- tag: ASBC-RSU
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDASBC-RSU-PROD.CN-Prod:
|
||||||
|
- name: CD_ASBC-RSU PROD
|
||||||
|
- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name
|
||||||
|
- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id
|
||||||
|
- tag: ASBC-RSU
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "false"
|
||||||
|
|
||||||
|
#E2E dashboards for EMEA/NA/CN E2E
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDASBC-RSU-E2E:
|
||||||
|
- name: CD_ASBC-RSU E2E
|
||||||
|
- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name
|
||||||
|
- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id
|
||||||
|
- env: E2E
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDASBC-RSU-E2E.EMEA-Prod:
|
||||||
|
- name: CD_ASBC-RSU E2E
|
||||||
|
- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name
|
||||||
|
- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id
|
||||||
|
- env: E2E
|
||||||
|
- tag: ASBC-RSU
|
||||||
|
- skipDeployment: "true"
|
||||||
|
CDASBC-RSU-E2E.NA-Prod:
|
||||||
|
- name: CD_ASBC-RSU E2E
|
||||||
|
- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name
|
||||||
|
- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id
|
||||||
|
- env: E2E
|
||||||
|
- tag: ASBC-RSU
|
||||||
|
- skipDeployment: "true"
|
||||||
|
CDASBC-RSU-E2E.CN-Prod:
|
||||||
|
- name: CD_ASBC-RSU E2E
|
||||||
|
- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name
|
||||||
|
- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id
|
||||||
|
- env: E2E
|
||||||
|
- tag: ASBC-RSU
|
||||||
|
- skipDeployment: "true"
|
||||||
|
|
||||||
|
#INT dashboards for EMEA/NA/CN
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDASBC-RSU-INT:
|
||||||
|
- name: CD_ASBC-RSU INT
|
||||||
|
- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name
|
||||||
|
- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id
|
||||||
|
- env: INT
|
||||||
|
- tag: ASBC-RSU
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDASBC-RSU-INT.EMEA-PreProd:
|
||||||
|
- name: CD_ASBC-RSU INT
|
||||||
|
- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name
|
||||||
|
- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id
|
||||||
|
- env: INT
|
||||||
|
- tag: ASBC-RSU
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDASBC-RSU-INT.NA-PreProd:
|
||||||
|
- name: CD_ASBC-RSU INT
|
||||||
|
- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name
|
||||||
|
- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id
|
||||||
|
- env: INT
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDASBC-RSU-INT.CN-PreProd:
|
||||||
|
- name: CD_ASBC-RSU INT
|
||||||
|
- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name
|
||||||
|
- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id
|
||||||
|
- env: INT
|
||||||
|
- skipDeployment: "false"
|
||||||
|
|
||||||
|
#TEST dashboards for EMEA/NA/CN
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDASBC-RSU-TEST:
|
||||||
|
- name: CD_ASBC-RSU TEST
|
||||||
|
- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name
|
||||||
|
- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id
|
||||||
|
- tag: ASBC-RSU
|
||||||
|
- env: TEST
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDASBC-RSU-TEST.EMEA-PreProd:
|
||||||
|
- name: CD_ASBC-RSU TEST
|
||||||
|
- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name
|
||||||
|
- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id
|
||||||
|
- tag: ASBC-RSU
|
||||||
|
- env: TEST
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDASBC-RSU-TEST.NA-PreProd:
|
||||||
|
- name: CD_ASBC-RSU TEST
|
||||||
|
- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name
|
||||||
|
- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id
|
||||||
|
- env: TEST
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDASBC-RSU-TEST.CN-PreProd:
|
||||||
|
- name: CD_ASBC-RSU TEST
|
||||||
|
- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name
|
||||||
|
- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id
|
||||||
|
- env: TEST
|
||||||
|
- skipDeployment: "false"
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
|
||||||
|
### How to configure synthetics?
|
||||||
|
|
||||||
|
Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics.
|
||||||
|
|
@ -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"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
config:
|
||||||
|
- ASBC-RSU: default.json
|
||||||
|
|
||||||
|
ASBC-RSU:
|
||||||
|
- name: CD_ASBC-RSU - <synthetic-name>
|
||||||
|
- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name
|
||||||
|
- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id
|
||||||
|
- endpoint: <url>
|
||||||
|
- location: <location>
|
||||||
|
- skipDeployment: "true"
|
||||||
|
|
@ -1,4 +1,60 @@
|
||||||
config:
|
config:
|
||||||
- CDASBC-SMACC: CDASBC-SMACC.json
|
- CDASBC-SMACC-PROD: default.json
|
||||||
CDASBC-SMACC:
|
- CDASBC-SMACC-INT: default.json
|
||||||
- name: CD_ASBC-SMACC
|
|
||||||
|
#Prod alerting profiles for EMEA/NA/CN
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDASBC-SMACC-PROD:
|
||||||
|
- name: CD_ASBC-SMACC PROD
|
||||||
|
- tag: ASBC-SMACC
|
||||||
|
- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDASBC-SMACC-PROD.EMEA-Prod:
|
||||||
|
- name: CD_ASBC-SMACC PROD
|
||||||
|
- tag: ASBC-SMACC
|
||||||
|
- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDASBC-SMACC-PROD.NA-Prod:
|
||||||
|
- name: CD_ASBC-SMACC PROD
|
||||||
|
- tag: ASBC-SMACC
|
||||||
|
- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDASBC-SMACC-PROD.CN-Prod:
|
||||||
|
- name: CD_ASBC-SMACC PROD
|
||||||
|
- tag: ASBC-SMACC
|
||||||
|
- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "false"
|
||||||
|
|
||||||
|
|
||||||
|
#INT alerting profiles for EMEA/NA/CN
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDASBC-SMACC-INT:
|
||||||
|
- name: CD_ASBC-SMACC INT
|
||||||
|
- tag: ASBC-SMACC
|
||||||
|
- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id
|
||||||
|
- env: INT
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDASBC-SMACC-INT.EMEA-PreProd:
|
||||||
|
- name: CD_ASBC-SMACC INT
|
||||||
|
- tag: ASBC-SMACC
|
||||||
|
- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id
|
||||||
|
- env: INT
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDASBC-SMACC-INT.NA-PreProd:
|
||||||
|
- name: CD_ASBC-SMACC INT
|
||||||
|
- tag: ASBC-SMACC
|
||||||
|
- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id
|
||||||
|
- env: INT
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDASBC-SMACC-INT.CN-PreProd:
|
||||||
|
- name: CD_ASBC-SMACC INT
|
||||||
|
- tag: ASBC-SMACC
|
||||||
|
- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id
|
||||||
|
- env: INT
|
||||||
|
- skipDeployment: "false"
|
||||||
|
|
@ -8,12 +8,17 @@
|
||||||
"delayInMinutes": 0,
|
"delayInMinutes": 0,
|
||||||
"severityLevel": "AVAILABILITY",
|
"severityLevel": "AVAILABILITY",
|
||||||
"tagFilter": {
|
"tagFilter": {
|
||||||
"includeMode": "INCLUDE_ANY",
|
"includeMode": "INCLUDE_ALL",
|
||||||
"tagFilters": [
|
"tagFilters": [
|
||||||
{
|
{
|
||||||
"context": "CONTEXTLESS",
|
"context": "CONTEXTLESS",
|
||||||
"key": "Component",
|
"key": "Component",
|
||||||
"value": "{{.tag}}"
|
"value": "{{.tag}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"context": "CONTEXTLESS",
|
||||||
|
"key": "Environment",
|
||||||
|
"value": "{{.env}}"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -22,12 +27,17 @@
|
||||||
"delayInMinutes": 10,
|
"delayInMinutes": 10,
|
||||||
"severityLevel": "ERROR",
|
"severityLevel": "ERROR",
|
||||||
"tagFilter": {
|
"tagFilter": {
|
||||||
"includeMode": "INCLUDE_ANY",
|
"includeMode": "INCLUDE_ALL",
|
||||||
"tagFilters": [
|
"tagFilters": [
|
||||||
{
|
{
|
||||||
"context": "CONTEXTLESS",
|
"context": "CONTEXTLESS",
|
||||||
"key": "Component",
|
"key": "Component",
|
||||||
"value": "{{.tag}}"
|
"value": "{{.tag}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"context": "CONTEXTLESS",
|
||||||
|
"key": "Environment",
|
||||||
|
"value": "{{.env}}"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -36,12 +46,17 @@
|
||||||
"delayInMinutes": 30,
|
"delayInMinutes": 30,
|
||||||
"severityLevel": "PERFORMANCE",
|
"severityLevel": "PERFORMANCE",
|
||||||
"tagFilter": {
|
"tagFilter": {
|
||||||
"includeMode": "INCLUDE_ANY",
|
"includeMode": "INCLUDE_ALL",
|
||||||
"tagFilters": [
|
"tagFilters": [
|
||||||
{
|
{
|
||||||
"context": "CONTEXTLESS",
|
"context": "CONTEXTLESS",
|
||||||
"key": "Component",
|
"key": "Component",
|
||||||
"value": "{{.tag}}"
|
"value": "{{.tag}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"context": "CONTEXTLESS",
|
||||||
|
"key": "Environment",
|
||||||
|
"value": "{{.env}}"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -50,12 +65,17 @@
|
||||||
"delayInMinutes": 30,
|
"delayInMinutes": 30,
|
||||||
"severityLevel": "RESOURCE_CONTENTION",
|
"severityLevel": "RESOURCE_CONTENTION",
|
||||||
"tagFilter": {
|
"tagFilter": {
|
||||||
"includeMode": "INCLUDE_ANY",
|
"includeMode": "INCLUDE_ALL",
|
||||||
"tagFilters": [
|
"tagFilters": [
|
||||||
{
|
{
|
||||||
"context": "CONTEXTLESS",
|
"context": "CONTEXTLESS",
|
||||||
"key": "Component",
|
"key": "Component",
|
||||||
"value": "{{.tag}}"
|
"value": "{{.tag}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"context": "CONTEXTLESS",
|
||||||
|
"key": "Environment",
|
||||||
|
"value": "{{.env}}"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -64,26 +84,17 @@
|
||||||
"delayInMinutes": 10,
|
"delayInMinutes": 10,
|
||||||
"severityLevel": "CUSTOM_ALERT",
|
"severityLevel": "CUSTOM_ALERT",
|
||||||
"tagFilter": {
|
"tagFilter": {
|
||||||
"includeMode": "INCLUDE_ANY",
|
"includeMode": "INCLUDE_ALL",
|
||||||
"tagFilters": [
|
"tagFilters": [
|
||||||
{
|
{
|
||||||
"context": "CONTEXTLESS",
|
"context": "CONTEXTLESS",
|
||||||
"key": "Component",
|
"key": "Component",
|
||||||
"value": "{{.tag}}"
|
"value": "{{.tag}}"
|
||||||
}
|
},
|
||||||
]
|
{
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"delayInMinutes": 0,
|
|
||||||
"severityLevel": "MONITORING_UNAVAILABLE",
|
|
||||||
"tagFilter": {
|
|
||||||
"includeMode": "INCLUDE_ANY",
|
|
||||||
"tagFilters": [
|
|
||||||
{
|
|
||||||
"context": "CONTEXTLESS",
|
"context": "CONTEXTLESS",
|
||||||
"key": "Component",
|
"key": "Environment",
|
||||||
"value": "{{.tag}}"
|
"value": "{{.env}}"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -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.
|
||||||
|
|
@ -0,0 +1,67 @@
|
||||||
|
### Process Group Detection Rules and Naming
|
||||||
|
|
||||||
|
#### Detection Rule or Naming?
|
||||||
|
|
||||||
|
For the explanation, we're using a real example of the Infotainment application:
|
||||||
|
|
||||||
|
!(PGNaming1)[../../../../img/PGNaming1.PNG]
|
||||||
|
|
||||||
|
Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking
|
||||||
|
the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your
|
||||||
|
application Management Zone.
|
||||||
|
|
||||||
|
In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in**
|
||||||
|
**this case, you MUST follow this guideline**
|
||||||
|
|
||||||
|
Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are
|
||||||
|
part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have?
|
||||||
|
|
||||||
|
If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the **
|
||||||
|
**same application**
|
||||||
|
|
||||||
|
Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming
|
||||||
|
the process group in the same way
|
||||||
|
|
||||||
|
*Same application*
|
||||||
|
- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of
|
||||||
|
seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring
|
||||||
|
- Solution: create a process group detection rule. Contact Dynatrace Expert
|
||||||
|
|
||||||
|
*Different application*
|
||||||
|
- Problem: Dynatrace is just naming in the same way applications that are different.
|
||||||
|
- Solution: This case is less severe, since it can be fixed with a process group naming rule.
|
||||||
|
|
||||||
|
|
||||||
|
What about our example?
|
||||||
|
!(PGNaming2)[../../../../img/PGNaming2.PNG]
|
||||||
|
!(PGNaming3)[../../../../img/PGNaming3.PNG]
|
||||||
|
|
||||||
|
Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload
|
||||||
|
within the metadata of each Process Group.
|
||||||
|
|
||||||
|
#### How to create a Process Group Detection Rule
|
||||||
|
1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this:
|
||||||
|
```
|
||||||
|
config:
|
||||||
|
- CDInfotainmentRule1: template.json
|
||||||
|
|
||||||
|
CDInfotainmentRule1:
|
||||||
|
- name: Infotainment Rule 1
|
||||||
|
- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName}
|
||||||
|
- tag: Infotainment
|
||||||
|
- skipDeployment: false
|
||||||
|
```
|
||||||
|
The result of the rule will be renaming the PG to this:
|
||||||
|
```
|
||||||
|
bon-information-prod ipa
|
||||||
|
bon-information-prod rsl
|
||||||
|
```
|
||||||
|
|
||||||
|
Other possible placeholders that you can use are for example:
|
||||||
|
{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$}
|
||||||
|
{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-}
|
||||||
|
{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$}
|
||||||
|
{ProcessGroup:KubernetesNamespace}
|
||||||
|
{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?}
|
||||||
|
|
||||||
|
You can combine different ones. Check the (documentation)[link] for more
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
config:
|
||||||
|
- CDASBC-SMACC: template.json
|
||||||
|
|
||||||
|
CDASBC-SMACC:
|
||||||
|
- name: MyProcessNamingRule
|
||||||
|
- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}"
|
||||||
|
- tag: ASBC-SMACC
|
||||||
|
- skipDeployment: "true"
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
"displayName": "{{.name}}",
|
||||||
|
"enabled": true,
|
||||||
|
"metadata": {
|
||||||
|
"clusterVersion": "1.214.107.20210407-223952",
|
||||||
|
"configurationVersions": [
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"nameFormat": "{{.nameFormat}}",
|
||||||
|
"rules": [
|
||||||
|
{
|
||||||
|
"comparisonInfo": {
|
||||||
|
"negate": false,
|
||||||
|
"operator": "EQUALS",
|
||||||
|
"type": "TAG",
|
||||||
|
"value": {
|
||||||
|
"context": "CONTEXTLESS",
|
||||||
|
"key": "Component",
|
||||||
|
"value": "{{.tag}}"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"key": {
|
||||||
|
"attribute": "PROCESS_GROUP_TAGS"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type": "PROCESS_GROUP"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
### Service Naming Rules
|
||||||
|
|
||||||
|
A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same:
|
||||||
|
*DataDownloadV1*
|
||||||
|
*DataDownloadV1*
|
||||||
|
|
||||||
|
If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service.
|
||||||
|
|
||||||
|
*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process*
|
||||||
|
*Group detection rule*
|
||||||
|
|
||||||
|
In the case the PG are PROD and E2E, then we need to create a rule that looks like this:
|
||||||
|
|
||||||
|
```
|
||||||
|
config:
|
||||||
|
- CDInfotainmentRule1: template.json
|
||||||
|
|
||||||
|
CDInfotainmentRule1:
|
||||||
|
- name: Infotainment Rule 1
|
||||||
|
- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$}
|
||||||
|
- tag: Infotainment
|
||||||
|
- skipDeployment: false
|
||||||
|
```
|
||||||
|
|
||||||
|
The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in:
|
||||||
|
*DataDownloadV1 - prod*
|
||||||
|
*DataDownloadV1 - e2e*
|
||||||
|
|
||||||
|
Now, services will be easy to identify.
|
||||||
|
|
||||||
|
You can create rules based on any property/metadata. Some other placeholder's eamples:
|
||||||
|
{Service:DatabaseName} - E2E
|
||||||
|
{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment}
|
||||||
|
{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$}
|
||||||
|
{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
config:
|
||||||
|
- CDASBC-SMACC: template.json
|
||||||
|
|
||||||
|
CDASBC-SMACC:
|
||||||
|
- name: MyProcessNamingRule
|
||||||
|
- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}"
|
||||||
|
- tag: ASBC-SMACC
|
||||||
|
- skipDeployment: "true"
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
"displayName": "{{.name}}",
|
||||||
|
"enabled": true,
|
||||||
|
"metadata": {
|
||||||
|
"clusterVersion": "1.214.107.20210407-223952",
|
||||||
|
"configurationVersions": [
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"nameFormat": "{{.nameFormat}}",
|
||||||
|
"rules": [
|
||||||
|
{
|
||||||
|
"comparisonInfo": {
|
||||||
|
"negate": false,
|
||||||
|
"operator": "EQUALS",
|
||||||
|
"type": "TAG",
|
||||||
|
"value": {
|
||||||
|
"context": "CONTEXTLESS",
|
||||||
|
"key": "Component",
|
||||||
|
"value": "{{.tag}}"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"key": {
|
||||||
|
"attribute": "SERVICE_TAGS"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type": "SERVICE"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
|
||||||
|
### How to configure custom services?
|
||||||
|
|
||||||
|
Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services.
|
||||||
|
|
@ -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"
|
||||||
|
|
@ -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}}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -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>
|
||||||
|
```
|
||||||
|
|
@ -0,0 +1,127 @@
|
||||||
|
config:
|
||||||
|
- CDASBC-SMACC-PROD: default.json
|
||||||
|
- CDASBC-SMACC-E2E: default.json
|
||||||
|
- CDASBC-SMACC-INT: default.json
|
||||||
|
- CDASBC-SMACC-TEST: default.json
|
||||||
|
|
||||||
|
#PROD dashboards for EMEA/NA/CN Prod
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDASBC-SMACC-PROD:
|
||||||
|
- name: CD_ASBC-SMACC PROD
|
||||||
|
- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name
|
||||||
|
- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDASBC-SMACC-PROD.EMEA-Prod:
|
||||||
|
- name: CD_ASBC-SMACC PROD
|
||||||
|
- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name
|
||||||
|
- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id
|
||||||
|
- tag: ASBC-SMACC
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDASBC-SMACC-PROD.NA-Prod:
|
||||||
|
- name: CD_ASBC-SMACC PROD
|
||||||
|
- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name
|
||||||
|
- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id
|
||||||
|
- tag: ASBC-SMACC
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDASBC-SMACC-PROD.CN-Prod:
|
||||||
|
- name: CD_ASBC-SMACC PROD
|
||||||
|
- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name
|
||||||
|
- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id
|
||||||
|
- tag: ASBC-SMACC
|
||||||
|
- env: PROD
|
||||||
|
- skipDeployment: "false"
|
||||||
|
|
||||||
|
#E2E dashboards for EMEA/NA/CN E2E
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDASBC-SMACC-E2E:
|
||||||
|
- name: CD_ASBC-SMACC E2E
|
||||||
|
- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name
|
||||||
|
- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id
|
||||||
|
- env: E2E
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDASBC-SMACC-E2E.EMEA-Prod:
|
||||||
|
- name: CD_ASBC-SMACC E2E
|
||||||
|
- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name
|
||||||
|
- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id
|
||||||
|
- env: E2E
|
||||||
|
- tag: ASBC-SMACC
|
||||||
|
- skipDeployment: "true"
|
||||||
|
CDASBC-SMACC-E2E.NA-Prod:
|
||||||
|
- name: CD_ASBC-SMACC E2E
|
||||||
|
- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name
|
||||||
|
- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id
|
||||||
|
- env: E2E
|
||||||
|
- tag: ASBC-SMACC
|
||||||
|
- skipDeployment: "true"
|
||||||
|
CDASBC-SMACC-E2E.CN-Prod:
|
||||||
|
- name: CD_ASBC-SMACC E2E
|
||||||
|
- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name
|
||||||
|
- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id
|
||||||
|
- env: E2E
|
||||||
|
- tag: ASBC-SMACC
|
||||||
|
- skipDeployment: "true"
|
||||||
|
|
||||||
|
#INT dashboards for EMEA/NA/CN
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDASBC-SMACC-INT:
|
||||||
|
- name: CD_ASBC-SMACC INT
|
||||||
|
- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name
|
||||||
|
- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id
|
||||||
|
- env: INT
|
||||||
|
- tag: ASBC-SMACC
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDASBC-SMACC-INT.EMEA-PreProd:
|
||||||
|
- name: CD_ASBC-SMACC INT
|
||||||
|
- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name
|
||||||
|
- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id
|
||||||
|
- env: INT
|
||||||
|
- tag: ASBC-SMACC
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDASBC-SMACC-INT.NA-PreProd:
|
||||||
|
- name: CD_ASBC-SMACC INT
|
||||||
|
- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name
|
||||||
|
- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id
|
||||||
|
- env: INT
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDASBC-SMACC-INT.CN-PreProd:
|
||||||
|
- name: CD_ASBC-SMACC INT
|
||||||
|
- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name
|
||||||
|
- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id
|
||||||
|
- env: INT
|
||||||
|
- skipDeployment: "false"
|
||||||
|
|
||||||
|
#TEST dashboards for EMEA/NA/CN
|
||||||
|
#Dry-run needed for all hubs
|
||||||
|
CDASBC-SMACC-TEST:
|
||||||
|
- name: CD_ASBC-SMACC TEST
|
||||||
|
- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name
|
||||||
|
- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id
|
||||||
|
- tag: ASBC-SMACC
|
||||||
|
- env: TEST
|
||||||
|
- skipDeployment: "true"
|
||||||
|
#Configuration
|
||||||
|
CDASBC-SMACC-TEST.EMEA-PreProd:
|
||||||
|
- name: CD_ASBC-SMACC TEST
|
||||||
|
- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name
|
||||||
|
- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id
|
||||||
|
- tag: ASBC-SMACC
|
||||||
|
- env: TEST
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDASBC-SMACC-TEST.NA-PreProd:
|
||||||
|
- name: CD_ASBC-SMACC TEST
|
||||||
|
- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name
|
||||||
|
- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id
|
||||||
|
- env: TEST
|
||||||
|
- skipDeployment: "false"
|
||||||
|
CDASBC-SMACC-TEST.CN-PreProd:
|
||||||
|
- name: CD_ASBC-SMACC TEST
|
||||||
|
- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name
|
||||||
|
- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id
|
||||||
|
- env: TEST
|
||||||
|
- skipDeployment: "false"
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
|
||||||
|
### How to configure synthetics?
|
||||||
|
|
||||||
|
Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics.
|
||||||
|
|
@ -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"
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue